小编ALK*_*007的帖子

LDMIA指令在皮质M4中的外部SRAM上无法正常工作

我在拇指模式下使用STM32L486ZG板.我正在运行一个没有任何RTOS的简单裸机应用程序.我使用FSM将外部SRAM连接到电路板.外部SRAM位于地址0x60000000.系统初始化并以72MHz运行(我已尝试过这个问题,频率从18-80 MHz)现在在我的主要功能中,我有以下代码:

int main(){
    asm volatile (
            "push {r0}\n"
            "mov r0, #0x60000000\n"
            "add r0, #0x400\n"
            "stmdb r0!, {r1-r12}\n"
            "ldmia r0!, {r1-r12}\n"
            "pop {r0}\n"
            );
}
Run Code Online (Sandbox Code Playgroud)

根据此代码,在执行此main函数后不应更改寄存器,但在以下指令之后不是这种情况

ldmia r0!, {r1-r12}
Run Code Online (Sandbox Code Playgroud)

r9执行后不正确.stmdb指令工作正常但未正确ldmia加载数据.我通过查看内存中的内容来验证这一点.

这个问题在ldmia指令中的任何参数都是持久的:第9个寄存器总是受到影响.

说明: 假设我正在调试此代码,下一条要执行的指令是:

stmdb r0!, {r1-r12}
Run Code Online (Sandbox Code Playgroud)

加强所有这些寄存器后,已保存在内存和价值r00x600003d0

记忆的内容:

0x600003D0  00000000 40021008 0000000C  .......@....
0x600003DC  40000000 00000000 00000000  ...@........
0x600003E8  20017FEC 00000000 00000000  ì.. ........
0x600003F4  00000000 00000000 00000000  ............
Run Code Online (Sandbox Code Playgroud)

登记册内容:

r0  0x600003d0
r1  0x00000000
r2  0x40021008
r3  0x0000000c
r4 …
Run Code Online (Sandbox Code Playgroud)

memory ram gcc arm cortex-m

2
推荐指数
1
解决办法
267
查看次数

标签 统计

arm ×1

cortex-m ×1

gcc ×1

memory ×1

ram ×1