CMSIS-RTOS2 文档翻译 之 RTX v5 实现(配置 RTX v5)

时间:2024-04-08 15:29:08
配置 RTX v5

文件 “RTX_Config.h” 定义了 CMSIS-RTOS RTX 的配置参数,并且必须是使用 CMSIS-RTOS RTX 内核的每个项目的一部分。以下部分详细介绍了配置选项:

文件 “RTX_Config.c” 包含函数 osRtxIdleThread 和 osRtxErrorNotify 的默认实现。通过将它们重新定义为用户代码的一部分,两种功能都可以简单地被自定义行为覆盖。

配置文件使用配置向导注释。有关详细信息,请参阅包 - 配置向导注释。根据开发工具的不同,注释可能会导致更加用户友好的设置图形表示。以下截图是 μVision 配置向导视图的屏幕截图:

CMSIS-RTOS2 文档翻译 之 RTX v5 实现(配置 RTX v5)
配置向导视图中的 RTX_Config.h

或者可以使用编译器命令行提供配置选项。

例如,可以使用(覆盖)配置将使用的节拍频率定制为 100us

cc -DOS_TICK_FREQ=100

系统配置

系统配置涵盖全局内存池的系统范围设置,节拍频率,ISR 事件缓冲区和循环线程切换。

系统配置选项

CMSIS-RTOS2 文档翻译 之 RTX v5 实现(配置 RTX v5)
RTX_Config.h:系统配置
名称 #define 描述
全局动态内存大小[字节] OS_DYNAMIC_MEM_SIZE 定义全局内存池的组合全局动态内存大小。默认值是 4096 。值范围是 [0 - 1073741824] 个字节,以 8 个字节的倍数为单位。
内核节拍频率(Hz) OS_TICK_FREQ 以 Hz 为单位定义延迟和超时的基准时间单位。默认值:1000Hz = 1ms 周期。
循环线程切换 OS_ROBIN_ENABLE 启用循环线程切换。
循环超时 OS_ROBIN_TIMEOUT 定义线程在线程切换前将执行多长时间。默认值是 5 。数值范围是 [1 - 1000] 。
ISR FIFO 队列 OS_ISR_FIFO_QUEUE 从 ISR 调用的 RTOS 函数将请求存储到此缓冲区。默认值是 16 个条目。值范围是 [4 - 256] 条目的倍数 4 。
内存管理 OS_EVR_MEMORY 启用内存管理事件记录。
内核 OS_EVR_KERNEL 启用内核事件记录。
线程 OS_EVR_THREAD 启用线程事件记录。
定时器 OS_EVR_TIMER 启用定时器事件记录。
事件标志 OS_EVR_EVFLAGS 启用事件标志事件记录。
互斥锁 OS_EVR_MUTEX 启用互斥锁事件记录。
信号量 OS_EVR_SEMAPHORE 启用信号量事件记录。
内存池 OS_EVR_MEMPOOL 启用内存池事件记录。
消息队列 OS_EVR_MSGQUEUE 启用消息队列事件记录。
对象内存使用计数器 OS_OBJ_MEM_USAGE 启用对象内存使用率计数器,以针对每个 RTOS 对象类型分别评估最大内存池要求。

全局动态内存

请参阅全局内存池。

循环线程切换

RTX5 可配置为使用循环多任务线程切换。循环法允许几个具有相同优先级的线程的准并行执行。线程并非真正同时执行,而是在可用 CPU 时间分为时间片和 RTX5 为每个线程分配时间片的时间安排。因为时间片通常很短(只有几毫秒),所以看起来好像线程同时执行。

循环线程切换功能如下:

  • 当线程切换发生时,节拍将预先加载超时值
  • 如果同一个线程仍在执行,则每个系统的节拍数将减少(如果不是零)
  • 当记号达到 0 时,表示发生超时。如果另一个线程准备好具有相同的优先级,则系统切换到该线程,并且再次预先加载超时。

换句话说,线程在其时间片的持续时间内执行(除非线程的时间片被放弃)。然后,RTX 切换到下一个处于 READY 状态且具有相同优先级的线程。如果没有其他具有相同优先级的线程准备好运行,则当前正在运行的线程将恢复执行。

注意
当切换到更高优先级的线程时,循环超时值将被重置。

循环多任务使用 #define OS_ROBIN_ENABLE 进行控制。时间片周期使用 #define OS_ROBIN_TIMEOUT 进行配置(在 RTX 定时器节拍中)。

ISR FIFO 队列

RTX 函数(来自中断服务例程的调用)在从中断处理程序调用时将请求类型和可选参数存储到 ISR FIFO 队列缓冲区,稍后在中断处理程序退出后处理。

在 IRQ 处理程序完成其执行以处理存储到 FIFO 队列缓冲区的请求后,调度程序立即被**。此缓冲区所需的大小取决于在中断处理程序中调用的函数的数量。osRtxErrorNotify 会导致队列大小不足,错误代码为 osRtxErrorISRQueueOverflow 。

事件记录

RTX5 完全支持事件记录器注释。在本节中,您可以启用或禁用 RTX5 不同元素的事件记录。这导致调试连接上的数据流量减少。

应该使用此设置禁止为完整的事件系列生成消息。要仅为某个 API 调用禁用事件,请使用 rtx_evrt.h 头文件中提供的 #define ,并将它们手动添加到RTX_Config.h 文件中:

内存事件
EVR_RTX_MEMORY_INIT_DISABLE, EVR_RTX_MEMORY_ALLOC_DISABLE, EVR_RTX_MEMORY_FREE_DISABLE, EVR_RTX_MEMORY_BLOCK_INIT_DISABLE, EVR_RTX_MEMORY_BLOCK_ALLOC_DISABLE, EVR_RTX_MEMORY_BLOCK_FREE_DISABLE

内核事件
EVR_RTX_KERNEL_ERROR_DISABLE, EVR_RTX_KERNEL_INITIALIZE_DISABLE, EVR_RTX_KERNEL_INITIALIZE_COMPLETED_DISABLE, EVR_RTX_KERNEL_GET_INFO_DISABLE, EVR_RTX_KERNEL_INFO_RETRIEVED_DISABLE, EVR_RTX_KERNEL_GET_STATE_DISABLE, EVR_RTX_KERNEL_START_DISABLE, EVR_RTX_KERNEL_STARTED_DISABLE, EVR_RTX_KERNEL_LOCK_DISABLE, EVR_RTX_KERNEL_LOCKED_DISABLE, EVR_RTX_KERNEL_UNLOCK_DISABLE, EVR_RTX_KERNEL_UNLOCKED_DISABLE, EVR_RTX_KERNEL_RESTORE_LOCK_DISABLE, EVR_RTX_KERNEL_LOCK_RESTORED_DISABLE, EVR_RTX_KERNEL_SUSPEND_DISABLE, EVR_RTX_KERNEL_SUSPENDED_DISABLE, EVR_RTX_KERNEL_RESUME_DISABLE, EVR_RTX_KERNEL_RESUMED_DISABLE, EVR_RTX_KERNEL_GET_TICK_COUNT_DISABLE, EVR_RTX_KERNEL_GET_TICK_FREQ_DISABLE, EVR_RTX_KERNEL_GET_SYS_TIMER_COUNT_DISABLE, EVR_RTX_KERNEL_GET_SYS_TIMER_FREQ_DISABLE

线程事件
EVR_RTX_THREAD_ERROR_DISABLE, EVR_RTX_THREAD_NEW_DISABLE, EVR_RTX_THREAD_CREATED_DISABLE, EVR_RTX_THREAD_GET_NAME_DISABLE, EVR_RTX_THREAD_GET_ID_DISABLE, EVR_RTX_THREAD_GET_STATE_DISABLE, EVR_RTX_THREAD_GET_STACK_SIZE_DISABLE, EVR_RTX_THREAD_GET_STACK_SPACE_DISABLE, EVR_RTX_THREAD_SET_PRIORITY_DISABLE, EVR_RTX_THREAD_GET_PRIORITY_DISABLE, EVR_RTX_THREAD_YIELD_DISABLE, EVR_RTX_THREAD_SUSPEND_DISABLE, EVR_RTX_THREAD_SUSPENDED_DISABLE, EVR_RTX_THREAD_RESUME_DISABLE, EVR_RTX_THREAD_RESUMED_DISABLE, EVR_RTX_THREAD_DETACH_DISABLE, EVR_RTX_THREAD_DETACHED_DISABLE, EVR_RTX_THREAD_JOIN_DISABLE, EVR_RTX_THREAD_JOIN_PENDING_DISABLE, EVR_RTX_THREAD_JOINED_DISABLE, EVR_RTX_THREAD_BLOCKED_DISABLE, EVR_RTX_THREAD_UNBLOCKED_DISABLE, EVR_RTX_THREAD_PREEMPTED_DISABLE, EVR_RTX_THREAD_SWITCHED_DISABLE, EVR_RTX_THREAD_EXIT_DISABLE, EVR_RTX_THREAD_TERMINATE_DISABLE, EVR_RTX_THREAD_DESTROYED_DISABLE, EVR_RTX_THREAD_GET_COUNT_DISABLE, EVR_RTX_THREAD_ENUMERATE_DISABLE

线程标志事件
EVR_RTX_THREAD_FLAGS_SET_DISABLE, EVR_RTX_THREAD_FLAGS_SET_DONE_DISABLE, EVR_RTX_THREAD_FLAGS_CLEAR_DISABLE, EVR_RTX_THREAD_FLAGS_CLEAR_DONE_DISABLE, EVR_RTX_THREAD_FLAGS_GET_DISABLE, EVR_RTX_THREAD_FLAGS_WAIT_DISABLE, EVR_RTX_THREAD_FLAGS_WAIT_PENDING_DISABLE, EVR_RTX_THREAD_FLAGS_WAIT_TIMEOUT_DISABLE, EVR_RTX_THREAD_FLAGS_WAIT_COMPLETED_DISABLE, EVR_RTX_THREAD_FLAGS_WAIT_NOT_COMPLETED_DISABLE

通用等待事件
EVR_RTX_THREAD_DELAY_DISABLE, EVR_RTX_THREAD_DELAY_UNTIL_DISABLE, EVR_RTX_THREAD_DELAY_COMPLETED_DISABLE

定时器事件
EVR_RTX_TIMER_ERROR_DISABLE, EVR_RTX_TIMER_CALLBACK_DISABLE, EVR_RTX_TIMER_NEW_DISABLE, EVR_RTX_TIMER_CREATED_DISABLE, EVR_RTX_TIMER_GET_NAME_DISABLE, EVR_RTX_TIMER_START_DISABLE, EVR_RTX_TIMER_STARTED_DISABLE, EVR_RTX_TIMER_STOP_DISABLE, EVR_RTX_TIMER_STOPPED_DISABLE, EVR_RTX_TIMER_IS_RUNNING_DISABLE, EVR_RTX_TIMER_DELETE_DISABLE, EVR_RTX_TIMER_DESTROYED_DISABLE

事件标志事件
EVR_RTX_EVENT_FLAGS_ERROR_DISABLE, EVR_RTX_EVENT_FLAGS_NEW_DISABLE, EVR_RTX_EVENT_FLAGS_CREATED_DISABLE, EVR_RTX_EVENT_FLAGS_GET_NAME_DISABLE, EVR_RTX_EVENT_FLAGS_SET_DISABLE, EVR_RTX_EVENT_FLAGS_SET_DONE_DISABLE, EVR_RTX_EVENT_FLAGS_CLEAR_DISABLE, EVR_RTX_EVENT_FLAGS_CLEAR_DONE_DISABLE, EVR_RTX_EVENT_FLAGS_GET_DISABLE, EVR_RTX_EVENT_FLAGS_WAIT_DISABLE, EVR_RTX_EVENT_FLAGS_WAIT_PENDING_DISABLE, EVR_RTX_EVENT_FLAGS_WAIT_TIMEOUT_DISABLE, EVR_RTX_EVENT_FLAGS_WAIT_COMPLETED_DISABLE, EVR_RTX_EVENT_FLAGS_WAIT_NOT_COMPLETED_DISABLE, EVR_RTX_EVENT_FLAGS_DELETE_DISABLE, EVR_RTX_EVENT_FLAGS_DESTROYED_DISABLE

互斥锁事件
EVR_RTX_MUTEX_ERROR_DISABLE, EVR_RTX_MUTEX_NEW_DISABLE, EVR_RTX_MUTEX_CREATED_DISABLE, EVR_RTX_MUTEX_GET_NAME_DISABLE, EVR_RTX_MUTEX_ACQUIRE_DISABLE, EVR_RTX_MUTEX_ACQUIRE_PENDING_DISABLE, EVR_RTX_MUTEX_ACQUIRE_TIMEOUT_DISABLE, EVR_RTX_MUTEX_ACQUIRED_DISABLE, EVR_RTX_MUTEX_NOT_ACQUIRED_DISABLE, EVR_RTX_MUTEX_RELEASE_DISABLE, EVR_RTX_MUTEX_RELEASED_DISABLE, EVR_RTX_MUTEX_GET_OWNER_DISABLE, EVR_RTX_MUTEX_DELETE_DISABLE, EVR_RTX_MUTEX_DESTROYED_DISABLE

信号量事件
EVR_RTX_SEMAPHORE_ERROR_DISABLE, EVR_RTX_SEMAPHORE_NEW_DISABLE, EVR_RTX_SEMAPHORE_CREATED_DISABLE, EVR_RTX_SEMAPHORE_GET_NAME_DISABLE, EVR_RTX_SEMAPHORE_ACQUIRE_DISABLE, EVR_RTX_SEMAPHORE_ACQUIRE_PENDING_DISABLE, EVR_RTX_SEMAPHORE_ACQUIRE_TIMEOUT_DISABLE, EVR_RTX_SEMAPHORE_ACQUIRED_DISABLE, EVR_RTX_SEMAPHORE_NOT_ACQUIRED_DISABLE, EVR_RTX_SEMAPHORE_RELEASE_DISABLE, EVR_RTX_SEMAPHORE_RELEASED_DISABLE, EVR_RTX_SEMAPHORE_GET_COUNT_DISABLE, EVR_RTX_SEMAPHORE_DELETE_DISABLE, EVR_RTX_SEMAPHORE_DESTROYED_DISABLE

内存池事件
EVR_RTX_MEMORY_POOL_ERROR_DISABLE, EVR_RTX_MEMORY_POOL_NEW_DISABLE, EVR_RTX_MEMORY_POOL_CREATED_DISABLE, EVR_RTX_MEMORY_POOL_GET_NAME_DISABLE, EVR_RTX_MEMORY_POOL_ALLOC_DISABLE, EVR_RTX_MEMORY_POOL_ALLOC_PENDING_DISABLE, EVR_RTX_MEMORY_POOL_ALLOC_TIMEOUT_DISABLE, EVR_RTX_MEMORY_POOL_ALLOCATED_DISABLE, EVR_RTX_MEMORY_POOL_ALLOC_FAILED_DISABLE, EVR_RTX_MEMORY_POOL_FREE_DISABLE, EVR_RTX_MEMORY_POOL_DEALLOCATED_DISABLE, EVR_RTX_MEMORY_POOL_FREE_FAILED_DISABLE, EVR_RTX_MEMORY_POOL_GET_CAPACITY_DISABLE, EVR_RTX_MEMORY_POOL_GET_BLOCK_SZIE_DISABLE, EVR_RTX_MEMORY_POOL_GET_COUNT_DISABLE, EVR_RTX_MEMORY_POOL_GET_SPACE_DISABLE, EVR_RTX_MEMORY_POOL_DELETE_DISABLE, EVR_RTX_MEMORY_POOL_DESTROYED_DISABLE

消息队列事件
EVR_RTX_MESSAGE_QUEUE_ERROR_DISABLE, EVR_RTX_MESSAGE_QUEUE_NEW_DISABLE, EVR_RTX_MESSAGE_QUEUE_CREATED_DISABLE, EVR_RTX_MESSAGE_QUEUE_GET_NAME_DISABLE, EVR_RTX_MESSAGE_QUEUE_PUT_DISABLE, EVR_RTX_MESSAGE_QUEUE_PUT_PENDING_DISABLE, EVR_RTX_MESSAGE_QUEUE_PUT_TIMEOUT_DISABLE, EVR_RTX_MESSAGE_QUEUE_INSERT_PENDING_DISABLE, EVR_RTX_MESSAGE_QUEUE_INSERTED_DISABLE, EVR_RTX_MESSAGE_QUEUE_NOT_INSERTED_DISABLE, EVR_RTX_MESSAGE_QUEUE_GET_DISABLE, EVR_RTX_MESSAGE_QUEUE_GET_PENDING_DISABLE, EVR_RTX_MESSAGE_QUEUE_GET_TIMEOUT_DISABLE, EVR_RTX_MESSAGE_QUEUE_RETRIEVED_DISABLE, EVR_RTX_MESSAGE_QUEUE_NOT_RETRIEVED_DISABLE, EVR_RTX_MESSAGE_QUEUE_GET_CAPACITY_DISABLE, EVR_RTX_MESSAGE_QUEUE_GET_MSG_SIZE_DISABLE, EVR_RTX_MESSAGE_QUEUE_GET_COUNT_DISABLE, EVR_RTX_MESSAGE_QUEUE_GET_SPACE_DISABLE, EVR_RTX_MESSAGE_QUEUE_RESET_DISABLE, EVR_RTX_MESSAGE_QUEUE_RESET_DONE_DISABLE, EVR_RTX_MESSAGE_QUEUE_DELETE_DISABLE, EVR_RTX_MESSAGE_QUEUE_DESTROYED_DISABLE

对象内存使用计数器

对象内存使用计数器有助于评估每个对象类型的最大内存池需求,就像线程的堆栈水印一样。初始设置从所有对象类型的全局内存池开始。在启用对象内存使用计数器的情况下连续运行应用程序,有助于为每种对象类型引入特定于对象的内存池。通常,这对于需要功能安全认证的应用程序是必需的,因为在这种情况下不允许全局内存池。

线程配置

RTX5 提供了几个参数来配置线程管理功能。

线程配置选项

CMSIS-RTOS2 文档翻译 之 RTX v5 实现(配置 RTX v5)
RTX_Config.h:线程配置


选项 #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 的倍数为单位。
空闲线程堆栈大小[字节] OS_IDLE_THREAD_STACK_SIZE 定义空闲线程的堆栈大小。默认值是 200 。值范围是 [72 - 1073741824]个字节,以 8 的倍数为单位。
空闲线程 TrustZone 模块 ID OS_IDLE_THREAD_TZ_MOD_ID 定义空闲线程将使用的 TrustZone 模块 ID 。 如果空闲线程需要调用安全函数,则需要将其设置为非零值。默认值是 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 时,系统将从以下位置分配堆栈内存:
    • 当启用 “对象特定的内存分配” 并且 “具有默认堆栈大小的用户线程数” 不为 0 且 osThreadAttr_t::stack_size 为 0(或 osThreadAttr_t 为 NULL)时,特定于对象的内存池(默认堆栈大小)。
    • 启用 “对象特定内存分配” 并且 “用户的总堆栈大小...” 不为 0 且 osThreadAttr_t::stack_size 不为 0 时,特定于对象的内存池(用户提供的堆栈大小)。
    • 当 “对象特定的内存分配” 被禁用或者(osThreadAttr_t::stack_size 不是 0 并且 “用户...的总栈大小” 是 0)或(osThreadAttr_t::stack_size 是 0)和 “用户线程数与默认堆栈大小“ 为 0)。

osThreadAttr_t 是 osThreadNew 函数的参数。

注意
在 RTX 内核由 osKernelStart()函数启动之前,使用在 startup_device.s 中定义的主栈。主栈也用于:
  • 用户应用程序使用 SVC 调用以线程模式调用 RTX 函数。
  • 中断/异常处理程序。

堆栈溢出检查

RTX5 实现了一个软件堆栈溢出检查,可以捕获堆栈溢出。堆栈用于返回地址和自动变量。大量使用或不正确的堆栈配置可能会导致堆栈溢出。软件堆栈溢出检查由定义的 OS_STACK_CHECK 控制。

如果检测到堆栈溢出,则会调用错误代码为 osRtxErrorStackUnderflow 的函数 osRtxErrorNotify 。默认情况下,这个函数被实现为一个无限循环,并且实际上会停止代码执行。

堆栈使用水印

创建线程时,RTX5 使用水印模式(0xCC)初始化线程堆栈。这允许调试器确定每个线程的最大堆栈使用情况。它通常在开发过程中使用,但从最终应用程序中删除。使用定义 OS_STACK_WATERMARK 来控制堆栈使用水印。

启用此选项会显着增加 osThreadNew 的执行时间(取决于线程堆栈大小)。

线程执行的处理器模式

RTX5 允许以非特权或特权处理器模式执行线程。处理器模式由定义的 OS_PRIVILEGE_MODE 控制。

在非特权处理器模式下,应用软件:

  • 对 MSR 和 MRS 指令的访问受限,并且不能使用 CPS 指令。
  • 不能访问系统定时器,NVIC 或系统控制块。
  • 可能限制了对内存或外设的访问。

在特权处理器模式下,应用程序软件可以使用所有指令,并可以访问所有资源。

定时器配置

RTX5 提供了几个参数来配置定时器管理功能。

定时器配置选项

CMSIS-RTOS2 文档翻译 之 RTX v5 实现(配置 RTX v5)
RTX_Config.h:定时器配置
名称 #define 描述
对象特定的内存分配 OS_TIMER_OBJ_MEM 启用对象特定的内存分配。
定时器对象的数量 OS_TIMER_NUM 定义可以同时处于活动状态的对象的最大数量。适用于具有系统提供的控制块内存的对象。取值范围是 [1 - 1000] 。
定时器线程优先级 OS_TIMER_THREAD_PRIO 定义定时器线程的优先级。 默认值为 40 。值范围为 [8 - 48] ,为 8 的倍数。数字具有以下优先级相关性:8 = 低; 16 = 低于正常; 24 = 正常; 32 = 高于正常; 40 = 高; 48 = 实时
定时器线程堆栈大小[字节] OS_TIMER_THREAD_STACK_SIZE 定义定时器线程的堆栈大小。当不使用定时器时可以设置为 0 。默认值是 200 。值范围是 [0 - 1073741824] ,以 8 的倍数为单位。
定时器线程 TrustZone 模块 ID OS_TIMER_THREAD_TZ_MOD_ID 定义定时器线程将使用的 TrustZone 模块 ID 。如果有任何定时器回调函数需要调用安全函数,则需要将其设置为非零值。默认值是 0 。
定时器回调函数队列条目 OS_TIMER_CB_QUEUE 并发活动定时器回调函数的数量。当不使用定时器时可以设置为 0 。默认值是 4 。数值范围是 [0 - 256] 。

对象特定的内存分配

请参阅对象特定的内存池。

用户定时器线程

RTX5 函数 osRtxTimerThread 在时间段到期时执行回调函数。完整的 RTOS 系统中定时器子系统的优先级从 osRtxTimerThread 的优先级继承。这由 OS_TIMER_THREAD_PRIO 进行配置。回调函数堆栈由 osRtxTimerThread 提供。OS_TIMER_THREAD_STACK_SIZE 必须满足堆栈使用率最高的回调函数的堆栈要求。

事件标志配置

RTX5 提供了几个参数来配置事件标志功能。

事件配置选项

CMSIS-RTOS2 文档翻译 之 RTX v5 实现(配置 RTX v5)
RTX_Config.h:事件标志配置
名称 #define 描述
对象特定的内存分配 OS_EVFLAGS_OBJ_MEM 启用对象特定的内存分配。请参阅对象特定的内存池。
事件标志对象的数量 OS_EVFLAGS_NUM 定义可以同时处于活动状态的对象的最大数量。适用于具有系统提供的控制块内存的对象。 取值范围是 [1 - 1000] 。

对象特定的内存分配

当使用对象特定的内存时,所有事件对象的池大小由 OS_EVFLAGS_NUM 指定。请参阅对象特定的内存池。

互斥锁配置

RTX5 提供了几个参数来配置互斥管理功能。

互斥锁配置选项

CMSIS-RTOS2 文档翻译 之 RTX v5 实现(配置 RTX v5)
RTX_Config.h:互斥锁配置
名称 #define 描述
对象特定的内存分配 OS_MUTEX_OBJ_MEM 启用对象特定的内存分配。请参阅对象特定的内存池。
互斥锁对象的数量 OS_MUTEX_NUM 定义可以同时处于活动状态的对象的最大数量。适用于具有系统提供的控制块内存的对象。取值范围是 [1 - 1000] 。

特定于对象的内存分配

当使用对象特定的内存时,所有互斥锁对象的池大小由 OS_MUTEX_NUM 指定。请参阅对象特定的内存池。

信号量配置

RTX5 提供了几个参数来配置信号量功能。

信号量配置选项

CMSIS-RTOS2 文档翻译 之 RTX v5 实现(配置 RTX v5)
RTX_Config.h:信号量配置
名称 #define 描述
对象特定的内存分配 OS_SEMAPHORE_OBJ_MEM 启用对象特定的内存分配。请参阅对象特定的内存池。
信号量对象的数量 OS_SEMAPHORE_NUM 定义可以同时处于活动状态的对象的最大数量。适用于具有系统提供的控制块内存的对象。 取值范围是 [1 - 1000] 。

对象特定的内存分配

使用对象特定的内存时,所有信号量对象的池大小由 OS_SEMAPHORE_NUM 指定。请参阅对象特定的内存池。

内存池配置

RTX5 提供了几个参数来配置内存池功能。

内存池配置选项

CMSIS-RTOS2 文档翻译 之 RTX v5 实现(配置 RTX v5)
RTX_Config.h:内存池配置
名称 #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 提供了几个参数来配置消息队列功能。

消息队列配置选项

CMSIS-RTOS2 文档翻译 之 RTX v5 实现(配置 RTX v5)
RTX_Config.h:消息队列配置
名称 #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 中配置。请参阅对象特定的内存池。