CMSIS-RTOS2 文档翻译 之 参考(CMSIS-RTOS2 API 之 内存管理)

内存管理

关于内存管理可能性的信息。更多...

CMSIS-RTOS2 API 提供了两种用户可以选择的内存管理选项。对于对象存储可以使用

为了影响内存分配方案,可以根据请求创建的所有 RTOS 对象(即具有 osXxxNew 函数的那些对象)在创建时接受可选的 osXxxAttr_t attr 参数。作为经验法则,对象属性至少有成员分配自定义控制块存储器,即 cb_mem 和 cb_size 成员。默认情况下,即 attr 为 NULL 或 cb_mem 为 NULL ,则使用自动动态分配。在 cb_mem 中提供指向用户内存的指针将切换到手动用户定义的分配。

注意
有关 RTX5 中提供的内存分配策略的详细信息,请参阅内存分配。

自动动态分配

自动分配对于许多用例是默认和可行的。此外,它可以跨 CMSIS-RTOS2 API 的不同实现完全移植。动态内存分配的共同缺点是内存碎片和内存耗尽的可能性。由于所有需要的对象都是在系统初始化时创建的,并且在运行时不会被删除,但这类运行时故障可以被阻止。

使用的实际分配策略是特定于实现的,即是使用全局堆或预分配内存池。

代码示例:

#include "cmsis_os2.h" // implementation agnostic
osMutexId_t mutex_id;
osMutexId_t mutex2_id;
const osMutexAttr_t Thread_Mutex_attr = {
"myThreadMutex", // human readable mutex name
NULL, // memory for control block (default)
0U // size for control block (default)
};
void CreateMutex ( void) {
mutex_id = osMutexNew(NULL); // use default values for all attributes
mutex2_id = osMutexNew(&Thread_Mutex_attr); // use attributes from defined structure
:
}

本例中的互斥锁是使用自动内存分配创建的。

手动用户定义的分配

通过提供用户定义的内存,可以对内存分配进行细化控制。这种用户定义的内存的实际要求是特定于实现的。因此,需要仔细参考所用实现的大小和对齐规则,例如,对于 RTX,请参阅静态对象内存。

代码示例:

#include "rtx_os.h" // implementation specific
osMutexId_t mutex_id;
static uint32_t mutex_cb[ osRtxMutexCbSize/4U]; // implementation specific
const osMutexAttr_t Thread_Mutex_attr = {
"myThreadMutex", // human readable mutex name
mutex_cb, // memory for control block (user-defined)
sizeof(mutex_cb) // size for control block (user-defined)
};
void CreateMutex ( void) {
mutex_id = osMutexNew(&Thread_Mutex_attr); // use attributes from defined structure
:
}

以上示例使用用户定义的内存作为互斥锁控制块。根据所使用的实际实现,在这种情况下,需要包含特定的头文件 rtx_os.h 。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值