OSA - кооперативная многозадачная операционная система реального времени (ОСРВ) для микроконтроллеров фирмы Microchip серий PIC10, PIC12, PIC16, PIC18, PIC24 и dsPIC, AVR 8-bit фирмы Atmel, а также микроконтроллеров STM8 фирмы STMicroelectronics.
ОСРВ позволяет программисту сосредоточить свои усилия на решении конкретных задач (алгоритмических, математических и т.п.), не отвлекаясь на задачи второстепенные. Она берет на себя:
переключение между параллельными процессами (например, опрос клавиатуры, вывод информации на экран, управление реле и.т.п.);
отсчет таймаутов, выдержку задержек;
выбор готовой к выполнению задачи с наивысшим приоритетом и передача ей управления;
обмен данными между задачами (с помощью семафоров, сообщений и пр.).
Задачами в ОСРВ OSA являются обычные функции. Тело функции должно содержать бесконечный цикл, внутри которого должен быть хотя бы один вызов сервиса переключения задач (иначе остальные задачи не получат управления).
| PIC10/12 | PIC16/12 | PIC16F1xxx | PIC18 | PIC24/dsPIC |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
При входе в прерывание и при выходе из него нужно использовать сервисы
OS_EnterInt() и
OS_LeaveInt(). Первый вставляется в самом начале прерывания, сразу после описания переменных функции прерывания, а второй - в самом конце перед закрывающей скобкой "}". Например:
void interrupt int_routine (void)
{
char var1, var2;
int var3;
OS_EnterInt();
... // Здесь делается проверка флагов прерываний
... // и обработка
OS_LeaveInt();
}
Дело в том, что HT-PICC не всегда сохраняет значение регистра FSR (FSR0 для PICC18), который активно ипсользуется самой системой.
Для 12-разрядных контроллеров накладывается ограничение на размерность сообшений и счетных семафоров. И короткие сообщения, и указатели на сообщения, и счетные семафоры могут иметь размерность только в 1 байт.
При работе с PIC18 версия mikroC должна быть не ниже 2.50 PRO
При работе с PIC12 и PIC16 версия mikroC должна быть не ниже 3.00 PRO
Нужно следить за тем, чтобы динамические таймеры, очереди сообщений и сами сообщения не попадали в bank2 и bank3. Если компилятор их все-таки разместит там, то нужно предпринять меры к тому, чтобы он перенес их в нижнюю область памяти (переставить определения переменных местами). Пока что это ограничение обойти не удается, ведутся переговоры с командой mikroE.
В версии 4.104 появилась
ошибка, которая не позволяет собирать программу с OSA. Пользуйтесь младшими версиями (проверены: 4.023, 4.069, 4.084, 4.099, 4.102, 4.108, 4.109, 4.110)
Выражаю благодарность всем, кто принимал участие в поисках и исправлении багов, не ленился копаться в кодах и тратил свое время на дебаггер. Особую благодарность Вадиму Франку и Д. Иванову, принимавшим самое активное участие и проявившим терпение и настойчивость.
Также выражаю благодарность Alex'у B., любезно предоставившему свой сайт для документации и оказавшему помощь в ее размещении здесь.