在使用Keil设置栈空间时可能存在RAM空间被浪费的可能。那么在设置好heap和stack空间大小后,如何判断有没有多余的内存?
1.项目空间设置
forum.jpg
STM32F303xC配置信息
首先要保证我们在Startup.S文件里设置的Stack和heap能够满足软件运行需求。在这种情况下,打开Keil的配置工具,可以看到IRAM1即主要RAM的大小为0xA0配置00。我们把这个数值减小到一个你认为合适的数据,比如0x9000。在这种情况下,重新编译项目、运行项目,看是否正常,如果能正常运行,然后再进一步测试。
2.剩余空间测试
为了进一步测试安全性,我们要定义一个变量,设置其地址在0x9000,即
int var __attribute__((at(0x20009000)));
  • //在程序中,给此变量赋值
  • var = 123;
  • 复制代码
    并在程序中使用该变量,如果系统仍然能正常运行的话,那说明我们设置的RAM大小0x9000是合理的,也可以进一步减小此值,重新做测试。如果项目不能运行,则要增加RAM的大小,直到能正常运行。
    3.如何使用多余RAM
    对于多余的RAM空间,RAM带电复位是不会初始化的,即使我们在配置工具设置了要初始化IRAM1,如图。
    forum.jpg

    利用这个特性,我们可以把多余的RAM当作临时存储器,保存系统数据或运行状态信息,只要MCU不掉电,这部分的RAM数据会一直保持。