赞
踩
在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 字节。
ZI-data
使用量为5040 字节,正好也减少了2560 字节。ZI-data
使用量为6576 字节,正好也减少了1024 字节。 FreeRTOS中的堆栈,并没有占用系统启动文件中的堆栈空间大小。两者在空间分配上互不影响,需要单独设置。并且FreeRTOS有自己的内存申请函数pvPortMalloc()
以及一系列的内存管理函数。
关于FreeRTOS的内存管理函数,可以参考博客:http://blog.csdn.net/zhzht19861011/article/details/51606068
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。