FreeRTOS中的堆栈设置”与“系统启动文件中堆栈”的关系

“FreeRTOS中的堆栈设置”与“系统启动文件中堆栈”的关系

       在STM32CubeMX生成工程时发现,在FreeRTOS的配置中同样有TOTAL_HEAP_SIZE堆的大小配置,这个堆与之前系统的堆空间有什么区别呢?

我之前的博客有关于使用STM32系统堆空间不足时,所遇到的问题和解决方法:http://blog.csdn.net/lighthear/article/details/69485942

       我们知道,在Keil中编译工程成功后,在下面的Bulid Ouput窗口中会输出下面这样一段信息:

Program Size: Code=6320  RO-data=4864  RW-data=44  ZI-data=1636 

代表的意思:
Code :是程序中代码所占字节大小
RO-data :程序中所定义的指令和常量大小 (个人理解 :Read Only
RW-data :程序中已初始化的变量大小 (个人理解”:Read/Write)
ZI-Data :程序中未初始化的变量大小 (个人理解 :Zero Initialize)  

ROM(Flash) size = Code + RO-data + RW-data;

RAM size = RW-data + ZI-data

       我们还可以通过.map文件查看占用的Flash和RAM的大小。

测试过程:

       将系统的Heap设置为3072 字节,FreeRTOS的Heap设置为3072 字节时,编译后ZI-data使用量为7600 字节。

  1. 将系统的Heap调整为512 字节(调小了2560 字节),FreeRTOS的Heap不变,编译后ZI-data使用量为5040 字节,正好也减少了2560 字节。
  2. 系统的Heap保持不变,FreeRTOS的Heap调整为2048 字节(调小了1024 字节),编译后ZI-data使用量为6576 字节,正好也减少了1024 字节。

结论:

       FreeRTOS中的堆栈,并没有占用系统启动文件中的堆栈空间大小。两者在空间分配上互不影响,需要单独设置。并且FreeRTOS有自己的内存申请函数pvPortMalloc()以及一系列的内存管理函数。

关于FreeRTOS的内存管理函数,可以参考博客:http://blog.csdn.net/zhzht19861011/article/details/51606068

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值