【发布时间】:2011-03-03 21:47:39
【问题描述】:
我正在尝试在 Cortex-M3 处理器 (STM32) 上执行 RAM 中的功能。该功能擦除并重写内部闪存,所以我肯定需要在 RAM 中,但我该怎么做呢?
我尝试过的是:使用 memcpy 将函数复制到 RAM 中的字节数组(检查它是否正确对齐),将函数指针设置为指向字节数组,然后调用函数(指针)。
这可能适用于 10 条指令(我可以使用调试器跟踪执行),但随后出现总线错误并且处理器重置。总线错误发生在第二次通过循环时,因此代码应该没问题(因为它在第一次通过时工作)。我认为更快的 RAM 访问会以某种方式破坏总线时序......
无论如何,有正确的方法吗?分散文件看起来如何自动将函数放置在 RAM 中(我正在使用 Keil uVision for Cortex-M3)?
编辑:更多信息: 工具链:RealView MDK-ARM V 4.10 编译器:Armcc v4.0.0.728 汇编器:Armasm v4.0.0.728 链接器:ArmLink v4.0.0.728 处理器:STM32F103ZE
复位发生时,总线故障寄存器中的 IMPRECISERR 位被设置。
【问题讨论】:
-
嗯,我认为您应该或多或少将其发布到制造商的论坛,因为您使用的是特定硬件,但是,您能否提供更多详细信息,您使用的是什么编译器,您如何调试它,任何代码示例,也许 一个 有知识的人可能能够回答这个问题,除此之外......
-
@tommieb75:但我更喜欢你们!