文件 “RTX_Config.h” 定义了 CMSIS-RTOS RTX 的配置参数,并且必须是使用 CMSIS-RTOS RTX 内核的每个项目的一部分。以下部分详细介绍了配置选项:
- 系统配置涵盖全局内存池的系统范围设置,节拍频率,ISR 事件缓冲区和循环线程切换。
- 线程配置提供了几个参数来配置线程管理功能。
- 定时器配置提供了几个参数来配置定时器管理功能。
- 事件标志配置提供了几个参数来配置事件标志功能。
- 互斥锁配置提供了几个参数来配置互斥管理功能。
- 信号量配置提供了几个参数来配置信号量功能。
- 内存池配置提供了几个参数来配置内存池功能。
- 消息队列配置提供了几个参数来配置消息队列功能。
文件 “RTX_Config.c” 包含函数 osRtxIdleThread 和 osRtxErrorNotify 的默认实现。通过将它们重新定义为用户代码的一部分,两种功能都可以简单地被自定义行为覆盖。
配置文件使用配置向导注释。有关详细信息,请参阅包 - 配置向导注释。根据开发工具的不同,注释可能会导致更加用户友好的设置图形表示。以下截图是 μVision 配置向导视图的屏幕截图:
或者可以使用编译器命令行提供配置选项。
例如,可以使用(覆盖)配置将使用的节拍频率定制为 100us
系统配置
系统配置涵盖全局内存池的系统范围设置,节拍频率,ISR 事件缓冲区和循环线程切换。
系统配置选项
名称 | #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 提供了几个参数来配置线程管理功能。
线程配置选项
选项 | #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 提供了几个参数来配置定时器管理功能。
定时器配置选项
名称 | #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 提供了几个参数来配置事件标志功能。
事件配置选项
名称 | #define | 描述 |
---|---|---|
对象特定的内存分配 | OS_EVFLAGS_OBJ_MEM |
启用对象特定的内存分配。请参阅对象特定的内存池。 |
事件标志对象的数量 | OS_EVFLAGS_NUM |
定义可以同时处于活动状态的对象的最大数量。适用于具有系统提供的控制块内存的对象。 取值范围是 [1 - 1000] 。 |
对象特定的内存分配
当使用对象特定的内存时,所有事件对象的池大小由 OS_EVFLAGS_NUM 指定。请参阅对象特定的内存池。
互斥锁配置
RTX5 提供了几个参数来配置互斥管理功能。
互斥锁配置选项
名称 | #define | 描述 |
---|---|---|
对象特定的内存分配 | OS_MUTEX_OBJ_MEM |
启用对象特定的内存分配。请参阅对象特定的内存池。 |
互斥锁对象的数量 | OS_MUTEX_NUM |
定义可以同时处于活动状态的对象的最大数量。适用于具有系统提供的控制块内存的对象。取值范围是 [1 - 1000] 。 |
特定于对象的内存分配
当使用对象特定的内存时,所有互斥锁对象的池大小由 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 中配置。请参阅对象特定的内存池。