Всем привет.
MCU: Atmega8
IDE: CV AVR
Задача состоит в следующем:
Есть комп, на котором крутится прога, на которой есть куча кнопок. По нажатию на кнопку, на контроллер по USART'у засылается соответствующее сообщение, контроллер его хавает и включает соответствующую нагрузку.
Обработка приёма сообщений должна быть асинхронной, потому что в этот момент на контроллере крутится его основная прога, которая шимит сигнал, читает показания датчиков и т.п.
Сообщение которое комп засылает в МК 8 байт = заголовок, команда, параметры и контрольная сумма, всё как полагается.
Я написал прогу, которая выполняет данные действия, в прерываниях проверяет какой байт пришёл, а затем сравнивает с форматом команды.
Теперь встал вопрос о переносимости данного функционала на другие устройства. А у них может быть другая архитектура. поэтому чтобы не заниматься копипастой, я хочу написать что-то типа модуля, где будут необходимые мне функции.
Как прототип я бы хотел взять одну из функций модуля twi.h
Код:
|
void twi_slave_init(
bool match_any_addr,
unsigned char addr,
unsigned char *rx_buffer,
unsigned char rx_buffer_size,
unsigned char *tx_buffer,
bool (*slave_rx_handler)(bool rx_complete),
unsigned char (*slave_tx_handler)(bool tx_complete)
); |
мне нужен совет как создать глобальную функцию, в которую я бы мог передать ссылку на обработчик, так чтобы она вызывалась всякий раз когда байт приходит по шине данных, по типу приведённой выше функции.
Кто подскажет как это сделать, буду очень благодарен.