技术数据
支持的工具链
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 |
内存池和消息队列数据存储所需的内存大小可以从上述宏中确定。