1
7
循环迭代崩溃可能是因为函数正在分支到一个绝对地址,而不是相对于RAM中的新函数位置。在该点访问原始代码位置是否会因为闪存擦除操作而导致总线错误?
它应该生成启动代码,负责将函数复制到RAM并将调用正确链接到该位置。否则,如果您需要将任意函数动态复制到RAM中,那么请查看编译 position independent code (PIC) 用RealView。 |
2
2
链接 按你写的地址跑。。。代码可能无法重新定位,可能会跳转到旧位置的某个位置。 |
3
2
由于ARM加载即时数据的能力有限,因此为ARM生成代码的实用程序经常将代码和数据并置。例如,这样的语句
注意,\u myVar和0x12345678可以紧跟在它们出现的例程的代码之后;如果您试图使用上一条指令后面的标签来确定例程的长度,那么这样的长度将无法包含补充数据。
我的建议是用汇编语言编写一个小例程来做你需要的事情。它只是一些指令,你可以确切地知道代码在做什么,它可能有什么地址依赖关系,而且你不必担心将来的编译器版本会以这样一种方式改变你的代码,从而破坏某些东西[例如,上述代码的第三个版本将没有问题,即使
|
4
1
使用IAR编译器(我知道你的问题是关于Keil的,但我没有这个问题)你可以将整个项目或单个文件标记为“位置独立”。从使用这个在过去与其他处理器,这意味着你可以移动它“任何地方”,它仍然可以正常工作 |
Noè Murr · 如何获得C函数的基本编译二进制代码? 2 年前 |
conopizda2 · 为什么我的静态数组没有被memset清除? 2 年前 |
J.M · ESP32与STM32之间的UART通信问题 2 年前 |
Hansel · 如何抑制C语言中的“值已计算但未使用”? 2 年前 |
user9652118 · 臂用工具链 6 年前 |
user9158336 · 如何使用SPI总线对压力传感器进行编程 6 年前 |
NetworkStudent · I2c通信stm32f3如何解决? 6 年前 |