主题中讨论的其他器件:HALCOGEN
工具与软件:
由 HalCoGen 生成的 sys_selftest.c 包含以下函数:
它违反了 MISRA-C 2004 12.2 "复杂表达式中的易失性变量"的规定、因此我 将其替换为这个等效函数
进行此修改后、系统进入预取中止异常。 nERROR 引脚可能会发生切换、即由该引脚控制的继电器会相互切换。
寄存器为 CP15.CPAR=0x0d IFSR、CP15.IFAR=0xc3CB2 (无效地址)、CP15.AIFSR=0x0。
如果我撤消此修改、预取中止将消失。 如果我将其相加、预取会再次发生。 如果我在调试器中逐步运行代码、预取将消失。
我认为不是我的代码导致这个问题,因为它在运行 main ()之前会进入预取异常,而在 main ()之前运行的代码是由 HalCoGen 生成的,除了 pbistIsTestCompleded。
尽管 C 代码看起来是等效的、但汇编语言却非常不同。 但我不明白为什么它与预取中止相关。 编译器标志为-mv7R4 --code_state=32 --float_support=VFPv3D16 --include_path="C:/ti/ccs1260/ccs/tools/compiler/ti-cgt-arm_20.2.7.LTS/include --include_path="C:/ti/Hercules/F021 Flash api/02.01/include"-g --symdebug:dwarf_version=3 --c99 --diag_warning=225 - diag_funfem=on-example_subsectionsections=-on-gen_display_subsections--gen_subsectionsections=on-gen_type=on-abi-packed -gen_subsectionsections=on -
为什么会发生这种情况? 如何找到问题? 非常感谢!