组装到ROM中的绝对地址。

时间:2017-07-30 15:47:44

标签: arm stm32 cortex-m thumb

我正在使用带有Keil uV5的STMF4。我编写了一个固件更新程序,通过RS232将新固件补丁复制到RAM,然后将其写入0x08020000的ROM位置,这是我应用程序代码末尾的位置。 尽管我是在较低地址测试的复制完美代码副本,但0x08020000处的补丁将无法运行并且很快就会出现故障。我已将分散文件设置为包含更高的ROM地址和mem map ini文件。所有40kb的应用程序完全是为了速度而装配,事实上我不知道单行C.我也没有使用任何库!@ $#

我想知道处理器如何获取不在0x08020000执行的信息,但我很高兴在这个位置读取ROM,尽管我的分散文件和mem map ini文件似乎没问题。 我很确定我可以写一些扩展到0x08020000以上的垃圾代码,很多,我可以擦除块并用我的更新补丁写它,它会欺骗任何妨碍我的代码执行的东西。但那会很混乱。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

可能的答案是:

  1. 链接描述文件 - 定义.text部分的起始位置(以及其他部分,例如.rodata

  2. 使用与位置无关的设置进行编译(我可以帮助您使用gcc设置但不能使用keil)。我认为这篇文章是关于keil的。http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.kui0097a/armcc_bcfjjdfj.htm