当前位置:   article > 正文

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

total_heap_size

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

       我们还可以通过.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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/75938
推荐阅读
相关标签
  

闽ICP备14008679号