工具/软件:TI C/C++编译器
大家好,
正如标题所示,当我包含init.S文件时,我在构建项目时遇到了问题...我希望我将其发布在正确的位置,但如果没有,请通知我。
我收到的错误是:
- `entry’(条目)的多个定义 (这与创建新项目时自动生成的START_ARMCA8.S文件冲突)
- 对`ë_BSS_End'的引用未定义
- 对`ë_BSS_START'的引用未定义
- 对`堆栈'的引用未定义
我使用的init.s文件是我使用的编译器(GNU 4.8 >4 Linaro)的starterware (版本2.00 .01.01)的文件。
代码编写器工作室的版本是6.1 .0.0.0104万
我提供init.S以方便您:
@****************************** 全球符号********************************* 全局条目 全局堆栈 .global _BSS_START .global _BSS_END .global start_boot @**************** 内部定义******************************** @ @定义不同模式的堆栈大小。 用户/系统模式将使用 总堆栈大小@ @的其余部分 .set und_stack_size,0x8 设置ABT_STACK_SIZE,0x8 .set fiq_stack_size,0x8 设置IRQ_STACK_SIZE,0x800 设置SVC_STACK_SIZE,0x8 @ @以在CPSR中为不同模式设置模式位 @ .set mode_usr,0x10 设置MODE_FIQ,0x11 set mode_irq,0x12 设置MODE_SVC,0x13 SET MODE_ABT,0x17 .set mode_und,0x1B SET MODE_SYS,0x1F 二氧化碳I_F_bit,0xC0 @********************** 代码段******************************************* .text @ @此代码用于ARM指令 @ 代码32 @****************************************************************************** @ @****************************************************************************** @ @ StarterWare中的复位处理程序被命名为'entry'。 @重置处理程序为所有模式设置堆栈指针。 在此期间应禁用FIQ和@ IRQ。 然后清除BSS部分,最后 @切换到调用main()函数的函数。 @ 条目: @ @将堆栈设置为未定义模式 @ LDR r0,=_stack @读取堆栈地址 MSR CPSR_c,#MODE_UND|I_F_bit @切换至UNDEF模式 MOV sp,r0 @写入堆栈指针 sub0,r0,#und_stack_size @提供堆栈空间 @ @将堆栈设置为中止模式 @ MSR CPSR_c,#MODE_ABT|I_F_bit @更改为中止模式 MOV sp,r0 @写入堆栈指针 sub0,r0,#ABT_STACK_SIZE @提供堆栈空间 @ @为FIQ模式设置堆栈 @ MSR CPSR_c,#MODE_FIQ|I_F_bit @更改为FIQ模式 MOV sp,r0 @写入堆栈指针 sub0,r0,#fiq_stack_size @提供堆栈空间 @ @为IRQ模式设置堆栈 @ MSR CPSR_c,#MODE_IRQ|I_F_bit @更改为IRQ模式 MOV sp,r0 @写入堆栈指针 sub0,r0,#irq_stack_size @提供堆栈空间 @ @为SVC模式设置堆栈 @ MSR CPSR_c,#MODE_SVC|I_F_bit @更改为SVC模式 MOV sp,r0 @写入堆栈指针 sub0,r0,#svc_stack_size @提供堆栈空间 @ @为用户/系统模式设置堆栈 @ MSR CPSR_c,#MODE_SYS|I_F_bit @更改为系统模式 MOV sp,r0 @写入堆栈指针 @使分支预测失效并启用分支预测 MOV R0,#0 MCR P15,#0,r0,C7,C5, 6号 ISB. MRC p15,#0,r0,c1,c0, #0 订单 r0,r0,#0x0.08万 MCR p15,#0,r0,c1,c0, #0 @ @启用并初始化VFP和NEON @ Orr R1,R1,#(0xF << 20) @或以上CPACR读取值以启用CP MCR P15,#0,R1,C1,c0, 2号 @写入CPACR MOV R1,#0 MCR P15,#0,R1,C7,C5, 4号 @以下FMXR导致刷新预取缓冲器 MOV r0,#0x4000万 @和CP 10和11才刚刚启用 FMXR FPEXC,r0;FPEXC = r0 @启用VFP本身 @ @清除此处的BSS部分 @ Clear_BSS_Section: LDR r0,=_BSS_START @ BSS的起始地址 LDR R1,=(_BSS_END - 0x04) @ BSS的结束地址 MOV R2,#0 回路: STR R2,[r0],#4 @在BSS中清除一个单词 CMP r0,R1 BLE循环 @清除到BSS结束 @ @输入start_boot函数。 在系统模式下仍执行。 @ @Enter_main: LDR R10,=START_BOOT MOV LR,PC @从start_boot返回虚拟 BX R10 @ Branch to start_boot 子PC,PC,#0x08 @循环 @ @文件结尾 @ 结束
那么,有人有没有办法克服这些错误? 另外,有人能告诉我何时需要使用init.S吗?
提前感谢