小弟初学ARM相关指令。有些问题请前辈指教下哈
看资料说RAM范围在0x20000000~0x3FFFFFFF,之前自己写指令向SRAM写一个数至0x20000000,发现值没变,一直都是0XAA(SRAM那一片全部是0XAA)。下一条指令
加入偏移量,向0x2000000F写数据,这条指令执行完后就进异常了,是hardware fault
小弟的第一个疑问是:这个范围内存的访问应该不受限制的,而且代码模式下的高权限访问也同样进入异常。
后来我自己用C写,通过看反汇编来看看编译器是怎么处理的。我发现全局变量好像都是从0x000003D8这个地址开始的,位于CODE区,而且使用指令
0x0000033A 4827 LDR r0,[pc,#156] ; @0x000003D8
小弟的第二个疑问是:这个指令有什么玄机啊?是怎么一个原理。 此外,CODE区编译器对于代码部分和数据部分(全局变量)是怎么分配的,有没有一些官方的资料说明?
另外,SRAM这个部分一般在什么情况下才用得到啊?
|