====== Конфигурация OSAcfg.h ====== Файл OSAcfg.h для каждой программы должен быть свой, и его желательно держать в той же директории, где и сама программа. Этот файл автоматически включается файлом OSA.h и является настроечным (в нем определяется, где хранятся какие данные, сколько максимально может быть задач, семафоров, таймеров и пр.). Шаблон этого файла лежит в папке OSA\PROJECT. В самом простом случае этот файл может быть пустым, тогда будут приняты все настройки по умолчанию. Для упрощения создания/редактирования файла конфигурации можно воспользоваться утилитой **{{osa:osacfg_tool_setup.rar|OSAcfg_Tool}}** ===== Системные константы ===== ^ Имя константы ^ Описание ^ |##OS_ENABLE_ALL## | Разрешить все | |##OS_ENABLE_CSEM## | Если определена эта константа, то в программу включается код по работе с счетными семафорами | |##OS_ENABLE_QUEUE## | Если определена эта константа, то в программу включается код по работе с очередями сообщений | |##OS_ENABLE_SQUEUE## | Если определена эта константа, то в программу включается код по работе с очередями коротких однобайтовых сообщений | |##OS_QUEUE_SQUEUE_IDENTICAL## | Если используются сразу и очереди сообщений и очереди коротких сообщений, и есть уверенность в том, что размерность указателя на сообщение (тип ##[[osa:ref:description:data_types#OST_MSG|OST_MSG]]##) и короткого соощения (тип ##[[osa:ref:description:data_types#OST_SMSG|OST_SMSG]]##) одинакова, то можно определить эту константу, чтобы для работы с обоими типами очередей выполнялась одними и теми же функциями. Особенно актуально для PIC10, PIC12 и PIC16. | |##OS_ENABLE_CRITICAL_SECTION## | Если определена, то в программу включаются функции входа в критическую секцию и выхода из нее | ~~UP~~ ===== Управление приоритетами ===== ^ Имя константы ^ Допустимые значения ^ Описание ^ |##OS_PRIORITY_LEVEL##| ##OS_PRIORITY_NORMAL## | (defaul) Обычный приоритетный режим с последовательной проверкой задач на готовность в порядке их создания | | | ##OS_PRIORITY_DISABLE## | Принудительно устанавливает всем задачам высший приоритет. Можно использовать для ускорения работы планировщика, если приоритетность не важна | | | ##OS_PRIORITY_EXTENDED## | Расширенный приоритетный режим, который распределяет ресурсы ядра микроконтроллера между задачами пропорционально весам их приоритетов | | ##OS_DISABLE_PRIORITY##| | (old style consant) То же, что и OS_PRIORITY_DISABLE | ~~UP~~ ===== Управление таймерами ===== ^ Имя константы ^ Описание ^ |##OS_ENABLE_TTIMERS## | Если эта константа определена, то в программу будут включены функции по определению задержек в задачах и таймеры в ##[[osa:ref:description:data_types#OST_TCB|OST_TCB]]##. Если в программе не планируется использовать ##OS_Delay## или ожидание событий с таймаутами, то эту константу можно не определять (тогда получится меньший код и освободится RAM). | |##OS_ENABLE_DTIMERS## | Если определена, то в программе можно использовать динамические таймеры | |##OS_ENABLE_QTIMERS## | Если определена, то в программе можно использовать очкркдь таймеров | |##OS_STIMERS## |Количество статических таймеров. Если определена, то создается массив статических таймеров такой размерности | |##OS_STIMERS_ENABLE_ALLOCATION## | Если определена, то в код включаются функции по назначению статических таймеров в ходе выполнения программы | |##OS_STIMERS_OPTIMIZE_SPEED## | Если определена, то код по управлению статическими таймерами в OS_Timer будет оптимизирован по размеру (иначе - по скорости) | |##OS_TTIMERS_OPTIMIZE_SPEED## | Если определена, то код по управлению таймерами задач в OS_Timer будет оптимизирован по размеру (иначе - по скорости) | ~~UP~~ ===== Сервисы в прерываниях ===== ^ Имя константы ^ Описание ^ |##OS_ENABLE_INT_BSEM## | | |##OS_ENABLE_INT_CSEM## | Разрешает отправлять счетные семафоры из прерываний | |##OS_ENABLE_INT_FLAG## | Разрешает работать с флагами внутри прерывания | |##OS_ENABLE_INT_MSG## | Разрешает отправку сообщений из прерываний | |##OS_ENABLE_INT_SMSG## | Разрешает отправку коротких сообений из прерываний | |##OS_ENABLE_INT_QUEUE## | Разрешает отправку сообщений и коротких сообщений через очередь из прерываний | |##OS_ENABLE_INT_ALL## | Если определена, то включает все выше перечисленные константы | ~~UP~~ ===== Содержание данных ===== ^ Имя константы ^ Описание ^ Требуется памяти ^ |##OS_TASKS## |Количество задач, которые одновременно могут быть активны|На каждую задачу:\\ Для **PIC12** - по 2 байта.\\ Для **PIC16** - по 3 байта.\\ Для **PIC18** - по 4 байта.\\ Для **PIC24** и **dsPIC** - по 20 байт.\\ Для **AVR** - по 5 байт.\\ Если в программе используются таймеры (определена константа ##OS_ENABLE_TTIMERS##), то а каждую задачу добавляется ##[[osa:ref:appendix:configuration#Типы данных|OS_TTIMER_SIZE]]## байт.| |##OS_BSEMS## |Количество бинарных семафоров |**Для 8-разрядных**: По 1 байту на каждую неполную восьмерку семафоров. **Для 16-разрядных**: По 1 слову, на каждые 16 семафоров.| |OS_TIMERS8 (устаревшая) |Количество пользовательских 8-разрядных таймеров |На каждый по 1 байту| |OS_TIMERS16 (устаревшая) |Количество пользовательских 16-разрядных таймеров |На каждый по 2 байту| |OS_TIMERS24 (устаревшая) |Количество пользовательских 24-разрядных таймеров |На каждый по 2 байту (в этих таймерах нет младшего байта)| |OS_TIMERS32 (устаревшая) |Количество пользовательских 32-разрядных таймеров |На каждый по 4 байта| ~~UP~~ ===== Типы данных ===== ^ Имя константы ^ Значение по умолчанию ^ Описание ^ |##OS_TIMER_SIZE## | 2 |Количество байт, занимаемых системным таймером. Может быть = 1, 2 или 4.| |##OS_STIMER_SIZE## | OS_TIMER_SIZE |Количество байт, занимаемых статическим таймером. Может быть = 1, 2 или 4.| |##OS_TTIMER_SIZE## | OS_TIMER_SIZE |Количество байт, занимаемых таймером задачи. Может быть = 1, 2 или 4.| |##OS_QTIMER_SIZE## | OS_TIMER_SIZE |Количество байт, занимаемых таймерами в очереди таймеров. Может быть = 1, 2 или 4.| |##OS_DTIMER_SIZE## | OS_TIMER_SIZE |Количество байт, занимаемых динамическим таймером. Может быть = 1, 2 или 4.| |##OS_CSEM_SIZE## | 1 |Количество байт, выделяемое под каждый счетный семафор. Определяет, в каких пределах может меняться счетный семафор. Может быть = 1, 2 или 4| |##OS_SMSG_TYPE##* | unsigned char |Тип коротких сообщений, которыми обмениваются задачи.| |##OS_MSG_TYPE##* | void * |Тип сообщений для MSG и QUEUE. | * - эти типы нельзя переопределять при использовании PIC12. ~~UP~~ ===== Размещение данных для PIC10, PIC12, PIC16 и PIC18 ===== Константы OS_BANK_xxx могут принимать значения: * Для PIC10, PIC12, PIC16: 0, 1, 2 или 3 - выбор банка bank0, bank1, bank2, bank3, соотвт. * Для PIC18: 0, не 0 - accsess и не access, соотв. * Для PIC24: 0, не 0 - near и не near, соотв. * Для STM8: 0, не 0 - near и не near, соотв. ^ Имя константы ^ Значение по умолчанию ^ Описание ^ |##OS_BANK_OS##* |0 |Определяет, где будут храниться все переменные системы (если для них не указаны другие).| |##OS_BANK_BSEMS##* |OS_BANK_OS |Для двоичных семафоров.| |##OS_BANK_TASKS##* |OS_BANK_OS |Банк, в котором будут размещены дескрипторы задач| |##OS_BANK_STIMERS##* |OS_BANK_TIMERS |Для статических таймеров| |##OS_ADDRESS_TASK## |- |Для mikroC PRO for PIC16: Для размещения дескрипторов задач по определенному адресу памяти (например в 0x120 (для bank2) или 0x190 (для bank3)| |OS_BANK_TIMERS* |OS_BANK_OS |Для статических таймеров старрого типа| |OS_BANK_TIMERS8* (устаревшая) |OS_BANK_TIMERS |Для 8-разрядных статических таймеров| |OS_BANK_TIMERS16* (устаревшая) |OS_BANK_TIMERS |Для 16-разрядных статических таймеров| |OS_BANK_TIMERS24* (устаревшая) |OS_BANK_TIMERS |Для 24-разрядных статических таймеров| |OS_BANK_TIMERS32* (устаревшая) |OS_BANK_TIMERS |Для 32-разрядных статических таймеров| |OS_BANK_TIMEOUTS* (устаревшая) |OS_BANK_TIMERS |Для битовых полей - флагов переполнения (таймаутов) пользовательских статических таймеров.| * - игнорируется в CCS и mikroC PRO, а также для контроллеров AVR ~~UP~~