我是一名linux嵌入式初学者,现在在看ARM处理器。
使用的是一块S3C2440的开发板,目前的开发调试环境是KEIL4。
我在一个添加了启动代码的工程中添加一个自己编写的简单汇编文件。然后在启动代码的C入口点处修改,import添加的简单汇编文件中的程序段,并使其跳转到该程序段。
编译不能通过,错误提示的我编写的汇编文件中定义的label没有定义。想知道如何解决。
我想在启动代码执行结束后调用一个定义在其他文件中的汇编程序。
ARM汇编,MDK,ARM初学
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答
- lr2131 2015-02-11 06:59关注
以下是我自己写的可以用的S3C2440汇编启动代码:
; .include "/SystemInit/LowLevelInit.s"
INTOFFSET EQU 0x4A000014
SVC_STACK_LEGTH EQU 0 ;;;;;;;;;;;;;;;;;;
FIQ_STACK_LEGTH EQU 0 ;;;;;;;;;;;;;;;;;;
IRQ_STACK_LEGTH EQU 256 ;;;;;;;;;;;;;;;;;;
ABT_STACK_LEGTH EQU 0 ;;;;;;;;;;;;;;;;;;
UND_STACK_LEGTH EQU 0 ;;;;;;;;;;;;;;;;;;NoInt EQU 0x80
NoFIQ EQU 0x40USR32Mode EQU 0x10
SVC32Mode EQU 0x13
SYS32Mode EQU 0x1f
IRQ32Mode EQU 0x12
FIQ32Mode EQU 0x11; IMPORT __use_no_semihosting_swi
; IMPORT FIQ_Exception
IMPORT __main
IMPORT SystemInit
IMPORT LowLevelInit
; IMPORT _ClockInit
; IMPORT _LedInit
; IMPORT _LedOn
; IMPORT _LedOff
; IMPORT LedInit
; IMPORT LedOn
; IMPORT LedOff
; IMPORT DelayIMPORT IRQHandle
; IMPORT Timer4_IRQ
IMPORT StartHandleEXPORT bottom_of_heap ;;;;;;;;;;;;;;;;;; EXPORT StackUsr;;;;;;;;;;;;;;;;;; EXPORT Reset EXPORT __user_initial_stackheap;;;;;;;;;;;;;;;;;; PRESERVE8 ;CODE32 AREA os,CODE,READONLY ARM
; ENTRY
Reset
LDR PC, ResetAddr
LDR PC, UndefinedAddr
LDR PC, SWI_Addr
LDR PC, PrefetchAddr
LDR PC, DataAbortAddr
DCD 0xb9205f80
LDR PC, IRQ_Addr
LDR PC, FIQ_AddrResetAddr DCD ResetInit
UndefinedAddr DCD Undefined
SWI_Addr DCD SoftwareInterrupt
PrefetchAddr DCD PrefetchAbort
DataAbortAddr DCD DataAbort
Nouse DCD 0
IRQ_Addr DCD IRQ_Handler
FIQ_Addr DCD FIQ_HandlerUndefined
B UndefinedSoftwareInterrupt
CMP R0, #4
LDRLO PC, [PC, R0, LSL #2]
MOVS PC, LRSwiFunction
DCD IRQDisable ;0
DCD IRQEnable ;1
DCD FIQDisable ;2
DCD FIQEnable ;3
; DCD Enable ;4IRQDisable
MRS R0, SPSR
ORR R0, R0, #NoInt
MSR SPSR_c, R0
MOVS PC, LRIRQEnable
MRS R0, SPSR
BIC R0, R0, #NoInt
MSR SPSR_c, R0
MOVS PC, LRFIQDisable
MRS R0, SPSR
ORR R0, R0, #NoFIQ
MSR SPSR_c, R0
MOVS PC, LRFIQEnable
MRS R0, SPSR
BIC R0, R0, #NoFIQ
MSR SPSR_c, R0
MOVS PC, LR;Enadle
PrefetchAbort
B PrefetchAbortDataAbort
B DataAbortFIQ_Handler
STMFD SP!, {R0-R4, LR}
; BL FIQ_Exception
LDMFD SP!, {R0-R4, LR}
SUBS PC, LR, #4IRQ_Handler
; ÒÔºóÓÐʱ¼ä£¬Ö±½ÓÓûã±à²é±íµÄ·½·¨À´×ö£¬²»ÒªÒÀÀµCº¯Êý·½Ê½£¬ÌáÉýЧÂÊ
STMFD SP!, {R0-R4, LR}
;Ìøתµ½ÍⲿÖжϵĴ¦Àíº¯Êý
;Á½¸ö±ê¼ÇλµÄÇå³ýÒ²¿ÉÔÚÕâÀïÍê³É£¬µ«Ä¿Ç°ÏÈÓÉÓû§Íê³É°É; LDR R1,=INTOFFSET
; LDR R0,[R1]
; LDR R2,=IRQHandle
; LDR R1,[R2,R0,LSL #2] ; MOV R1,#4; MLA R3,R0,R1,R2;
; LDR R3,[R1]
; MOV LR,PC
; BX R3
BL StartHandle
LDMFD SP!, {R0-R4, LR}
SUBS PC, LR, #4InitStack
MOV R0, LR
MSR CPSR_c, #0xd3
LDR SP, StackSvc
MSR CPSR_c, #0xd2
LDR SP, StackIrq
MSR CPSR_c, #0xd1
LDR SP, StackFiq
MSR CPSR_c, #0xd7
LDR SP, StackAbt
MSR CPSR_c, #0xdb
LDR SP, StackUnd
MSR CPSR_c, #0xdf
LDR SP, =StackUsr-32
BX R0; ²»ÄÜʹÓÃLR·µ»Ø£¬LR¿ÉÄÜÒѾ±»ÐÞ¸ÄÁË£¬ËùÒÔ½èÓÉR0·µ»Ø ; MOV PC, R0 ;ResetInit
BL LowLevelInit
BL InitStack ;ÔÚÕâÖ®ºó£¬¿ÉÒÔʹÓÃCº¯Êý
BL SystemInit
; BL _ClockInit
; BL LedInit
LOOP
; BL LedOn
; LDR R0,=0x100
; BL Delay
; BL LedOff
; LDR R0,=0x100
; BL Delay
; B LOOP_Delay
; LDR R3,=0x100000; STMFD SP!, {R0-R4, LR}
; BL SystemInit
; LDMFD SP!, {R0-R4, LR}
; B .
; BL TargetResetInit
BL IRQ_Handler
B __main__user_initial_stackheap
LDR r0,=bottom_of_heap ;;;;;;;;;;;;;;;;;;
; LDR r1,=StackUsr ;;;;;;;;;;;;;;;;;;
BX LR; MOV pc,lr ;StackSvc DCD SvcStackSpace + (SVC_STACK_LEGTH - 1)* 4 ;;;;;;;;;;;;;;;;;;
StackIrq DCD IrqStackSpace + (IRQ_STACK_LEGTH - 1)* 4 ;;;;;;;;;;;;;;;;;;
StackFiq DCD FiqStackSpace + (FIQ_STACK_LEGTH - 1)* 4 ;;;;;;;;;;;;;;;;;;
StackAbt DCD AbtStackSpace + (ABT_STACK_LEGTH - 1)* 4 ;;;;;;;;;;;;;;;;;;
StackUnd DCD UndtStackSpace + (UND_STACK_LEGTH - 1)* 4 ;;;;;;;;;;;;;;;;;;AREA MyStacks, DATA, NOINIT, ALIGN=2
SvcStackSpace SPACE SVC_STACK_LEGTH * 4 ;Stack spaces for Administration Mode ¹ÜÀíģʽ¶ÑÕ»¿Õ¼ä
IrqStackSpace SPACE IRQ_STACK_LEGTH * 4 ;Stack spaces for Interrupt ReQuest Mode ÖжÏģʽ¶ÑÕ»¿Õ¼ä
FiqStackSpace SPACE FIQ_STACK_LEGTH * 4 ;Stack spaces for Fast Interrupt reQuest Mode ¿ìËÙÖжÏģʽ¶ÑÕ»¿Õ¼ä
AbtStackSpace SPACE ABT_STACK_LEGTH * 4 ;Stack spaces for Suspend Mode ÖÐÖ¹Òåģʽ¶ÑÕ»¿Õ¼ä
UndtStackSpace SPACE UND_STACK_LEGTH * 4 ;Stack spaces for Undefined Mode 䶨Òåģʽ¶ÑÕ»AREA Heap, DATA, NOINIT
bottom_of_heap SPACE 1
AREA Stacks, DATA, NOINIT
StackUsr
END
解决 无用评论 打赏 举报
悬赏问题
- ¥20 腾讯企业邮箱邮件可以恢复么
- ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
- ¥15 错误 LNK2001 无法解析的外部符号
- ¥50 安装pyaudiokits失败
- ¥15 计组这些题应该咋做呀
- ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
- ¥15 让node服务器有自动加载文件的功能
- ¥15 jmeter脚本回放有的是对的有的是错的
- ¥15 r语言蛋白组学相关问题
- ¥15 Python时间序列如何拟合疏系数模型