This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI C/C++编译器
大家好,
正如标题所示,当我包含init.S文件时,我在构建项目时遇到了问题...我希望我将其发布在正确的位置,但如果没有,请通知我。
我收到的错误是:
我使用的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吗?
提前感谢
嘿,
感谢您的回复。
我也会在Sitara的论坛上发布,但如果您有答案...
我应该何时使用init.S而不是startup _ARMCA8.S?
至于与链接程序脚本文件相关的错误,您的意思是我应该根据我的应用程序选择不同的链接程序脚本文件吗?
如果是这样,我应该如何知道选择什么?
(我注意到一些starterware示例使用不同的链接程序文件,例如AM335x.cmd和dmtimerCounter.cmd,所以我想我的第二个问题的答案是肯定的。
但我特别感兴趣的是,了解上述差异是否与处理中断有关。)
再次感谢
再次感谢您的回复!!!
你的帮助对我来说真的很有价值。
那么我想我必须找到正确的链接程序脚本文件和/或init,或者学习如何创建它们。(这里的任何帮助都将是非常受欢迎的)
就星标器示例提供的文件而言,它们肯定适用于TI ARM编译器,但也在相应的文件夹下提供了GCC。
无论如何,再次感谢!!!
您好,
如果您现在开始开发,您可能有兴趣了解的一个细节是基于RTOS的处理器SDK的存在。 这是一个更现代的软件包,它具有完全支持,并且很可能具有多个新功能和改进。
请在以下网址查看:
http://www.ti.com/tool/processor-sdk-am335x
拉斐尔
您好,
我很抱歉再次在这里写了一篇文章,但首先,我被指示从Sitara的分论坛上向这里提问,其次,我注意到在这里提出一些更合适的问题。
在代码编辑器工作室的控制台中,构建我的项目后,我得到了以下错误描述:
i/ccsv6/tools/compiler/gcc-arm-none-eabi-4_8-2014q3/bin/./lib/gcc/arm-no-eabi/arm.4/././././../arm-none-eabi/lib/crt0.o 4.8 :In Function `_start':
(.text+0x104):对`__bss_start__'的引用未定义
和对应的__bss_end__
现在我猜是因为某种原因,文件crt0.o导致了我的问题...是这样吗?我应该怎么做?
另外,我已经意识到,我可能没有使用正确的编译和链接器标记...所以,请您帮助我解决这个问题吗?
在为gcc编译器设置项目后,我只添加了以下选项:
我的目标是BeagleBone white。
如果您需要更多信息,请告诉我,或者我是否应该将其发布到其他子论坛。
提前感谢
您好,
一般而言,您应该需要.specs文件来选择要使用的运行时:nosys绝对不支持半托管和最小占用空间,或rdimon完全支持半托管(printf等)。 此选项设置为:
另外,从特定版本的GCC (IIRC 4.8 .x)开始,在设置此选项时,建议删除对libc,libgcc和libnosys/librdimon的链接程序引用。 如果您使用的是libm或其他,则将其作为选项传递,如下所示:
mfpu和-mfloat-ABI是可选的,但取决于其他支持库的构建方式-例如,您不能将库构建与"softfp"链接,将对象文件与"hard"链接。 因此,您可以尝试使用最佳性能选项,即使用-mfloat-abi=hard (使用硬件浮点单元)和-mfp=vfpv3或-mfpu=neon,查看项目是否构建良好。
希望这能有所帮助,
拉斐尔
您好,
我想挑选一些(必要的)编译器和链接器标志会有所不同,因为我最终成功地构建了项目。
但问题是,现在启动调试会话时,可执行文件会立即加载并开始运行,而我没有按“运行”按钮...相反,我只能选择暂停或停止它。 如果它确实按所需的方式工作,这不是真正的问题...但情况是程序似乎根本没有运行(主板BeagleBone似乎没有加载可执行文件)...此外,我没有调试选项,因为没有任何相关按钮选项可用...
那么,有三个问题,
提前感谢您,对您的问题深表歉意
感谢您的回复,
但很遗憾,它不起作用...再次,当我开始调试时,加载进度窗口刚刚弹出并立即消失(没有任何进度迹象),在调试模式下,运行选项不能与其他调试工具一起使用, 除了暂停和停止...在此期间控制台没有错误...
代码编写器问题(虽然似乎只能与其他程序配合使用)或生成的可执行文件问题是否应受到指责?
如果你对我在上一个帖子中提出的其他问题有任何答案,我将非常感谢。
再次感谢