В обработчик прерывания параметр не передашь. И вообще, как вы себе это представляете? Идёт идёт себе Ваша основная программа, а тут бац, срабатывает прерывание, ну, скажем, буфер UART опустел и начинает исполняться обработчик. В какой именно момент времени вы собрались в таком случае передать в прерывание аргумент?
Возможно вам поможет сужение области видимости глобальных переменных одним модулем(файлом). Это достигается путем объявления переменной со словом static. А ещё не забывайте, что переменные, доступ к которым производится из обработчика прерывания - должны быть объявлены как volatile. В случае с UART, к примеру, делаете отдельный модуль(uart.c) в этом модуле обявляете передающий буфер(как static), обработчик прерывания в этот же модуль определите и инициализацию в отдельную функцию. Вот и решатся все ваши проблемы. С внешним миром uart.c связывается по средством функций(типа putch(), getch() и т.д.). А ещё используйте структуры. Всё, что касается состояния uart - в структуру. Можно для этого дела даже typedef сделать, а все функции в модуле сделать таким образом, чтобы принимали параметром указатель на такую структуру. Тогда ваш uart.c будет универсальным и одинаково хорошо будет справляться с десятком портов uart... нужно только удачно всё спроектировать и будет красиво)
Структурируйте программу так, чтобы каждая сущность была как можно более самодостаточна и закончена, думайте как именно будут связаны модули друг с другом(глобальными переменными или соответствующими интерфейсными функциями)... И вообще, ИМХО, проблема с прерываниями - мелочь, по сравнению с удачностью общего дизайна.
--------------------
The truth is out there...
|