Почему Serial.print печатает только значение от 0 до 84 для массива целых чисел длиной 100?
int a[100],i;
void setup() {
Serial.begin(9600);
}
void loop() {
for(i=0; i<100; i++) {
a[i] = i;
Serial.println(a[i]);
}
exit(0);
}
@Anurag , 👍7
1 ответ
Это происходит потому, что вы используете exit(0). Это отключает прерывания и переходит в бесконечный цикл. Однако последовательная печать сначала помещает символ в буфер, а затем каждый символ по очереди извлекается из этого буфера и отправляется через последовательный порт.
Все было нормально до тех пор, пока вы не использовали exit(0);, а то, что осталось в последовательном буфере для отправки, никогда не будет отправлено, потому что прерывания отключены.
На самом деле, нет никаких причин использовать exit() на микроконтроллере — в конце концов, куда он может «выйти»? Операционной системы, в которую можно выйти, нет. Поэтому он делает то, что ближе всего к полному отсутствию каких-либо действий, насколько это возможно.
Вместо этого, если вы хотите «остановить» свою программу, следует использовать простой while(1);, который позволит прерываниям по-прежнему срабатывать.
В качестве альтернативы, если вы действительно хотите использовать exit(), вам следует сначала сбросить последовательный порт:
Serial.flush();
Эта функция будет блокироваться до тех пор, пока буфер передачи не будет полностью очищен прерыванием и последний байт не покинет регистр сдвига TX UART.
- Возможно ли иметь массив массивов int?
- Замена нескольких выводов pinMode() и digitalWrite() на массив
- Инициализация массива структур
- Ошибка: invalid application of 'sizeof' to incomplete type 'int []' при попытке вычислить размер массива в библиотеке
- Работает ли конструкция int array[100] = {0} на Arduino?
- Невозможно создать массив типа const char*
- Как изменить байт на целое число? - Arduino
- Как найти индекс максимального значения в массиве?