Самый высокоуровневый подход - Событийно-ориентированная архитектура (Event-Driven Architecture, EDA). Здесь нет центрального цикла. Компоненты системы общаются через сообщения (события): одни модули их "издают" (publish), другие - "обрабатывают" (subscribe). Часто строится поверх RTOS или как большая state-машина. // Издатель события (например, драйвер кнопки) void button_isr(void) { event_t btn_event = { .type = EVENT_BUTTON_PRESSED, .data = 1 }; event_bus_publish(&btn_event); // Отправка в шину событий } // Подписчик события (обработчик интерфейса) void ui_handler(const event_t *event) { if(event->type == EVENT_BUTTON_PRESSED) { update_display("Button pressed!"); } } // Инициализация системы событий int main(void) { event_bus_init(); event_bus_subscribe(EVENT_BUTTON_PRESSED, ui_handler); while(1) { event_bus_process(); // Обработка очереди событий idle_task(); } } Как это работает на практике? Система строится вокруг шины событий (event bus) или диспетчера сообщений. Компонент