lvben5d 发表于 2019-4-13 15:37

[讨论]keil5.27下 工程选择compiler5 vs compiler6的区别

本帖最后由 lvben5d 于 2019-4-13 17:47 编辑

最近使用上keil5.27里,对工程的编译器选择版本有user default compiler version 5(以前常用)user default compiler version 6 , 以及 v6.11的3个区别。在-O0编译优化等级下 使用user default compiler version 6 和v6.11,会将原本我25多K的工程FLASH,编译增加到40多K,而user default compiler version 5只有25多K。使用-01优化后,两者code才基本相同。
我所发现user default compiler version 6 版本相比ver 5前者 除了编译速度有较大提升外,还在C/C++ 语言栏 默认支持c99语法(我发现不少稍微优秀一些的代码用法都是要在c99下支持体现的 尤其是GD32E103的usb这块)
version 6 编译器下,不支持如下应用 : *(__packed uint32_t *)dest = *fifo;   而version 5 编译器下,编译不报错。

airwill 发表于 2019-4-16 11:09

看样子,编译器做了很大的改进,两个版本共存, 是为了开发者的习惯咯

sonicll 发表于 2019-4-23 14:47

本帖最后由 sonicll 于 2019-4-23 14:51 编辑

*(__packed uint32_t *)dest = *fifo;
这句在armcc6下报错是因为__packed这个宏定义,修改为__PACKED就可以了。armcc6的一些__attribute__关键字有变化,和armcc5不一样

lvben5d 发表于 2019-4-23 17:10

本帖最后由 lvben5d 于 2019-4-23 17:13 编辑

sonicll 发表于 2019-4-23 14:47
*(__packed uint32_t *)dest = *fifo;
这句在armcc6下报错是因为__packed这个宏定义,修改为__PACKED就可以 ...
我试过 __PACKED不行的哈   这里应用完全可以不用字节对齐,我实测功能没影响。
页: [1]
查看完整版本: [讨论]keil5.27下 工程选择compiler5 vs compiler6的区别