This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSP432P401R:将函数放在具有GCC的SRAM中

Guru**** 2535750 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/576030/msp432p401r-place-a-function-in-sram-with-gcc

部件号:MSP432P401R
主题中讨论的其他部件: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链接脚本并能帮助我?

提前感谢!