主题中讨论的其他器件:HALCOGEN、 TMS570LC4357
我从 HALCoGen 版本04.05.01中导出了以下代码片段:
从 sys_startup.c 文件:
/* Release the MibSPI1 modules from local reset. * This will cause the MibSPI1 RAMs to get initialized along with the parity memory. */ mibspiREG1->GCR0 = 0x1U; /** . . other code (unrelated to SPI) . . */ /*SAFETYMCUSW 28 D MR:NA <APPROVED> "Hardware status bit read check" */ while ((mibspiREG1->FLG & 0x01000000U) == 0x01000000U) { }/* Wait */
对 GCR0中的 nRESET 位进行简单分配的线路按如下方式进行组装:
mibspiREG1->GCR0 = 0x1U; 0002a604: E5810000 str r0, [r1] 0002a608: E30F1800 movw r1, #0xf800 0002a60c: E34F1FF7 movt r1, #0xfff7
请注意、值1或任何值都没有立即值。 使用调试器会发现、GCR0寄存器肯定不会按照 C 代码的指示分配值1!!!
这会导致对标志的轮询为一个无限循环、从而导致系统在启动代码上立即停止。
使用 TI_ARM_V20.2.5LTS 编译的相同行提供了以下汇编代码:
mibspiREG1->GCR0 = 0x1U; 0002b0a8: E59F00C0 ldr r0, [pc, #0xc0] 0002b0ac: E3A0C001 mov r12, #1 0002b0b0: E580C000 str r12, [r0]
它实际上会将立即值1加载到正确的位置、应用程序工作正常!!!
我的问题是:
这只是编译器要做的一件非常基本的事情、那么是否有任何命令行参数可以修复此问题或应在结构上应用的属性? 请注意、这是 HALCoGen 导出的代码、因此它不是开发人员编写的代码、而且以前工作正常!!