本帖最后由 mazhao141 于 2017-12-28 08:15 编辑
环境是 System workbench
我想要把程序下载进Flash,但是我想让他运行在内存里
所以我在链接器脚本里加入如下的段声明:
_loadaddtest = LOADADDR(.addtest);
.addtest :
{
. = ALIGN(4);
_saddtest = .;
*(.addtest)
_eaddtest = .;
} >RAM AT> ROM
_size_of_addtest = SIZEOF(.addtest);
并且编辑main.c文件
#include <string.h>
extern char _loadaddtest[], _saddtest[], _eaddtest[], _size_of_addtest[];
__attribute__((section(".addtest"))) void addTest(){
int i;
for(i = 0; i < 1000000; i ++){
}
}
int main(void) {
delay_init(168);
memcpy(_saddtest, _loadaddtest, _size_of_addtest);
bspLedConfig();
bspMD8Config(115200);
bspFiberOpticalConfig(115200);
bspIso485Config(115200);
printfMz("addtest is loaded at:%x, run at :%x, _size_of_addtest is :%x",
_loadaddtest,_saddtest, _size_of_addtest); //(_eaddtest - _saddtest));
while (1) {
addTest();
LED(led[1], !LED_STATUS(led[1]));
//printfMz("HelloWorld\r\n");
}
}
printfMz函数打印的内容是"addtest is loaded at:80058c0, run at :20000000, _size_of_addtest is :2c"
结论是
函数在SRAM里执行的时间是107ms
在FLASH里执行的时间是84.4ms
不能再CCM里执行
|