在AURIX项目的开发过程中,如果碰到浮点运算的结果跟预期对不上,很多时候问题的根源并不在算法代码本身。这是因为TASKING工具链会根据当前选择的芯片型号以及编译时指定的选项,自动去挑选对应的C标准库和浮点运行库,这样一来,硬件浮点单元(FPU)有没有被用上、是否退回到软件浮点、单精度还是双精度处理、有没有开启异常捕获模式,这些因素都会直接影响到最终的计算结果。下面就以TASKING VX-toolset for TriCore这一工具为例来说明,虽然SmartCode和不同版本在界面上可能有些差别,但排查的思路是相通的。
TriCore工程在无优化状态下运行正常,一换到发布配置,变量更新、中断响应或任务时序便开始出问题,这种现象很容易让人把原因归到编译器上。实际调试中,优化更像一面放大镜,它会改变指令组织方式,也会把未初始化变量、越界访问、共享数据竞争等隐患暴露出来。弄清TASKING VX-toolset for TriCore怎么配置编译选项,以及TASKING VX-toolset编译优化后程序异常如何排查,需要先把构建条件固定下来,再沿着异常出现的位置逐层缩小。