Официальный сайт компании Arduino по адресу arduino.cc
Выполение функции 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()?
Или здесь еще какая-то ошибка может быть?
Заранее спасибо и заранее извиняюсь, если вопрос очень глупый и я просто пока не смог нагуглить на него ответ!
int
transmit_data[3];
В массивах нумерация начинается с нуля и потому максимальный элемент для этого массива - 2
Капец, какой глупый миспринт)
Спасибо :)
Странно что при компиляции скетча никаких ошибок небыло
Странно что при компиляции скетча никаких ошибок небыло
их и не будет, в Си следить за размерностью массивов - обязанность программиста, а не компилятора
Будет, если пользоваться нормальными инструментами, а не игрушечной средой arduino.
Нужно включить все предупреждения компилятора, которые по-умолчанию выключены.
Капец, какой глупый миспринт)
И не один. С массивом
петрушка.
finSpeed
та жеБудет, если пользоваться нормальными инструментами, а не игрушечной средой arduino.
Если нормальными, то как раз не будет.
И не один. С массивом
петрушка.
finSpeed
та жеАга... есть такое) но после того, как мне указали на первый - второй сразу сам в глаза бросился)
А у меня что-то никак в голове не сложится: Массив типа int, а значения типа bool присваиваются. Это нормально? Даже предупреждений не будет?
А чего там предупреждать? bool - тоже численная величина, flase = 0, true !=0
Мне очень нравится шутливый диалог про линукс, который, как мне кажется, очень в тему всяких там предупреждений и прочих вытираний соплей за пользователем:
- Почему в линуксе нет средства undelete?
- Если юзер уже показал свою бестолковость тем, что стер нужные файлы - стоит ли ему позволять лезть в недра файловой системы?