从L4系类MCU迁移到U系列MCU时需要强制使用AC6编译器,U系列在仿真时watch窗口操作bit时不能使用0-1开关某个变量,必须使用字节控制,这造成了很多麻烦。

经过验证,在相同的代码工程中keil5.36可以位域操作,keil5.39不行。


最后经过AI分析,在 5.39 工程里给 AC6 加编译选项-gdwarf-3(Options → C/C++(AC6) → Misc
Controls)恢复。
objectivec
-gdwarf-3

根因
• armclang V6.21(µVision 5.39 捆绑)默认输出 DWARF4,位域用 DW_AT_data_bit_offset 描述------µVision 的表达式求值器不认识这种形式,于是位域写退化成整字写(落 bit0=adjust_start)、文件 static 全部 cannot evaluate。
• armclang V6.18(µVision 5.37 捆绑)输出老形式 DW_AT_bit_offset,所以 5.37 一直正常。
• -gdwarf-3 强制回退老形式 → 全部恢复。