求助:关于stm32单片机freertos任务中申请内存的问题

2019-12-09 20:01发布

本帖最后由 ma_xiang 于 2019-10-30 18:07 编辑

请问一下,1图和2图使用的内存是占用了哪一个存储空间
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
cloudboy
1楼-- · 2019-12-09 22:16
图一:HEAP堆;  图二:BSS段
cloudboy
2楼-- · 2019-12-09 23:02
cloudboy 发表于 2019-10-30 20:23
图一:HEAP堆;  图二:BSS段

另外,FreeRTOS的HEAP其实也是BSS段,所以两块数据最终都在BSS中
ma_xiang
3楼-- · 2019-12-10 04:40
cloudboy 发表于 2019-10-30 20:24
另外,FreeRTOS的HEAP其实也是BSS段,所以两块数据最终都在BSS中

感谢,请问图4中freertos申请的stack和heap占的是单片机哪部分空间,应该不是图3中规划出的空间吧
styleno1
4楼-- · 2019-12-10 08:38
FreeRTOS支持栈静态分配和动态分配2种创建任务的方式,你这个xTaskCreate是动态的。
azeng
5楼-- · 2019-12-10 13:00
 精彩回答 2  元偷偷看……
68336016
6楼-- · 2019-12-10 17:07
按我的理解给楼主说说,不保证准确,仅供参考
比如你在stm32工程的.s文件做了堆栈设置
Stack_Size       EQU     0x00000800
Heap_Size        EQU     0x00000800

同时在FreeRTOS的配置文件FreeRTOSConfig.h做了以下设置
#define configTOTAL_HEAP_SIZE                ((size_t)(20 * 1024)) //系统可用内存,我用的是heap2.c

编译好后,map文件是可以看到3个对应地址空间的,不过如果你没有用malloc这函数,HEAP段是不会创建的,我这为了示意,在main函数开始写了malloc(10);

我的看法就是,你在freertos那些函数里面做的所有内存操作,应该就是来自#define configTOTAL_HEAP_SIZE                ((size_t)(20 * 1024))的内存空间。
你在main函数这些普通函数里面的生成的数组,那就还是来自STACK段,如果是malloc空间了,那就来自HEAP段。

QQ截图20191031092423.jpg (461.09 KB, 下载次数: 0)

下载附件

2019-10-31 09:30 上传

一周热门 更多>