[an error occurred while processing this directive]
[an error occurred while processing this directive]
Внедрение uCOS-2 - для AndyMozzevilov'a и не только(+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive]
[an error occurred while processing this directive]
[an error occurred while processing this directive]
|
Отправлено
Romario 19 августа 2001 г. 17:01
|
|
|
|
Смысл вопроса: как синхронизировать действия ISR и Task
;---------------------------------------------------------------
Есть Задача (T), которая анализирует сигнал(S) от некоего железа(h/w),
который устанавливается в ISR. T в априори должна работать так:
1) Настройка h/w используя S.
2) h/w настроена.
3) Заснуть и ждать S.
4) Если есть S, проснуться и goto 1).
Средствами uCOS:
если использовать TaskSuspend после 2), a в ISR TaskResume то неполучается - S может возникнуть после 2) и до 3) - T заснет навечно.
Вариант:
после 2) установить на вектор ISR другую ISR где есть процедура
SemPost, а 3) заменить на процедуру SemPend. Процесс замены ISR
можно "обрамить" OS_ENTER/EXIT CRITICAL, так что потеря INT н%
Составить ответ
|||
Конференция
|||
Архив
Ответы
- Я что-то не понял, а почему в прерывании нельзя поднять тот-же семафор, а в задаче ждать его? — Andy Mozzhevilov (20.08.2001 07:40, 77 байт)
- Ответ: — Romario (20.08.2001 13:52, 143 байт)
- Ответ: (+) — Алексей Мусин (20.08.2001 07:10, 159 байт)
- Ответ: не понял в чем проблема... — Михаил Евстафьев (20.08.2001 03:46, 357 байт)
- Ответ: — Romario (20.08.2001 13:50, 832 байт)
- Мне кажется наиболее удачный вариат будет с использованием флагов. — VladimirM (19.08.2001 17:28, пустое)
- упс, текст сглючил(+) — Romario (19.08.2001 17:05, 166 байт)
Перейти к списку ответов
|||
Конференция
|||
Архив
|||
Главная страница
|||
Содержание
|||
Без кадра
E-mail:
info@telesys.ru