Файл «RTX_Config.h» определяет конфигурационные параметры для CMSIS-RTOS RTX и должен быть частью каждого проекта использующий ядро CMSIS-RTOS RTX. Параметры конфигурации подробно описаны в следующих разделах:
- Конфигурация системы охватывает общесистемные настройки для глобального пула памяти, частота тиков таймера, буфер событий ISR и циклическое переключение потоков (round-robin).
- Конфигурация потока предоставляет несколько параметров для настройки функций управления потоками.
- Конфигурация таймера предоставляет несколько параметров для настройки функций управления таймером.
- Конфигурация флаги событий предоставляет несколько параметров для настройки функций флаги событий.
- Конфигурация мьютекса предоставляет несколько параметров для настройки функций мьютекса.
- Конфигурация семафора предоставляет несколько параметров для настройки функций семафора.
- Конфигурация пул памяти предоставляет несколько параметров для настройки функций пул памяти.
- Конфигурация очередь сообщений предоставляет несколько параметров для настройки функций очередь сообщений.
Файл «RTX_Config.c» содержит по умолчанию реализацию функций osRtxIdleThread и osRtxErrorNotify.Обе функции можно просто перезаписать с помощью пользовательского кода, переопределив их как часть кода пользователя.
Конфигурационный файл использует Аннотации мастера настройки. Перейдите к Pack — Configuration Wizard Annotations для подробностей. В зависимости от инструмента разработки аннотации могут привести к более удобному графическому представлению настроек. Снимок экрана, приведенный ниже, представляет собой скриншот из макета μVision Мастер конфигурации:
В качестве альтернативы можно указать параметры конфигурации, используя командную строку компилятора.
Например, можно настроить используемую частоту тика на 100us путем (перезаписи) конфигурации, используя команду cc -DOS_TICK_FREQ=100
Конфигурация системы
Конфигурация системы охватывает общесистемные настройки для глобальный пул памяти, частота тиков таймера, буфер событий ISR и циклического переключения потоков.
Опции системной конфигурации
Название | #define | Описание |
---|---|---|
Размер глобальной динамической памяти [байты] | OS_DYNAMIC_MEM_SIZE |
Определяет общий объем глобальной динамической памяти для Глобального пула памяти. По умолчанию размер равен 4096. Диапазон значений [0-1073741824] байт, кратно 8 байтам. |
Частота тиков ядра (Герц) | OS_TICK_FREQ |
Определяет базовое время для задержки и тайм-аутов в Гц. По умолчанию: 1000 Гц = 1 мс. |
Round-Robin (циклическое) переключение | OS_ROBIN_ENABLE |
Включает Round-Robin (циклическое) переключение потоков. |
Round-Robin таймаут | OS_ROBIN_TIMEOUT |
Определяет продолжительность выполнения потока перед переключением потока. Значение по умолчанию 5. Диапазон значений[1-1000]. |
ISR FIFO очередь | OS_ISR_FIFO_QUEUE |
Функции RTOS, вызываются из запросов хранилища ISR в этот буфер. По умолчанию значение 16 записей. Диапазон значений [4-256] записей кратные 4. |
Глобальная динамическая память
Сошлитесь на Global Memory Pool.
Round-Robin (циклическое) переключение потоков
RTX5 может быть настроен на использование циклического переключения многозадачных потоков. Round-robin позволяет выполнять квазипараллельное выполнение нескольких потоков с одинаковым приоритетом. Потоки не выполняются одновременно, но планируются там, где доступное время процессора делится на временные фрагменты, а RTX5 назначает временной срез для каждого потока. Поскольку временной срез обычно короткий (всего несколько миллисекунд), он выглядит так, как если бы потоки выполнялись одновременно.
Функции Round-robin переключения потока следующие:
- тик предварительно загружается значением таймаута, когда происходит переключение потока
- тик уменьшается (если уже не равен нулю) с каждым системным тиком, если тот же поток все еще выполняется
- когда тик достигает 0, это указывает на то, что тайм-аут произошел. Если есть еще один поток в состоянии готовности READY с одинаковым приоритетом, система переключается на этот поток, и тик предварительно загружается с таймаутом снова.
Другими словами, потоки запускаются на длительность их временного среза (если не отрезок времени потока). Затем RTX переключается на следующий поток, который находится в состоянии READY и имеет тот же приоритет. Если ни один другой поток с тем же приоритетом не готов к запуску, текущий текущий поток возобновляет его выполнение.
- Примечение
- При переключении на потоки с более высоким приоритетом сбрасывается значение тайм-аута round-robin.
Многозадачность Round-Robin контролируется с помощью #define OS_ROBIN_ENABLE. Период времени среза настраивается (в тиках таймера RTX) с #define OS_ROBIN_TIMEOUT.
ISR FIFO очередь
RTX функции (Вызовы из процедур прерывания), при внешнем вызове и обработчика прерывания, сохраняет тип запроса и опциональный параметр в буфере очереди ISR FIFO, который будет обработан позже, после выхода обработчика прерываний.
Планировщик активируется сразу же после завершения обработчиком IRQ для обработки запросов, хранящихся в буфере очереди FIFO. Требуемый размер этого буфера зависит от количества функций, вызываемых в обработчике прерываний. Недостаточный размер очереди будет зависеть от osRtxErrorNotify с кодом ошибки osRtxErrorISRQueueOverflow.
Конфигурация потока
RTX5 предоставляет несколько параметров для настройки функций управления потоками.
Опции управления потоком
Опция | #define | Описание |
---|---|---|
Обьект специфичное выделение памяти | OS_THREAD_OBJ_MEM |
Включает выделение памяти конкретным объектам. Смотрите Обьект-специфичный пул памяти |
Число пользовательских потоков | OS_THREAD_NUM |
Определяет максимальное количество потоков пользователей, которые могут быть активны одновременно. Применяется к пользовательским потокам с системной памятью для блоков управления. Значение по умолчанию — 1. Диапазон значений — [1-1000]. |
Число пользовательских потоков с размером стека равный По умолчению | OS_THREAD_DEF_STACK_NUM |
Определяет максимальное количество пользовательских потоков с размером стека по умолчанию и применяется к пользовательским потокам с указанным размером стека 0. Диапазон значений [0-1000]. |
Общий размер стека [байты] для пользовательских потоков с пользовательским определением размера стека | OS_THREAD_USER_STACK_SIZE |
Определяет объединенный размер стека для пользовательских потоков с размером стека пользователя. Значение по умолчанию — 0. Диапазон значений [0-1073741824] Байты, кратные 8. |
Размер стека по умолчанию [байты] | OS_STACK_SIZE |
Определяет размер стека для потоков с указанным нулевым размером стека. Значение по умолчанию — 200. Диапазон значений: [96-1073741824] Байт, кратным 8. |
Размер стека для потока в режиме ожидания IDLE [байты] | OS_IDLE_THREAD_STACK_SIZE |
Определяет размер стека для потока в режиме ожидания IDLE. Значение по умолчанию — 200. Диапазон значений — [72-1073741824] байт, кратным 8. |
Idle Thread TrustZone Module ID | OS_IDLE_THREAD_TZ_MOD_ID |
Определяет идентификатор модуля TrustZone, который используется потоком в режиме ожидания. Необходимо установить ненулевое значение, если ожидающему потоку необходимо вызывать защищенные функции. Значение по умолчанию — 0. |
Проверка переполнения стека | OS_STACK_CHECK |
Включить проверки переполнения стека при переключении потоков. |
Использование водяного знака стеком | OS_STACK_WATERMARK |
Инициализация стека потоков с помощью шаблона водяных знаков для анализа использования стека. Включение этой опции значительно увеличивает время выполнения создания потоков. |
Режим процессора для выполнения потока | OS_PRIVILEGE_MODE |
Управляет режимом процессора. Значение по умолчанию — режим Привилегированный. Диапазон значений [0 = непривилегированный; 1 = Привилегированный]. |
Настройка количества потоков и пространство стека
Ядро RTX5 использует отдельное пространство стека для каждого потока и предоставляет два метода для определения требований к стеку:
- Статическое выделение: когда osThreadAttr_t::stack_mem и osThreadAttr_t::stack_size указывает область памяти, которая используется для стека потоков. Внимание: Приведенная память стека должна быть выровнена на 64 бита, т. е. с помощью uint64_t для объявления.
-
Динамическое выделение: когда osThreadAttr_t как NULL или osThreadAttr_t::stack_mem как NULL, система выделяет память для стека из:
- Обьект специфичный пул памяти (размер стека по умолчанию) when «Object specific Memory allocation» включен и «Number of user Threads with default Stack size» не равен 0 и osThreadAttr_t::stack_size = 0 (или osThreadAttr_t как NULL).
- Обьект специфичный пул памяти (размер стека определяемый пользователем) когда «Object specific Memory allocation» включен и «Total Stack size for user…» не равен 0 и osThreadAttr_t::stack_size не равен 0.
- Глобальный пул памяти когда «Object specific Memory allocation» выключен или (osThreadAttr_t::stack_size не равен 0 и «Total Stack size for user…» = 0) или (osThreadAttr_t::stack_size = 0 и «Number of user Threads with default Stack size» = 0).
osThreadAttr_t является параметром функции osThreadNew.
- Примечание
-
Перед запуском ядра RTX функции osKernelStart(), используется основной стек, определенный в startup_device.s.
Основной стек также используется для:
- пользовательское приложение вызывает функции RTX в режиме потока с использованием вызовов SVC
- обработчики прерываний / исключений.
Проверка переполнения стека
RTX5 реализует проверку переполнения стека программного обеспечения, что перехватывает стек ловушек. Стек используется для обратных адресов и автоматических переменных. Обширное использование или неправильная конфигурация стека может привести к переполнению стека. Проверка переполнения стека программного обеспечения контролируется с помощью определения OS_STACK_CHECK
.
Если обнаружено переполнение стека, вызывается функция osRtxErrorNotify с кодом ошибки osRtxErrorStackUnderflow. По умолчанию эта функция реализована как бесконечный цикл и практически прекратит выполнение кода.
Использование водяного знака стеком
RTX5 инициализирует стек потоков с шаблоном водяного знака (0xCC) при создании потока. Это позволяет отладчику определять максимальное использование стека для каждого потока. Это, как правило, используется в процессе разработки, но удалено из конечного приложения. Использование водяного знака использования стека контролируется с помощью определения OS_STACK_WATERMARK
.
Включение этой опции значительно увеличивает время выполнения osThreadNew (зависит от размера стека).
Режим процессора для выполнения потока
RTX5 позволяет выполнять потоки в непривилегированном или привилегированном режиме процессора. Режим процессора управляется с помощью определения OS_PRIVILEGE_MODE
.
В непривилегированном режиме процессора прикладное программное обеспечение:
- имеет ограниченный доступ к инструкциям MSR и MRS и не может использовать инструкцию CPS.
- не может получить доступ к системному таймеру, NVIC или системному блоку управления.
- может иметь ограниченный доступ к памяти или периферийным устройствам.
В режиме привилегированного процессора прикладное программное обеспечение может использовать все инструкции и иметь доступ ко всем ресурсам.
Конфигурация таймера
RTX5 предоставляет несколько параметров для настройки функций управления таймером.
Опции конфигурация таймера
Название | #define | Описание |
---|---|---|
Обьект специфичное выделение памяти | OS_TIMER_OBJ_MEM |
Включает выделение памяти конкретным объектам |
Число обьектов таймер | OS_TIMER_NUM |
Определяет максимальное количество объектов, которые могут быть активны одновременно. Применяется к объектам с системной памятью для блоков управления. Диапазон значений: [1-1000]. |
Приоритет потока таймера | OS_TIMER_THREAD_PRIO |
Определяет приоритет для потока таймера. Значение по умолчанию — 40. Диапазон значений — [8-48], кратный 8. Цифры имеют следующую корреляцию приоритета: 8 = Низкая; 16 = Ниже Normal; 24 = Нормальный; 32 = Выше Normal; 40 = Высокая; 48 = Реальное время |
Размер стека потока таймер [байт] | OS_TIMER_THREAD_STACK_SIZE |
Определяет размер стека для потока таймера. Может быть установлено значение 0, если таймеры не используются. Значение по умолчанию — 200. Диапазон значений — [0-1073741824], кратным 8. |
Timer Thread TrustZone Module ID | OS_TIMER_THREAD_TZ_MOD_ID |
Определяет идентификатор модуля TrustZone, который использует Timer Thread. Для этого необходимо установить ненулевое значение, если любые каллбек вызовы по таймеру должны вызывать защищенные функции. Значение по умолчанию — 0. |
Количество функций каллбек | OS_TIMER_CB_QUEUE |
Количество одновременных активных функций каллбек. Может быть установлено значение 0, если таймеры не используются. Значение по умолчанию — 4. Диапазон значений — [0-256]. |
Обьект-специфичное выделение памяти
Смотрите Обьект-специфичный пул памяти.
Пользовательский поток таймера
Приоритет подсистемы таймера в рамках всей системы RTOS наследуется от приоритета osRtxTimerThread. Это настраивается OS_TIMER_THREAD_PRIO
. Стек для функций обратного вызова предоставляется osRtxTimerThread. OS_TIMER_THREAD_STACK_SIZE
должны удовлетворять требования стопки функции обратного вызова с наибольшим использованием стеки.
Конфигурация флаги событий
RTX5 предоставляет несколько параметров для настройки функций флага событий.
Опции конфигурации событий
Название | #define | Описание |
---|---|---|
Обьект специфичное выделение памяти | OS_EVFLAGS_OBJ_MEM |
Включает выделение памяти конкретным объектам.Смотрите Обьект-специфичный пул памяти. |
Число обьектов Фалаги событий | OS_EVFLAGS_NUM |
Определяет максимальное количество объектов, которые могут быть активны одновременно. Применяется к объектам с системной памятью для блоков управления. Диапазон значений: [1-1000]. |
Обьект специфичное выделение памяти
Когда используется обьект специфичная память, размер пула для всех объектов Event определяется OS_EVFLAGS_NUM. Обратитесь к объектным пулам памяти.
Конфигурация мьютекса
RTX5 предоставляет несколько параметров для настройки функций управления мьютекс.
Опции конфигурации мьютекса
Название | #define | Описание |
---|---|---|
Обьект специфичное выделение памяти | OS_MUTEX_OBJ_MEM |
Включает выделение памяти конкретным объектам. Смотрите Обьект-специфичный пул памяти. |
Число мьютекс обьектов | OS_MUTEX_NUM |
Определяет максимальное количество объектов, которые могут быть активны одновременно. Применяется к объектам с системной памятью для блоков управления. Диапазон значений: [1-1000]. |
Обьект специфичное выделение памяти
Когда используется объектная память, размер пула для всех объектов Mutex определяется OS_MUTEX_NUM
. Смотрите Обьект-специфичный пул памяти.
Конфигурация семафора
RTX5 предоставляет несколько параметров для настройки функций семафоров.
Опции конфигурации семафоров
Название | #define | Описание |
---|---|---|
Обьект специфичное выделение памяти | OS_SEMAPHORE_OBJ_MEM |
Включает выделение памяти конкретным объектам. Смотрите Обьект-специфичный пул памяти. |
Число обьектов семафор | OS_SEMAPHORE_NUM |
Определяет максимальное количество объектов, которые могут быть активны одновременно. Применяется к объектам с системной памятью для блоков управления. Диапазон значений: [1-1000]. |
Обьект специфичное выделение памяти
Когда используется объектная память, размер пула для всех объектов Семафора определяется OS_SEMAPHORE_NUM
. Смотрите Обьект-специфичный пул памяти.
Конфигурация пул памяти
RTX5 предоставляет несколько параметров для настройки функций Пул памяти.
Опции конфигурации пул памяти
Название | #define | Опции |
---|---|---|
Обьект специфичное выделение памяти | OS_MEMPOOL_OBJ_MEM |
Включает выделение памяти конкретным объектам. Смотрите Обьект-специфичный пул памяти. |
Количество объектов пула памяти | OS_MEMPOOL_NUM |
Определяет максимальное количество объектов, которые могут быть активны одновременно. Применяется к объектам с системной памятью для блоков управления. Диапазон значений: [1-1000]. |
Хранение данных размер памяти [байт] | OS_MEMPOOL_DATA_SIZE |
Определяет размер памяти объединенного хранилища данных. Применяется к объектам с системной памятью для хранения данных. Значение по умолчанию — 0. Диапазон значений: [0-1073741824], кратным 8. |
Обьект специфичное выделение памяти
Когда используется объектно-зависимая память, количество пулов для всех объектов MemoryPool определяется OS_MEMPOOL_NUM
. Общий размер хранилища, зарезервированный для всех пулов, настраивается в OS_MEMPOOL_DATA_SIZE
. Смотрите Обьект-специфичный пул памяти.
Конфигурация очередь сообщений
RTX5 предоставляет несколько параметров для настройки функций очереди сообщений.
Опции конфигурации очереди сообщений
Название | #define | Описание |
---|---|---|
Обьект специфичное выделение памяти | OS_MSGQUEUE_OBJ_MEM |
Включает выделение памяти конкретным объектам. Смотрите Обьект-специфичный пул памяти. |
Количество объектов очереди сообщений | OS_MSGQUEUE_NUM |
Определяет максимальное количество объектов, которые могут быть активны одновременно. Применяется к объектам с системной памятью для блоков управления. Диапазон значений: [1-1000]. |
Хранение данных размер памяти [байт] | OS_MSGQUEUE_DATA_SIZE |
Определяет размер памяти объединенного хранилища данных. Применяется к объектам с системной памятью для хранения данных. Значение по умолчанию — 0. Диапазон значений: [0-1073741824], кратным 8. |
Обьект специфичное выделение памяти
Когда используется объектная память, количество очередей для всех объектов очереди сообщений определяется OS_MSGQUEUE_NUM
. Общий размер хранилища, зарезервированный для всех очередей, настраивается вOS_MSGQUEUE_DATA_SIZE
. Смотрите Обьект-специфичный пул памяти.
Оставить ответ
Вы должны быть авторизованы чтобы размещать комментарии.