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

来源:互联网 发布:至此终年网络番外怀孕 编辑:程序博客网 时间:2024/05/16 20:50

“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 OnlyRW-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

0 0
原创粉丝点击