工具/软件:Starterware
大家好、
我正在尝试使用 BeagleBone White 中的 GPIO 和计时器中断构建一个简单的项目。
我的设置是:BeagleBone White、Starterware 版本2.00.01.01、Code Composer Studio 版本6.1.0.00104。
因此、对于我的项目、在包含 starterware 中的 interrupt.c 文件(以及其他源文件和头文件、包括 starterware 和自定义文件)和
根据我发现的编译器错误、我需要包括:
cpu.c 文件(我想对于 gcc 编译器、此文件位于路径:/AM335X_StarterWare_02_00_01_01/system_config/armv7a/gcc/)
和 exceptionHandler.S (位于此路径中:/AM335X_StarterWare_02_00_01_01/system_config/armv7a/AM335x/gcc/)
和(可能) cp15.S (位于路径:/AM335X_StarterWare_02_00_01_01/system_config/armv7a/gcc/)。
通过构建这些文件、我获得了一个可执行文件、我将其加载到 BeagleBone 中、但中断控制器似乎无法正常工作。
现在、我知道我的代码不是错误的、因为我将代码粘贴到 starterware 的 dmtimerCounter 示例中(并与 platform、utils、drivers 和 system_config 文件夹一起构建)
都很好)、一切都很好。
然后、我假设我还应该包含 init.S (路径在这里:/AM335X_StarterWare_02_00_01_01/system_config/armv7a/gcc/)、因为它在其中初始化代码例程
其中一些与 IRQ 相关。
如果我这么做、会发生以下构建错误:
所选处理器不支持 ARM 模式`fmxr FPEXC、r0'
具体而言、以下代码段最后一行中的错误弹出窗口来自 init.S:
@启用和初始化 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、#0x40000000 @和 CP 10和11仅刚刚启用 FMXR FPEXC、r0;FPEXC = r0 @启用 VFP 本身
为了克服这个问题,我在-mfpu (在 properties->GNU compiler->runtime 下)添加了 vfpv3-D16选项(尽管我不确定它是否正确)。
然后我会得到更多错误:
`未定义对 μ_stack'的引用
`未定义对 μ_BSS_START'的引用
-未`对 BSS_END"的引用
"条目"的多个定义
现在我对链接器脚本文件并不熟悉、但我使用在创建工程(AM335x.lds)时自动生成的脚本、这似乎没有任何问题。
但是,受一些其他的,仅仅是相对的,诚实的,来自这个论坛的帖子的影响,还有一个事实,那就是,starterware 的 dmtimerCounter 示例成功地使用了
另一个链接器文件、我尝试使用 dmtimerCounter.lds (在 starterware 的示例 dmtimerCounter.asm 中使用、因为它不使用 gcc 编译器)而不是 AM335x.lds
但不幸的是,这也是徒劳的。
我的问题是:
1)我是否需要 init.S?
2)如何克服在构建 init.S 时出现的错误?
3)我要做些什么才能使它发挥作用?
总的来说、即使您不确定、我也会很高兴得到任何响应、因为它让我困扰了很长时间、我甚至对最小的提示也很绝望...
提前感谢