ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
10 июля
334361 Топик полностью
Dir (10.06.2012 01:56 - 01:59, просмотров: 124) ответил mazur на Можно подробнее? По всему пунктам вашего сообщения.
Да что тут подробнее. Все ж очевидно. Собираешь все запросы на обработку сообщений в один вектор (байт, слово...). Единичный бит в нем - флаг запроса на обработку. Если вектор ненулевой, значит есть запросы, нулевой - запросов нет. Обычно бит запроса сбрасывается родным обработчиком, но у тебя есть такие обработчики, которые должны сбрасывать и не родные запросы. Ну ты и сбрасываешь одной командой родные и не родные флаги (маскируешь по И). А если нет запроса, то не важна и его расшифровка. Ну а реализация - суперлуп (петля), в котором опрашивается вектор и если он не нулевой, то по номеру бита с "1" идет обращение к п/п обработки соответствующего запроса. Она и сбрасывает свой флаг (бит), а заодно и другие, связанные с ним. Устанавливать флаги можно в прерываниях, а можно в сопрограмме (сопрограммах) - аналогичных суперлупах. Переход между сопрограммами (потоками, параллельно работающими программами) - уж как задача и душа пожелает. Можно даже на нескольких процессорах...