Выполение функции loop() останавливается на Serial.print() при использовании глобального массива
- Войдите на сайт для отправки комментариев
Доброго дня
Сталкнулся с проблемой, когда выполение loop() просто прерывается на строчке с Serial.print(), если перед этим поставить изменение значений глобального массива
/* дефайны/библиотеки */
//набор глобальных переменных
int transmit_data[3];
int telemetry[2];
byte rssi;
int trnsmtd_pack = 1, failed_pack;
unsigned long RSSI_timer;
int finSpeed[1];
boolean Dir = 1;
int Step = 1024/255;
void setup() {
Serial.begin(230400); // пробовал разные скорости
//radioSetup();
pinMode (SW, INPUT_PULLUP);
initial_x = analogRead(STICK_X);
initial_y = analogRead(STICK_Y);
}
void loop() {
Serial.print("1");
//speedCalcualte();
finSpeed[0] = 255;
finSpeed[1] = 255;
Dir = 1;
Serial.print("2");
transmit_data[3] = Dir;
Serial.print("3");
transmit_data[0] = finSpeed[0]; // speed left side
transmit_data[1] = finSpeed[1]; // speed right side
transmit_data[2] = Dir; //direction , 1 - forward, 0 - backward
}
Если оставляю Serial.print() только в первой строчке - все выводится. Как только добавляю принт после заполнения глобального массива данными - не выводится в порт вообще ничего и ардунка (nano) ведет себя так, будто выполнение самой функции loop() в этот момент прерывается.
Если же я массив finSpeed задаю не в качестве глобальных, а в качестве локальных данных внутри функции loop() - то проблема уходит.
Как влияет работа с глобальными переменными на вывод данных в порт и прерывание выполнения loop()?
Или здесь еще какая-то ошибка может быть?
Заранее спасибо и заранее извиняюсь, если вопрос очень глупый и я просто пока не смог нагуглить на него ответ!
inttransmit_data[3];В массивах нумерация начинается с нуля и потому максимальный элемент для этого массива - 2
Капец, какой глупый миспринт)
Спасибо :)
Странно что при компиляции скетча никаких ошибок небыло
Странно что при компиляции скетча никаких ошибок небыло
их и не будет, в Си следить за размерностью массивов - обязанность программиста, а не компилятора
Будет, если пользоваться нормальными инструментами, а не игрушечной средой arduino.
Нужно включить все предупреждения компилятора, которые по-умолчанию выключены.
Капец, какой глупый миспринт)
И не один. С массивом
finSpeedта жепетрушка.Будет, если пользоваться нормальными инструментами, а не игрушечной средой arduino.
Если нормальными, то как раз не будет.
И не один. С массивом
finSpeedта жепетрушка.Ага... есть такое) но после того, как мне указали на первый - второй сразу сам в глаза бросился)
А у меня что-то никак в голове не сложится: Массив типа int, а значения типа bool присваиваются. Это нормально? Даже предупреждений не будет?
А чего там предупреждать? bool - тоже численная величина, flase = 0, true !=0
Мне очень нравится шутливый диалог про линукс, который, как мне кажется, очень в тему всяких там предупреждений и прочих вытираний соплей за пользователем:
- Почему в линуксе нет средства undelete?
- Если юзер уже показал свою бестолковость тем, что стер нужные файлы - стоит ли ему позволять лезть в недра файловой системы?