|
在学习arm中断处理时遇到一个编译问题,因为刚刚接触,没有头绪,请大家多多指点,这里先谢谢了。
目的想实现利用中断切换程序状态,但在编译 crt.S 文件时提示错误:
crt.S:127: Error: can only set flag field with immediate value
编译参数为:arm-elf-as -ahls -mapcs-32 -o crt.o crt.S > crt.lst
crt.S 文件部分内容如下:
#==========================================================
# 编程寄存器位定义
#==========================================================
.EQU LOCKOUT, 0xC0 @ 禁止所有中断
.EQU MODE_MASK, 0x1F @ 处理器模式位
.EQU UDF_MODE, 0x1B @ 未定义模式 UDF
.EQU ABT_MODE, 0x17 @ 异常模式 ABT
.EQU SUP_MODE, 0x13 @ 超级用户模式 SVC
.EQU IRQ_MODE, 0x12 @ 中断模式 IRQ
.EQU FIQ_MODE, 0x11 @ 快速中断模式 FIQ
.EQU USR_MODE, 0x10 @ 用户模式 USR
.EQU I_BIT, 0x80 @when I bit is set, IRQ is disabled
.EQU F_BIT, 0x40 @when F bit is set, FIQ is disabled
.SET MODE_SVC, 0x13 @Supervisor Mode
。。。
#====================================================
# 切换到用户模式并设置用户栈空间
#====================================================
MRS r0, cpsr
BIC r0, r0, #LOCKOUT | MODE_MASK
ORR r1, r0, #USR_MODE
MSR cpsr_cf, r0
LDR sp, =USR_STACK
MSR CPSR_c, #MODE_SVC|I_BIT|F_BIT <<<=====此处为第127行
MRS R0 , CPSR
ORR R0, R0, #0xC0
MSR CPSR , R0 |
|