Я программирую STM32F4 на C (gcc), это ARM Cortex M4, я вижу, что все примеры завершают свою функцию main() бесконечным циклом, даже когда остальная часть программы будет выполняться из-за прерываний. Если я попытаюсь удалить цикл из своей программы, прерывания также перестанут запускаться.
Почему я не могу просто удалить этот цикл и выйти из основного потока?
вот сборка (думаю, это большой палец, но я не могу его прочитать даже с документом):
LoopFillZerobss:
ldr r3, = _ebss
cmp r2, r3
bcc FillZerobss
/* Call the clock system intitialization function.*/
bl SystemInit
/* Call the application's entry point.*/
bl main
bx lr
.size Reset_Handler, .-Reset_Handler
main
? - person Carl Norum   schedule 27.04.2013main
не означает, что код перестает выполняться, это означает, что вы передаете управление обратно какому-то другому коду. - person Carl Norum   schedule 27.04.2013WFI
. Используйте это, если вы хотите войти в состояние пониженного энергопотребления в цикле простоя: infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0553a/ - person Carl Norum   schedule 27.04.2013bx
— это инструкция «ветвления и обмена». В данном случае это эквивалентно операторуreturn
в программе на C. Это означает, что этот код пытается вернуться к какому-то другому коду. Если нет вызывающего кода, регистр ссылок (lr
), вероятно, является мусором, и его выполнение вызывает сбой/исключение. - person Carl Norum   schedule 27.04.2013bl main
поместитPC+4
в ссылочный регистр, ваше следующееbx lr
будет бесконечным циклом; умышленно или нет. - person artless noise   schedule 27.04.2013