Почему 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);
}
7 голосов | спросил Anurag 19 PMpThu, 19 Apr 2018 14:00:13 +030000Thursday 2018, 14:00:13

1 ответ


27

Это потому, что вы используете exit(0). Это отключает прерывания и переходит в бесконечный цикл. Тем не менее, последовательная печать сначала помещается в буфер, и каждый символ затем удаляется из этого буфера по очереди и отправляется через последовательный порт.

Все в порядке, до конца, когда вы используете exit(0);, и то, что осталось в последовательном буфере для отправки, никогда не отправляется, потому что прерывания отключены.

На самом деле нет никакой причины использовать exit() на микроконтроллере - в конце концов, где он может «выйти»? Для выхода нет ОС. Таким образом, он делает следующее лучшее, что так близко, что ничего не делает как можно разумнее.

Вместо этого, если вы хотите «остановить» свою программу, вы должны использовать простой while(1);, который позволит прерываниям еще запускаться.

В качестве альтернативы, если вы действительно хотите использовать exit(), вы должны flush сначала:

Serial.flush();

Эта функция будет блокироваться до тех пор, пока буфер передачи не будет полностью опустошен прерыванием, а последний байт оставит регистр сдвига TX UART.

ответил Majenko 19 PMpThu, 19 Apr 2018 14:16:40 +030016Thursday 2018, 14:16:40

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132