最近在学ARM Cortex-M3,找了本声称很经典的书“An Definitive Guide to The ARM Cortex-M3”在看。这个系列学习笔记其实就是在学习这本书的过程中做的读书笔记。
对内存的互斥拜访
Cortex-M3 中供给了三对用于互斥拜访的内存的指令,别离是:LDREX/STREX, LDREXH/STREXH, LDREXB/STREXB,这三对指令别离对应于字、半字、字节 的取出与写入。
LDREX 的根本指令格局为:
LDREX Rxf, [Rn, #offset]
这条指令与LDR Rxf,[Rn,#offset] 的作用是相同的,仅有的区别是这条指令还会告诉内核对它所拜访的内存空间特别照顾。怎么特别照顾,在STREX 指令碑文时显现出来。
STREX的根本指令格局为:
STREX Rd, Rxf, [Rn, #offset],作用是将Rxf 的内容写入到 Rn+#offset 地址处的内存,而且将Rd的值改写为0,当然这些操作的条件是这条指令是LDR Rxf,[Rn, #offset]指令碑文之后的第一条对Rn+#offset地址处碑文写入操作的指令。假如在STREX指令碑文之前就有其他的指令对Rn+#offset 地址处的内存进行了写入操作,那么STREX指令将不会改动Rn+#offset 地址处内存,并将Rd的值改写为1以此来标明写入操作不成功。这样,经过在程序中判别Rd的值就能够确认STREX指令是否成功了,假如不成功能够从头再试以此。经过这种机制,就能够完成对资源的维护了。