嘿。
有一段时间我一直在尝试将一些代码从闪存复制到内部 sram 并运行它。
我阅读了数据表、编程手册和 cortex 手册,它们都确认可以从 sram 运行代码,但是当我复制代码时,我遇到了强制性硬故障,经过进一步检查,我意识到确实是总线故障。我在
STM32f103 和 stm32f407 上都试过了,但都不起作用。这是我复制到 sram 中的汇编函数:
myadd 过程
导出 myadd [弱]
NOP
NOP
BXlr
结束计划
这是复制并运行复制代码的函数:
无效测试()
{
memcpy((void *)(SRAM_BASE + 0x100), &myadd, 200);
延迟(500);
//void (*func)() = (void (*)())((int32_t)(SRAM_BASE + 0x100) | 0x1);
void (*func)() = (void (*)())((int32_t)(SRAM_BASE + 0x100) | 0x1);
功能();
}
在错误期间,我只得到总线不精确错误,其他标志为零。
任何人都可以看到我的代码有任何问题,或者只是 stm32 mcus 无法从 sram 运行代码,或者我应该配置一些 cortex 外设吗?