====== OSA : Введение ====== ===== Что такое OSA ====== **//OSA//** - кооперативная многозадачная операционная система реального времени (ОСРВ) для микроконтроллеров фирмы Microchip серий **PIC10**, **PIC12**, **PIC16**, **PIC18**, **PIC24** и **dsPIC**, **AVR 8-bit** фирмы Atmel, а также микроконтроллеров **STM8** фирмы STMicroelectronics. ОСРВ позволяет программисту сосредоточить свои усилия на решении конкретных задач (алгоритмических, математических и т.п.), не отвлекаясь на задачи второстепенные. Она берет на себя: * переключение между параллельными процессами (например, опрос клавиатуры, вывод информации на экран, управление реле и.т.п.); * отсчет таймаутов, выдержку задержек; * выбор готовой к выполнению задачи с наивысшим приоритетом и передача ей управления; * обмен данными между задачами (с помощью семафоров, сообщений и пр.). Задачами в ОСРВ OSA являются обычные функции. Тело функции должно содержать бесконечный цикл, внутри которого должен быть хотя бы один вызов сервиса переключения задач (иначе остальные задачи не получат управления). ===== Поддерживаемые компиляторы ===== ==== PIC ==== ^ ^ PIC10/12 ^ PIC16/12 ^ PIC16F1xxx ^ PIC18 ^ PIC24/dsPIC ^ | {{:osa:ref:picc_std.png|HT-PICC STD}} | {{yes.png}} | {{yes.png}} | | {{yes.png}} | | | {{:osa:ref:picc_pro.png|HT-PICC PRO}} | {{no.png}} | {{no.png}} | {{no.png}} | {{no.png}} | | | {{:osa:ref:mplabc.png|Microchip C}} | | | | {{yes.png}} | {{yes.png}} | | {{:osa:ref:mikroc_pro.png|mikroC PRO}} | | {{yes.png}} | | {{yes.png}} | {{process.png}} | | {{:osa:ref:ccs.png|CCS PICC}} | | {{yes.png}} | | {{yes.png}} | | ==== AVR ==== ^ ^ AVR 8-bit ^ | {{:osa:ref:winavr.png|WinAVR}} | {{yes.png}} | | {{:osa:ref:iar.png|IAR}} | {{yes.png}} | | {{:osa:ref:cvavr.png|Code Vision AVR}} | {{process.png}} | ==== STM8 ==== ^ ^ STM8 ^ | {{:osa:ref:cosmic.png|Cosmic}} | {{yes.png}} | | {{:osa:ref:iar.png|IAR}} | {{yes.png}} | | {{:osa:ref:raisonance.png|Raisonance}} | {{yes.png}} | ===== Ограничения ===== ==== HT-PICC, HT-PICC18 ==== * При входе в прерывание и при выходе из него нужно использовать сервисы ##[[osa:ref:allservices:OS_EnterInt|OS_EnterInt]]()## и ##[[osa:ref:allservices:OS_LeaveInt|OS_LeaveInt]]()##. Первый вставляется в самом начале прерывания, сразу после описания переменных функции прерывания, а второй - в самом конце перед закрывающей скобкой "}". Например: void interrupt int_routine (void) { char var1, var2; int var3; OS_EnterInt(); ... // Здесь делается проверка флагов прерываний ... // и обработка OS_LeaveInt(); } Дело в том, что HT-PICC не всегда сохраняет значение регистра FSR (FSR0 для PICC18), который активно ипсользуется самой системой. ==== Microchip C18 ==== * нельзя включать оптимизацию procedural abstraction * нельзя пользоваться Stack model: Multi bank ==== Microchip C30 ==== * Для PIC24 и dsPIC нельзя включать оптимизацию -mpa (procedural abstraction) ==== 12-разрядные PIC'и ==== * Для 12-разрядных контроллеров накладывается ограничение на размерность сообшений и счетных семафоров. И короткие сообщения, и указатели на сообщения, и счетные семафоры могут иметь размерность только в 1 байт. ==== microC PRO для PIC16 ==== * При работе с PIC18 версия mikroC должна быть не ниже 2.50 PRO * При работе с PIC12 и PIC16 версия mikroC должна быть не ниже 3.00 PRO * Нужно следить за тем, чтобы динамические таймеры, очереди сообщений и сами сообщения не попадали в bank2 и bank3. Если компилятор их все-таки разместит там, то нужно предпринять меры к тому, чтобы он перенес их в нижнюю область памяти (переставить определения переменных местами). Пока что это ограничение обойти не удается, ведутся переговоры с командой mikroE. ==== CCS PICC ==== * В версии 4.104 появилась [[http://www.ccsinfo.com/forum/viewtopic.php?t=41180|ошибка]], которая не позволяет собирать программу с OSA. Пользуйтесь младшими версиями (проверены: 4.023, 4.069, 4.084, 4.099, 4.102, 4.108, 4.109, 4.110) ==== IAR (AVR and STM8) ==== * Работает только в режиме C (не C++). * Оптимизация cross-call должна быть отключена. ==== WinAVR ==== * При работе из-под AVRStudio файлы OSA и файлы проекта должны находиться на одном логическом диске. ==== STM8 ==== * Работает только с контроллерами с ROM 64K и меньше ~~UP~~ ===== Благодарности ===== **Выражаю благодарность всем, кто принимал участие в поисках и исправлении багов, не ленился копаться в кодах и тратил свое время на дебаггер. Особую благодарность ##Вадиму Франку## и ##Д. Иванову##, принимавшим самое активное участие и проявившим терпение и настойчивость.** **Также выражаю благодарность ##Alex'у B.##, любезно предоставившему свой сайт для документации и оказавшему помощь в ее размещении здесь.** ~~UP~~