Thread 中讨论的其他器件:SYSBIOS
工具/软件:TI-RTOS
(所有这些都是为了尝试在 StarterWare 库中调试"SysDeplay")
从"Project | New | Sys/BIOS Typical"项目开始...
BeagleBone Black、GNU 编译器6.3.1、XDC 3.32.1.22、仅选中了"Sys/BIOS 6.46.5.55"。 它会构建。
从"StarterWare 2.0.1.1"添加 GPIO 功能、如下所示:
void taskFxn (UArg a0、UArg A1) { DMTimer7ModuleClkConfig(); SysDelayTimerSetup();//设置 TMR7,并将 ISR 设置为其处理程序*/ while (1){ Sysdelay(1000); GPIOPinWrite (SOC_GPIO_1_regs、21、1); GPIOPinWrite (SOC_GPIO_1_regs、22、1); GPIOPinWrite (SOC_GPIO_1_regs、23、1); GPIOPinWrite (SOC_GPIO_1_regs、24、1); Sysdelay(1000); GPIOPinWrite (SOC_GPIO_1_regs、21、0); GPIOPinWrite (SOC_GPIO_1_regs、22、0); GPIOPinWrite (SOC_GPIO_1_regs、23、0); GPIOPinWrite (SOC_GPIO_1_regs、24、0); } }
将 StarterWare 所需的三个库添加到项目中、例如
${BIOS_libraries} gcc m nosys "c" 驱动 程序平台 系统
当然还有编译器和链接器的必要搜索路径... 尝试构建它、并获得以下结果:
Makefile:149:针对目标'BasicGnuSleep.out'的配方失败 C:\Users\Scott\workspace_v7\BasicGnuSleep \src\SysBIOS\SysBIOS.aa8fg (GNU_ReentSupport.o): 在函数中` `ti_SysBIOS_Correcture_RTSSupport_Module_Startup_E':[GNU_Refug_IDSection_1]1:/ti/bios_6_46_05_55/packages/ti/sysbios/rts/gnu/ReentSupport.c :und_Ref_Ref_Isle_Ref_Ref_Ref_Isle_1:g1:g1:uneground_Ref_Ref_Ref_Isle_Ref_Ref_Ref_Ref_Ref_Isle_Ref_Isle_Isle_Ref_Isle_Ref_Isle_Ref_
在花了一整天的时间尝试找出问题后、我能找到的最好的一个 wiki 条目是确保您链接到正确的 C libs。 我是。 它们被"向导"自动包括 (以及为什么自动生成的默认项目包含两次 c lib?) 一次在引号中、一次在没有??)
processors.wiki.ti.com/.../Processor_SDK_RTOS_FAQ
(对于这一点、为什么所有 wiki 支持文档都告诉我以这种或那种方式修改链接器命令、而 CCS 环境不允许您进行这些更改???? 所有这些都是通过对话框和 XDC 隐藏的
接下来、由于我已经与此进行了一天的斗争、我创建了一个新项目、只是为了拥有一个干净的项目、我可以演示这个问题。 重复上述所有步骤。 它构建...
因此、我花了另一天的时间尝试找出差异。 比较 CFG 文件、搜索路径、链接器顺序... 每次我尝试"清理"项目时、我都会在消息框中盯着它... 它说已经完成了、但盒子就在那里大约2分钟。
我突然看到:
"${XDC_FIND:GNU/Targets/ARM/libs/install-native/ARM-none-eabi/lib/FPU:${ProjName}"
链接器搜索路径中。 它与库无关、它只是一个搜索路径... 但它导致了链路阶段成功。
这是什么? 链接器成功与失败之间的区别是什么? 我想知道... 因此、下次我可以节省12个小时来尝试弄清为什么不会构建这些东西。
(我还会指责"新项目"步骤将其包括一次、而不是另一次、但在花了12个小时更改和重试设置后、我无法再确定它最初的作用)