提交 fe1b6659 编写于 作者: M mculover666

finish the CMSIS_RTOS_API_Use_Guide document

上级 c16a12d3
......@@ -731,7 +731,88 @@ task1 finish do sth!
task2 get mutex,doing sth...
```
## 3.5. 动态内存使用示例
```c
#include <cmsis_os.h>
typedef struct blk_st {
int id;
char* payload;
} blk_t;
#define MMBLK_BLK_NUM 10
osPoolDef (MemPool, MMBLK_BLK_NUM, blk_t);
osPoolId mem_pool_id;
void task1_entry(void *arg)
{
blk_t *ptr = NULL;
osStatus err;
/* 打印出一个块的大小 */
printf("block size is %d bytes\r\n", sizeof(blk_t));
/* 申请一个块 */
ptr = osPoolAlloc(mem_pool_id);
if (ptr == NULL) {
printf("a mmblk alloc fail\r\n");
return;
}
else {
printf("a mmblk alloc success\r\n");
}
/* 使用该块 */
ptr->id = 1;
ptr->payload = "hello";
printf("mmblk id:%d payload:%s\r\n", ptr->id, ptr->payload);
/* 使用完毕之后释放 */
err = osPoolFree(mem_pool_id, ptr);
if (err != osOK) {
printf("a mmblk free fail, err = %d\r\n", err);
return;
}
else {
printf("a mmblk free success\r\n");
}
while (1) {
tos_task_delay(1000);
}
}
#define STK_SIZE_TASK1 1024
osThreadDef(task1_entry, osPriorityNormal, 1, STK_SIZE_TASK1);
void application_entry(void *arg)
{
//初始化静态内存池
mem_pool_id = osPoolCreate(osPool(MemPool));
if (mem_pool_id == NULL) {
printf("mmblk pool create fail\r\n");
return;
}
else {
printf("mmblk pool create success\r\n");
}
//创建任务
osThreadCreate(osThread(task1_entry), NULL);
return;
}
```
运行结果为:
```
item size = 8 bytes, create ret = 0
mmblk pool create success
block size is 8 bytes
a mmblk alloc success
mmblk id:1 payload:hello
a mmblk free success
```
## 3.6. 消息队列使用示例
```c
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册