×
单片机 > 单片机程序设计 > 详情

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

发布时间:2021-11-15 发布时间:
|

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<


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32 TIMER2的使用