主题中讨论的其他部件:ATOLLIC
大家好,
我一直在尝试通过GCC从SRAM执行一个函数(希望能提高其性能)。 我尝试了这里的非常一般的教程: blog.atollic.com/using-gnu-gcc-on-arm-cortex-devices-placing-code-and-data-on-special-memory-addresses-using-the-gnu-ld-linker。 因此,我已按以下方式修改了链接程序脚本:内存布局现在为:
内存 { main_flash (RX):起源= 0x0万,长度= 0x4万 INFO_FLASH (RX):原点= 0x20万,长度= 0x0.4万 SRAM_FUNC (X):原点= 0x100万,长度= 0x0.1万 SRAM_CODE (rwx):原始= 0x100.1万,长度= 0x0000F000 SRAM_DATA (RW):原点= 0x2000万,长度= 0x1万 }
在.data和.bss之间,我添加了以下内容:
.SRAM_FUNC:{
*(.SRAM_FUNC*);
} > SRAM_FUNC
然后我添加了__attribute__((section(".SRAM_FUNC"))到我要在SRAM中使用的函数中。
不幸的是,这不起作用。 一旦CPU离开重置状态,它将跳转到总线故障处理程序,并在地址0x68d3e7c6处显示精确的总线故障(位于保留内存中,无法执行,因此是故障)。 所以我想我的修改是无效的。 我不确定是什么原因造成的, 但我想这与大多数函数和对象的地址非常小有关,例如EUSCIA0_Handler在0x6e8处(如gdb所报告),但放置在SRAM中的函数的地址为0x100万 (与SRAM_FUNC部分的开头匹配)。
是否有人更喜欢GNU链接脚本并能帮助我?
提前感谢!
丹