如题
LDM和STM执行过程会被优先级更高的中断打断以保证中断响应时间。 不过CM3会将LDM和STM的执行状态保存在EPSR的ICI field中,这样中断返回之后CM3可以从被打断的地方继续执行。
感谢,我通过仿真发现确实是这样。另外我想再问个问题,有哪些渠道可以查询一个命令是否可以中断呢?另外ldm和stm这种汇编是否可以用c语言实现相同的功能呢?
可以参考CM3的User Guide Reference Material 2.1.3 Interruptible-continuable instructions. 除了LDM STM还有PUSH POP,SDIV,UDIV。
编译器编译C语言时会自动根据情况编译出LDM和STM指令。此外你也可以用内嵌汇编的形式嵌入LDM STM指令
ok,明白了,我学习一下文档。我现在就使用的是内嵌汇编的形式,就很想用直接用c实现汇编ldm/stm的功能,但一直没成功,请问你有这方面信息吗?
ldm/stm只有在连续访问memory的时候才能产生。memory copy的时候调用lib里的memcpy函数。变量多用结构体,结构体赋值的时候可能会出现ldm stm。 其他的建议你查询编译器手册。
好的,感谢,我去看看资料。