В каком-либо из setup
или loop
, если бы я добавил exit(0)
вызов, куда бы передавался контроль? Каким будет следующее состояние микроконтроллера? Это остановит выполнение и выключит питание?
Я использую ревизию 2 Arduino Uno.
programming
arduino-uno
asheeshr
источник
источник
NOP
ассемблерными операторами, которые просто останавливаются на пару тактовОтветы:
Мое первоначальное предположение неверно. Я бы подумал, что он просто вернется из цикла, а основная библиотека просто вызовет loop () снова. Тем не менее, я вижу следующий код был создан. Заметив, что __stop_program это жесткий цикл ...
Выдержка из списка Blink.ino с добавлением exit (0):
Разборка вышеперечисленного:
Обратите внимание, что если бы _exit не вызвал cli, прерывания могли бы что-то делать. Но это не тот случай.
источник
avr-objdump -S {compiled *.elf file}
создает файл, включающий код C, который ведет к каждому разделу кода сборки. Намного легче следовать.*.elf
от этого, и затем я получаю правильные символы отладки. Я думаю, что текстовый редактор / кнопка-макрос Arduino (я отказываюсь называть это IDE, поскольку это не так) - это удаление отладочной информации только из скомпилированного основного файла C ++ по какой-то причудливой и глупой причине.avr-objdump -S -I/path/to/the/sketch/folder xxx.elf
. Это путь к папке эскиза , а не сам файл .ino. Тогда вы должны получить источник C в дампе.Ну, я только что проверил это с моим Arduino Uno, и он просто полностью остановил код и оставил все выходные данные такими, какими они были, когда код перестал работать (поэтому он оставил включенный светодиод). Кажется, не происходит очистки ввода-вывода, когда вы вызываете exit. Это было то, чего я ожидал, потому что Arduino IDE предоставляет функции настройки и цикла, если вы программируете ATMEGA * 28 с помощью любой другой AVR IDE, вы запускаете основную функцию, как все программы на C / C ++. Функции настройки и петли не являются стандартными для микроконтроллеров AVR.
Примечание. Нажатие кнопки сброса перезапускает код, если вам было интересно.
источник
exit(0)
разобранных инструкций являются (IIRC)__stop_program
,cli
и спинлка. Я хотел проверить, правильно ли это, с объяснением того, как передается элемент управления, например, стек вызовов pop ?, вызов ISR?