关注+星标公众号,不错过精彩内容
作者 | strongerHuang
微信公众号 | 嵌入式专栏
xTaskCreate(LED_Task, "LED_Task", 128, NULL, 6, NULL);
这个问题如果要细说,牵涉到的知识点比较多,下面挑几个重要相关的内容来解答这个问题。
内存静态和动态分配
内存分配一般分为:静态和动态分配。
1.静态分配内存
简单来说,就是在编译的时候就分配的内存。你可以理解为芯片上电,指定的某区域(地址)内存就被占用了。
一般有几种情况,比如:
启动分配堆栈:
Stack_Size EQU 0x400
定义一个静态变量,这个就是最好理解的一个例子:
static int a;
定义一个全局变量/数组等:
int char;
2.动态分配内存
void UART_Send(char *p)
{
char buf[10];
//......
}
梳理FreeRTOS内存分配
1.全局数组(堆栈)
FreeRTOS的内存是在 FreeRTOSConfig.h 文件分配的一个全局数组,这个内存大小由用户自己根据情况分配,比如:
#define configTOTAL_HEAP_SIZE ((size_t)(10 * 1024))
2.创建任务
FreeRTOS创建任务,分配堆栈大小,比如:128“字”
xTaskCreate(LED_Task, "LED_Task", 128, NULL, 6, NULL);
提醒:这里“字”是单位,比如:uint32_t
3.删除任务
FreeRTOS删除任务,会调用“vPortFree()”函数释放对应的内存。
FreeRTOS是动态分配内存吗?
看到这里,你能回答开篇这个问题了吗?
答案:FreeRTOS不是动态分配内存,只是模拟了动态分配的方式,实际的内存是静态分配的。
点击“阅读原文”查看更多分享。