在SRAM中运行程序代码
Introduction
-
优点: 缺点:
以上摘自《STM32库开发实战指南》第39章 在SRAM中调试代码。
Three Methods
- 使用__ramfunc关键字 使用__ramfunc关键字可以让函数存储到SRAM中,不过无法指定位置。并且带__ramfunc的函数调用不带__ramfunc的函数会出现警告,同时cpu 执行速度会变慢。 __ramfunc void function() example Code Result
- 使用#pragma location指令 修改.icf文件可以使程序在指定的RAM区域中运行。在.icf文件中自定义一个SECTION,指定这个SECTION的地址区域;将.c文件中的函数指定存储到这个SECTION中,必须给每个需要存入RAM的函数都添加#pragma location语句。 修改.c文件 // method A #pragma location="MY_FUNC" void function() // method B void function() @ "MY_FUNC" 修改.icf文件 // method a // place functions into RAM without direct address initialize by copy { readwrite, section MY_FUNC }; //…… place in RAM_region { readwrite, block CSTACK, block HEAP, section MY_FUNC }; // method b // place functions into RAM at the direct address //…… place at address mem:0x20002000 { section MY_FUNC}; example Code 修改.c文件 修改.icf文件 Result
- 使用#pragma default_function_attributes指令 #pragma default_function_attributes指令可以将一定区域内的所有函数存入SECTION中,更加方便快捷。对.icf文件的修改和方法二一致;在.c文件中,在需要存入RAM的函数区域开始位置和结束位置加上该指令。同样也可以使用#pragma default_variable_attributes将变量存入指定区域。 #pragma default_function_attributes = @ "MY_FUNC" void function1(){ } void function2(){ } void function3(){ } #pragma default_function_attributes = example Code Result
Application on CoreMark Project
-
运行在FLASH上
-
部分运行在SRAM上
References
[1] 刘火良, 杨森. STM32库开发实战指南[M]. 北京: 机械工业出版社, 2017.5
[2] IAR SYSTEMS, Placing a group of functions or variables in a specific section[EB/OL], , 2018-5-31.
[3] 香水城, 【实战经验】IAR下如何让程序在RAM中运行[EB/OL], , 2015-6-5.
