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., любезно предоставившему свой сайт для документации и оказавшему помощь в ее размещении здесь.