====== Конфигурация 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~~