搜索
bottom↓
回复: 11

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

[复制链接]

出0入0汤圆

发表于 2019-10-30 18:04:48 | 显示全部楼层 |阅读模式
本帖最后由 ma_xiang 于 2019-10-30 18:07 编辑

请问一下,1图和2图使用的内存是占用了哪一个存储空间

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出30入54汤圆

发表于 2019-10-30 20:23:37 | 显示全部楼层
图一:HEAP堆;  图二:BSS段

出30入54汤圆

发表于 2019-10-30 20:24:41 | 显示全部楼层
cloudboy 发表于 2019-10-30 20:23
图一:HEAP堆;  图二:BSS段

另外,FreeRTOS的HEAP其实也是BSS段,所以两块数据最终都在BSS中

出0入0汤圆

 楼主| 发表于 2019-10-31 08:10:24 | 显示全部楼层
cloudboy 发表于 2019-10-30 20:24
另外,FreeRTOS的HEAP其实也是BSS段,所以两块数据最终都在BSS中

感谢,请问图4中freertos申请的stack和heap占的是单片机哪部分空间,应该不是图3中规划出的空间吧

出0入0汤圆

发表于 2019-10-31 08:51:03 | 显示全部楼层
FreeRTOS支持栈静态分配和动态分配2种创建任务的方式,你这个xTaskCreate是动态的。

出0入0汤圆

发表于 2019-10-31 09:30:10 | 显示全部楼层
这个取决于你移植的系统使用的heap实现。 heap_1.c heap_2.c heap_3.c heap_4.c ,楼主用的哪个呢?

出130入129汤圆

发表于 2019-10-31 09:34:22 | 显示全部楼层
按我的理解给楼主说说,不保证准确,仅供参考
比如你在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段。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2019-10-31 09:38:40 | 显示全部楼层
azeng 发表于 2019-10-31 09:30
这个取决于你移植的系统使用的heap实现。 heap_1.c heap_2.c heap_3.c heap_4.c ,楼主用的哪个呢? ...

我用的是heap4

出0入0汤圆

发表于 2019-10-31 09:53:48 | 显示全部楼层

/*
* A sample implementation of pvPortMalloc() and vPortFree() that combines
* (coalescences) adjacent memory blocks as they are freed, and in so doing
* limits memory fragmentation.
*
* See heap_1.c, heap_2.c and heap_3.c for alternative implementations, and the
* memory management pages of http://www.FreeRTOS.org for more information.
*/


/* Allocate the memory for the heap. */
#if( configAPPLICATION_ALLOCATED_HEAP == 1 )
        /* The application writer has already defined the array used for the RTOS
        heap - probably so it can be placed in a special segment or address. */
        extern uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
#else
        static uint8_t ucHeap[ configTOTAL_HEAP_SIZE ];
#endif /* configAPPLICATION_ALLOCATED_HEAP */


都是开源的了,啥问题都是可以找到嘛,既不是heap也不是stack,是个静态数组。

出0入0汤圆

 楼主| 发表于 2019-10-31 10:05:35 | 显示全部楼层
azeng 发表于 2019-10-31 09:53
/*
* A sample implementation of pvPortMalloc() and vPortFree() that combines
* (coalescences) ad ...

好的 谢谢  

出30入54汤圆

发表于 2019-10-31 11:31:13 | 显示全部楼层
Heap4,可以参考我的笔记:
https://blog.csdn.net/jtd9009001/article/details/84500680
另外做了一个heap4的分析工具:
https://github.com/442534820/fh4ct.git

出30入54汤圆

发表于 2019-10-31 11:33:23 | 显示全部楼层
ma_xiang 发表于 2019-10-31 08:10
感谢,请问图4中freertos申请的stack和heap占的是单片机哪部分空间,应该不是图3中规划出的空间吧 ...

heap4是不会用startup里面定义的空间的,startup里面的heap是C库自己的malloc函数所需的空间
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 08:05

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表