我正在使用 CodeWarrior 为MCU v10.6 IDE
. 它是来自 NXP 的基于 Eclipse 的 IDE。该项目以 NXP 的 K21 SoC 为目标(确切地说是 a MK21FN1M0M12
,它嵌入了 a cortex-m4
,armv7-m
)。CodeWarrior 配置为使用 ARM 工具链。
我遇到了与拇指交互相关的崩溃。此功能由 IDE 启用,无法停用。
由于armv7-m
只支持 thumb2,所以一开始使用 thumb-interwork 似乎没有意义。但我可能在这里遗漏了一些东西。所有代码都在拇指指令中正确生成。
通过指针进行间接函数调用时遇到麻烦。功能代码在链接阶段得到一个奇数地址,这没关系(这表明它是拇指代码)。但是,当通过指针调用它时,会生成一条 BLX 指令(我想链接器在这里将原始 BL 更新为 BLX)并且函数指针的值保持不变!由于指针的值是偶数,跳转指示内核切换到 ARM 模式。因此崩溃。
我认为链接器将 BL 升级为 BLX,因为拇指交互功能被激活。在 CodeWarrior for 上MCU v10.6
,这是强制的,我无法禁用它。我被告知这是该工具“处理器所必需的”,并且无法单击相关复选框(Properties->C/C++ Build->Settings
ARM CPU。处理器设置为"cortex-m4"
)。
我不明白为什么,因为这是armv7-m
. 此外,它似乎给我带来了麻烦。我想我在这里遗漏了一些东西。
您能否帮助我了解发生了什么和/或告诉我是否有办法在 CodeWarrior 上禁用拇指互通?
谢谢和最好的问候,
皮埃尔