ARM学习笔记020之_asm_、CPSR、SPSR、位置无关码等问题

来源:互联网 发布:javascript delay 编辑:程序博客网 时间:2024/05/22 00:34
2014-01-05
1、_asm_:warning: implicit declaration of function '_asm_'
      如果asm两边都是两个下划线就没有错误了:__asm__
2、 makefile中-O -S必须大写
3、lds文件中:SECTIONS必须大写


4、ARM920T 包含了一个当前程序状态寄存器(Current Program Status Register-CPSR),另外还有5 个用于异
    常程序处理的程序状态保存寄存器(Saved Program Status Registers-SPSR)。这些寄存器的功能为:
   ● 保存最近已处理的ALU 操作的信息
   ● 控制中断的使能与禁止
   ● 设置处理器的运行模式


CPSR是指这个寄存器的整个32位,而CPSR_C是指其【7:0】这8个控制位


5、如果memsetup中各寄存器的值不设置为位置无关码,就会出现如下连接错误:


    原因是这样的,我们先看一下s汇编文件:


存储管理器都没有设置好,memsetup后面的函数编译器自然不认识。
在链接脚本lds中,全部代码的起始运行地址都被设为0x30000000,但在memsetup中代码还在内部SRAM(steppingstone)中,为了能够在steppingstone运行这个函数,memsetup中的寄存器就应该位置无关,手动赋值。如果赋值时使用了数组,就是位置相关了,因为数组是局部变量或者全局变量,在调用它时会涉及到地址。


6、在设置一些寄存器时,如果某些位为1,某些位为0,我们最好使用直接给寄存器赋值的方法。如果用位操作,就需要使用两条语句:”&=~(1<<n)“,“|=(1<<n)”(这两个没有先后顺序)  





0 0
原创粉丝点击