;******************************************************************************
;* BOOT v4.6.4 *
;* Copyright (c) 1996-2010 Texas Instruments Incorporated *
;******************************************************************************
;****************************************************************************
;* BOOT.ASM
;*
;* THIS IS THE INITAL BOOT ROUTINE FOR TMS470 C++ PROGRAMS.
;* IT MUST BE LINKED AND LOADED WITH ALL C++ PROGRAMS.
;*;* THIS MODULE PERFORMS THE FOLLOWING ACTIONS:
;* 1) ALLOCATES THE STACK AND INITIALIZES THE STACK POINTER
;* 2) CALLS AUTO-INITIALIZATION ROUTINE
;* 3) CALLS THE FUNCTION MAIN TO START THE C++ PROGRAM
;* 4) CALLS THE STANDARD EXIT ROUTINE
;*
;* THIS MODULE DEFINES THE FOLLOWING GLOBAL SYMBOLS:
;* 1) __stack STACK MEMORY AREA
;* 2) _c_int00 BOOT ROUTINE
;*
;****************************************************************************
.if __TI_TMS470_V7M3__
.thumbfunc _c_int00
.else
.armfunc _c_int00
.endif
;****************************************************************************
; Accomodate different lowerd names in different ABIs
;****************************************************************************
.if __TI_EABI_ASSEMBLER
.asg _args_main, ARGS_MAIN_RTN
.asg exit, EXIT_RTN
.asg main_func_sp, MAIN_FUNC_SP
.elseif __TI_ARM9ABI_ASSEMBLER | .TMS470_32BIS
.asg __args_main, ARGS_MAIN_RTN
.asg _exit, EXIT_RTN
.asg _main_func_sp, MAIN_FUNC_SP
.else
.asg $_args_main, ARGS_MAIN_RTN
.asg $exit, EXIT_RTN
.asg _main_func_sp, MAIN_FUNC_SP
.endif
.if .TMS470_16BIS
;****************************************************************************
;* 16 BIT STATE BOOT ROUTINE *
;****************************************************************************
.if __TI_TMS470_V7M3__
.state16
.else
.state32
.endif
.global __stack
;***************************************************************
;* DEFINE THE USER MODE STACK (DEFAULT SIZE IS 512) ;***************************************************************
__stack:.usect ".stack", 0, 4
.global _c_int00
;***************************************************************
;* FUNCTION DEF: _c_int00 ;***************************************************************
_c_int00: .asmfunc
.if !__TI_TMS470_V7M3__
.if __TI_NEON_SUPPORT__ | __TI_VFP_SUPPORT__
;*——————————————————
;* SETUP PRIVILEGED AND USER MODE ACCESS TO COPROCESSORS
;* 10 AND 11, REQUIRED TO ENABLE NEON/VFP ;* COPROCESSOR ACCESS CONTROL REG ;* BITS [23:22] – CP11, [21:20] – CP10
;* SET TO 0b11 TO ENABLE USER AND PRIV MODE ACCESS
;*——————————————————
MRC p15,#0x0,r0,c1,c0,#2
MOV r3,#0xf00000
ORR r0,r0,r3
MCR p15,#0x0,r0,c1,c0,#2
;*——————————————————
; SET THE EN BIT, FPEXC[30] TO ENABLE NEON AND VFP
;*——————————————————
MOV r0,#0x40000000
FMXR FPEXC,r0
.endif
;——————————————————
;* SET TO USER MODE
;*——————————————————
MRS r0, cpsr
BIC r0, r0, #0x1F ; CLEAR MODES
ORR r0, r0, #0x10 ; SET USER MODE
MSR cpsr_cf, r0
;*——————————————————
;* CHANGE TO 16 BIT STATE
;*——————————————————
ADD r0, pc, #1
BX r0
.state16
.endif
;*——————————————————
;* INITIALIZE THE USER MODE STACK ;*——————————————————
LDR r0, c_stack
MOV sp, r0
LDR r0, c_STACK_SIZE
ADD sp, r0
;*—————————————————–
;* ALIGN THE STACK TO 64-BITS IF EABI.
;*—————————————————–
.if __TI_EABI_ASSEMBLER
MOV r7, sp
MOV r0, #0x07
BIC r7, r0 ; Clear upper 3 bits for 64-bit alignment.
MOV sp, r7
.endif
;*—————————————————–
;* SAVE CURRENT STACK POINTER FOR SDP ANALYSIS
;*—————————————————–
LDR r0, c_mf_sp
MOV r7, sp
STR r7, [r0]
;*——————————————————
;* Perform all the required initilizations:
;* – Process BINIT Table
;* – Perform C auto initialization
;* – Call global constructors ;*——————————————————
BL __TI_auto_init
;*——————————————————
;* CALL APPLICATION ;*——————————————————
BL ARGS_MAIN_RTN
;*——————————————————
;* IF APPLICATION DIDN'T CALL EXIT, CALL EXIT(1)
;*——————————————————
MOV r0, #1
BL EXIT_RTN
;*——————————————————
;* DONE, LOOP FOREVER
;*——————————————————
L1: B L1
.endasmfunc
.else ; !.TMS470_16BIS
;****************************************************************************
;* 32 BIT STATE BOOT ROUTINE *
;****************************************************************************
.global __stack
;***************************************************************
;* DEFINE THE USER MODE STACK (DEFAULT SIZE IS 512) ;***************************************************************
__stack:.usect ".stack", 0, 4
.global _c_int00
;***************************************************************
;* FUNCTION DEF: _c_int00 ;***************************************************************
_c_int00: .asmfunc
.if __TI_NEON_SUPPORT__ | __TI_VFP_SUPPORT__
;*——————————————————
;* SETUP PRIVILEGED AND USER MODE ACCESS TO COPROCESSORS
;* 10 AND 11, REQUIRED TO ENABLE NEON/VFP ;* COPROCESSOR ACCESS CONTROL REG ;* BITS [23:22] – CP11, [21:20] – CP10
;* SET TO 0b11 TO ENABLE USER AND PRIV MODE ACCESS
;*——————————————————
MRC p15,#0x0,r0,c1,c0,#2
MOV r3,#0xf00000
ORR r0,r0,r3
MCR p15,#0x0,r0,c1,c0,#2
;*——————————————————
; SET THE EN BIT, FPEXC[30] TO ENABLE NEON AND VFP
;*——————————————————
MOV r0,#0x40000000
FMXR FPEXC,r0
.endif
;*——————————————————
;* SET TO USER MODE
;*——————————————————
MRS r0, cpsr
BIC r0, r0, #0x1F ; CLEAR MODES
ORR r0, r0, #0x13 ; SET USER MODE
MSR cpsr_cf, r0
;*——————————————————
;* INITIALIZE THE USER MODE STACK ;*——————————————————
LDR sp, c_stack
LDR r0, c_STACK_SIZE
ADD sp, sp, r0
;*—————————————————–
;* ALIGN THE STACK TO 64-BITS IF EABI.
;*—————————————————–
.if __TI_EABI_ASSEMBLER
BIC sp, sp, #0x07 ; Clear upper 3 bits for 64-bit alignment.
.endif
;*—————————————————–
;* SAVE CURRENT STACK POINTER FOR SDP ANALYSIS
;*—————————————————–
LDR r0, c_mf_sp
STR sp, [r0]
;*——————————————————
;* Perform all the required initilizations:
;* – Process BINIT Table
;* – Perform C auto initialization
;* – Call global constructors ;*——————————————————
BL __TI_auto_init
;*——————————————————
;* CALL APPLICATION ;*—————————————————— BL ARGS_MAIN_RTN
;*——————————————————
;* IF APPLICATION DIDN'T CALL EXIT, CALL EXIT(1)
;*——————————————————
MOV R0, #1
BL EXIT_RTN
;*——————————————————
;* DONE, LOOP FOREVER
;*——————————————————
L1: B L1
.endasmfunc
.endif ; !.TMS470_16BIS
;***************************************************************
;* CONSTANTS USED BY THIS MODULE
;***************************************************************
c_stack .long __stack
c_STACK_SIZE .long __STACK_SIZE
c_mf_sp .long MAIN_FUNC_SP
.if __TI_EABI_ASSEMBLER
.data
.align 4
_stkchk_called:
.field 0,32
.else
.sect ".cinit"
.align 4
.field 4,32
.field _stkchk_called+0,32
.field 0,32
.bss _stkchk_called,4,4
.symdepend ".cinit", ".bss"
.symdepend ".cinit", ".text"
.symdepend ".bss", ".text"
.endif
;******************************************************
;* UNDEFINED REFERENCES *
;******************************************************
.global _stkchk_called
.global __STACK_SIZE
.global ARGS_MAIN_RTN
.global MAIN_FUNC_SP
.global EXIT_RTN
.global __TI_auto_init
.end
编译出错,请问__TI_TMS470_V7M3__这些定义在那里有?
"boot.asm", ERROR! at line 23: [E0004] Absolute, well-defined integer value
expected
.if __TI_TMS470_V7M3__
"boot.asm", ERROR! at line 177: [E0004] Absolute, well-defined integer value
expected
.if __TI_NEON_SUPPORT__ | __TI_VFP_SUPPORT__
"boot.asm", ERROR! at line 272: [E0002] Illegal mnemonic specified
.symdepend ".cinit", ".bss"
"boot.asm", ERROR! at line 273: [E0002] Illegal mnemonic specified
.symdepend ".cinit", ".text"
"boot.asm", ERROR! at line 274: [E0002] Illegal mnemonic specified
.symdepend ".bss", ".text"
"boot.asm", ERROR! at EOF: [E0300] The following symbols are undefined:
6 Assembly Errors, No Assembly Warnings
__TI_TMS470_V7M3__
__TI_NEON_SUPPORT__
__TI_VFP_SUPPORT__
Errors in Source – Assembler Aborted
zhenqing tian:
回复 Tony Tang:
我也遇到了同样的问题,可是如何重新编译RTS库?
请赐教
Tony Tang:
回复 zhenqing tian:
参考spnu151: www.ti.com/…/spnu151g
zhenqing tian:
回复 Tony Tang:
在用ccs3.3编译TI的官方UBL例程时出现了与上面同样的错误:
[E0004] Absolute, well-defined integer value expected
.if __TI_TMS470_V7M3__
E0002] Illegal mnemonic specified
.symdepend ".cinit", ".bss"
请问是什么问题导致的错误,该如何解决?谢谢!
TI中文支持网


