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.

[参考译文] Starterware/STARTERWARE-Sitara:中断问题和使用 gcc 构建

Guru**** 2563530 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/596735/starterware-starterware-sitara-problem-with-interrupts-and-building-with-gcc

器件型号:STARTERWARE-Sitara

工具/软件: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)我要做些什么才能使它发挥作用?

总的来说、即使您不确定、我也会很高兴得到任何响应、因为它让我困扰了很长时间、我甚至对最小的提示也很绝望...

提前感谢