【发布时间】:2018-02-01 22:55:03
【问题描述】:
我正在尝试将一个函数从 FLASH 复制到内存中,如果我使用 word 复制它会更快,但是他 STM 和 LDM 指令要求地址是 4 字节对齐的,所以我想知道一般 comtex-m C 编译器这样因为 Keil/IAR 或 GNU 总是将函数编译为 4 字节对齐?
【问题讨论】:
-
一般来说是的,但是编译器会按照你告诉它的去做,并且有办法告诉它错误,它无法弄清楚。理想情况下,您想使用 4 字 stm/ldms 并在汇编中自己完成。 8 甚至更好,具体取决于大小,但您必须将它们全部存储在堆栈中,并且循环/复制代码只剩下几个寄存器。所以每个 stm/ldm 4 个字是你在 memcpy 库和其他地方看到的常见平衡。我有/知道一个手臂核心,即使您执行超过 4 个字,它也会将指令分成 4 个字传输以进行写入,但会执行 8 个或更多的读取...
-
我不相信 arm 调用约定要求函数位于单词边界上,ISR 处理程序除外。有关完整详细信息,请参阅 arm 文档以了解您感兴趣的架构修订版的调用约定。