A. Keil切换到armclang编译器,到底强在哪里
ARM Compiler 5与AC6的差异主要体现在编译器框架上。AC6基于现代的LLVM编译器框架,而AC5则非如此。这导致从AC5迁移至AC6时,项目与源文件需要特别注意一些要点。具体的工具链差异,除了C编译器与预处理器不同外,其他部分基本保持一致。优化与默认设置也可能有所不同,包括编译选项、固件后缀等,详情参考相关链接。
在Keil MDK 5.27中,用户可以通过项目选项轻松切换编译器,包括AC5与AC6。测试显示,使用AC6构建同一STM32F103CB基于HAL库的工程,耗时从10秒缩短至5秒。这表明AC6在构建速度上优于AC5,具体差异在于CMSIS中的兼容性处理。在CMSIS_compiler.h文件中,条件编译选项已通过判断不同的编译器版本,包含了对应的头文件,如armcc与armclang。这使得项目能够根据系统选择合适的头文件。
在AC5与AC6之间切换时,需注意C语言部分的修改,文档“apnt_298,Migrate ARM Compiler 5 to ARM Compiler 6 MDK Tutorial”提供了详细指南。对于涉及C与汇编混合编程的底层操作,可能需要进行相应的调整。
添加FreeRTOS时,通过ST官方的CubeMX可以便捷地进行添加。但在使用AC6进行构建时,出现了115个错误,主要源于C编译器语法与C和汇编混合编程语法不兼容。错误主要集中在port.c和portmacro.h文件中,通常这类问题在移植FreeRTOS至特定硬件平台时需要解决。文档提供了对汇编语法兼容性的调整建议。通过手动修改不兼容的部分,或者使用GCC-ports下的ARM_CM3文件(包含了移植所需文件),可以解决这些问题。重新构建后,项目构建成功且耗时较少。
总结而言,从AC5迁移至AC6时,主要关注点在于编译器框架差异、工具链调整、优化设置变化、FreeRTOS兼容性问题以及底层编程的语法适应。使用AC6在构建速度上表现出优势,并且已经得到了FreeRTOS较好的支持。在迁移过程中,参考官方文档及教程能有效解决遇到的问题。对于其他建议与分享,欢迎在下方讨论。