CMSIS-RTOS2 文档翻译 之 RTX v5 实现(技术数据)
技术数据
支持的工具链
Keil RTX5 是使用常用工具链和开发环境开发和测试的。
Arm 编译器(Arm/Keil MDK,uVision5)
RTX5 的主要部分是使用 Arm 编译器和 Arm/Keil MDK 开发和优化的。当前版本已经过以下版本的测试:
- Arm Compiler 5.06 Update 6
- Arm Compiler 6.6.2 (长期维护)
- Arm Compiler 6.9
- 使用 uVision 5.24 进行 RTOS 调试
IAR 嵌入式开发平台
RTX5 已被移植到全面支持 IAR 嵌入式开发平台。以下版本已知可用:
- IAR Embedded Workbench 7.7 (社区报告)
- IAR Embedded Workbench 7.80.4
- IAR Embedded Workbench 8.20.1
GNU 编译器集合
RTX5 也被移植到支持 GCC,维护主要是继承社区贡献。积极的开发目前正在测试:
- GNU Tools for Arm Embedded 6.3.1 20170620
控制块大小
在 RTX5 头文件中定义 Keil RTX5 特定的控制块定义(包括大小)以及内存池和消息队列内存要求:
/// Control Block sizes #define osRtxThreadCbSize sizeof(osRtxThread_t) #define osRtxTimerCbSize sizeof(osRtxTimer_t) #define osRtxEventFlagsCbSize sizeof(osRtxEventFlags_t) #define osRtxMutexCbSize sizeof(osRtxMutex_t) #define osRtxSemaphoreCbSize sizeof(osRtxSemaphore_t) #define osRtxMemoryPoolCbSize sizeof(osRtxMemoryPool_t) #define osRtxMessageQueueCbSize sizeof(osRtxMessageQueue_t) /// Memory size in bytes for Memory Pool storage. /// \param block_count maximum number of memory blocks in memory pool. /// \param block_size memory block size in bytes. #define osRtxMemoryPoolMemSize(block_count, block_size) \ (4*(block_count)*(((block_size)+3)/4)) /// Memory size in bytes for Message Queue storage. /// \param msg_count maximum number of messages in queue. /// \param msg_size maximum message size in bytes. #define osRtxMessageQueueMemSize(msg_count, msg_size) \ (4*(msg_count)*(3+(((msg_size)+3)/4)))如果使用全局内存池为 RTOS 对象分配内存,则需要知道每个对象在出现错误时所需的大小。目前,控制块大小如下(如有更改,恕不另行通知):
| 类型 | 以字节为单位控制块大小 |
|---|---|
| 线程 | 68 |
| 定时器 | 32 |
| 事件标志 | 16 |
| 互斥锁 | 28 |
| 信号量 | 16 |
| 内存池 | 36 |
| 消息队列 | 52 |
内存池和消息队列数据存储所需的内存大小可以从上述宏中确定。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
