处理ARM芯片的保留寄存器位

Ran*_*lue 3 c arm cpu-registers

我正在使用ARM Cortex M3的寄存器.在文档中,一些位可能是"保留的".在寄存器上写入时,我不清楚如何处理这些保留位.

这些保留位是否可写?我不小心不要碰它们吗?如果我触摸它们会发生什么不好的事吗?

Pav*_*ath 5

关于如何处理保留位,这是一个经典的嵌入式世界问题!首先,你应该不是随机免得你的代码变得非便携式写进去.当架构在未来为保留位分配新含义时会发生什么?你的代码会破裂.所以处理具有保留位的寄存器时最好的咒语是Read-Modify-Write.即读取寄存器内容,仅修改所需的位,然后回写该值,使保留位不受影响(未触及,并不意味着我们不写入它们,但从某种意义上说,我们写的是之前的那些)

例如,假设有一个寄存器,其中只有LSBit具有含义而所有其他都被保留.我会这样做的

ldr r0,=memoryAddress
ldr r1,[r0]
orr r1,r1,#1
str r1,[r0]
Run Code Online (Sandbox Code Playgroud)