From fe1b66591db3c0a8e5de2d80d8ab68ad560b63d1 Mon Sep 17 00:00:00 2001 From: mculover666 <2412828003@qq.com> Date: Sat, 25 Jul 2020 20:29:29 +0800 Subject: [PATCH] finish the CMSIS_RTOS_API_Use_Guide document --- doc/23.CMSIS_RTOS_API_Use_Guide.md | 81 ++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) diff --git a/doc/23.CMSIS_RTOS_API_Use_Guide.md b/doc/23.CMSIS_RTOS_API_Use_Guide.md index a2b8ff8b..b01e8d7d 100644 --- a/doc/23.CMSIS_RTOS_API_Use_Guide.md +++ b/doc/23.CMSIS_RTOS_API_Use_Guide.md @@ -731,7 +731,88 @@ task1 finish do sth! task2 get mutex,doing sth... ``` ## 3.5. 动态内存使用示例 +```c +#include +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