Простейшая программа на языке Си имеет вид:
xxxxxxxxxx
int main() {
return 0;
}
Функция main()
— точка входа в программу, а return
— точка её выхода. Такая программа ничего не делает, только возвращает 0
туда, откуда она была вызвана (в операционной системе, традиция идет из UNIX). Более того, нас явно не удовлетворит тот факт, что программа в принципе завершит свою работу, ведь запустить её ещё раз можно только отключив и включим питание. Как же выйти из ситуации?
На самом деле, простейшая программа для МК имеет немного другой вид.
xxxxxxxxxx
int main() {
while(1) {}
// return 0; -- можно не указывать, т.к. программа никогда не выйдет из цикла while
}
Заменив строчку return 0;
на бесконечный цикл, мы заставим крутиться программу до скончания электронов в электросети... Программа будет выполняться постоянно и повторять код, заключенный в скобках while
. Это называют главным циклом (или суперциклом) программы. Всю инициализацию периферии нужно провести до входа программы в суперцикл, т.к. настроить её нужно всего один раз (в большинстве случаев).
Мы уже говорили про исключительные ситуации. Если программа начнет делать что-то не совсем корректное, например, станет писать какие-нибудь данные в область памяти программы, — произойдет ошибка, и программа из главного цикла улетит в одну из аварийных функций (обработчиков прерываний), например, в HardFault_Handler()
. Аварийные функции, как правило, принимают следующий вид:
xxxxxxxxxx
void HardFault_Handler(void) {
while (1);
}
При отладке приложения можно сразу найти последствие — устройство зависнет. Дальше нужно будет найти причину.
Назад | Оглавление | Дальше