ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
27 ноября
132496 Топик полностью
VVB (25.09.2008 15:48, просмотров: 83) ответил Alex B. на я знаю, и что? примерный код можете привести. Зачем две очереди-то?
Код в процессе написания. Лучше словами объясню. Имеется блок индикации с графическим интерфейсом. В нём крутится uCOS и принимает какие-то данные. По анализу этих данных (которые будут анализироваться во многих задачах и в ISR, но я, скорее всего, вынесу из ISR анализ) нужно: 1. установить/сбросить тревогу высокого, среднего или низкого приоритета 2. обновить индикацию, в соответствие со всеми активными тревогами (причём тревоги разделяются по приоритетам, т.е. надо менять графические объекты, визуальную и звуковую сигнализацию в соответствие с тревогой высшего приоритета). Я решил сделать так: 1. тревога -- это структура со своими полями (приоритет, тип звука, текст и прочее) во флэше. Тревог много. 2. будет массив активных тревог 3. будет задача, обслуживающая индикацию и звук 4. будет две очереди: AlarmQAdd и AlarmQRelease. При необходимости добавить любую тревогу в массив активных тревог будет вызвана OSQPost(AlarmQAdd, &АДРЕС_ТРЕВОГИ) и соответственно для её удаления OSQPost(AlarmQRelease, &АДРЕС_ТРЕВОГИ) 5. задача обработки разруливает ситуацию с приоритетами и перестраивает массив активных тревог. Задача имеет наивысший приоритет среди прочих задач. 6. обновление текста тревоги на дисплее -- просто тупо вывести в первую строку первую тревогу в массиве активных тревог, затем вторую и т.д. (массив перестраивается при добавлении/удалении тревог). Можно сделать более удобно? Готов подискутировать и внимательно выслушаю советы бывалых людей.