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