[an error occurred while processing this directive]
Я обычно делаю в таких случаях некое подобие диспетчера RTOS ручками (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Dir 18 августа 2002 г. 20:25
В ответ на: Подкиньте идейки по pеализации RTOS для PIC16F87x pls отправлено Make_Pic 18 августа 2002 г. 19:02

1. Делаю единственное прерывание от TMR0, работающего на максимальной скорости (при f=4МГц - каждые 256 мкс). Это и есть квант времени для задач.
2. Внутри прерывания организовываю счетчик (+1 на каждое прерывание)
3. Анализируя 2 младших бита счетчика, организовываю по 1 кванту длительностью 256 мкс для каждой задачи (общая длительность 1024мкс).
4. Длительность задач или подсчитываю вручную (рутина, однако), или организовываю критичные к времени выполнения функции задач в цикле прерывания, а некритичные - в "глупом" цикле (почти всегда).
5. Передачи всех параметров как между задачами, так и между "критичными" и "некритичными" частями задачи - через семафоры.
6. Функции открытия/закрытия задач, если такие имеются, - ручками.

PS. Фактически все этапы этого стиля - это как бы вызовы функций RTOS, но мне жалко тратить время на изучение этих RTOS, а потом на отлавливание их глюков. Когда же сам пишешь эти функции (один раз для каждого процессора, кстати), то потом лучше их чувствуешь.

PPS. Квант 256 мкс можно сделать равным 250 мкс (или другой подобной величине) с помощью прерывания от TMR2. Тогда очень просто реализовываются часы реального времени.

PPPS. Как пример эффективности такого стиля могу привести реализацию 8-канального UART на SX28 одним из бывших моих коллег. В каждом UARTе (независимо!) реализованы все стандартные функции (в том числе установка скорости до 19,2кБод и генерация битов ошибок) и еще остается резерв производительности для пользовательской задачи.


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru