久芯网

H743XI上,同样的代码,使用MDK和CubeIDE编译生成的可执行程序,执行效率不同

avatar 长安_yq 提问时间: 2023-08-02 18:52:11 / 已解决

H743XI上,同样的代码,使用MDK和CubeIDE编译生成的可执行程序,执行效率不同

代码由cubeMX生成,仅初始化了MPU及Icache、Dcache,HAL库版本1.9.1

补充:相同的编译器、相同的的优化等级之下,cubeIDE产生的目标程序比MDK产生的目标程序,运行效果慢了一百倍。

cubeIDE使用gcc编译器的情况下,相同的优化等级,运行效率大概会低五倍。

用于测试运行效率的代码如下: 因为贴代码段出现问题,此处贴图片 H743XI上,同样的代码,使用MDK和CubeIDE编译生成的可执行程序,执行效率不同 [相关图片]


如需获得 H743XI 等器件的更多信息,请点击链接或 点击此处 联系在线客服!

12个回答
  • avatar butterflyspring
    最佳答案
    回答时间: 2023-08-02 19:12:19

    不同的编译器,编译方式,优化规则,链接方式等也会不同的。没有一致的前提条件,不好比较哦。一般来说,有哪个编译器资源就用哪个,达到设计目标就行。 区别肯定是有的哈~~

  • avatar 落花又见流水
    回答时间: 2023-08-02 19:33:55

    这2个是不同编译器,可能优化等级效果不一样

  • avatar 奇迹
    回答时间: 2023-08-02 20:00:17

    这肯定不一样啊,编译器都不一样 而且你不同的优化策略,生成的代码大小跟执行效率都不一样

  • avatar 长安_yq
    回答时间: 2023-08-02 20:28:07
    落花又见流水 发表于 2022-4-6 17:24
    这2个是不同编译器,可能优化等级效果不一样

    编译器是不一样,在cubeIDE里面调整了编译器。相同的优化等级之下,cubeIDE产生的目标程序运行效率还是比MDK的目标程序效率低了一百倍。

  • avatar 长安_yq
    回答时间: 2023-08-02 20:45:30
    奇迹 发表于 2022-4-6 19:01
    这肯定不一样啊,编译器都不一样 而且你不同的优化策略,生成的代码大小跟执行效率都不一样 ...

    编译器是不一样,在cubeIDE里面调整了编译器。相同的优化等级之下,cubeIDE产生的目标程序运行效率还是比MDK的目标程序效率低了一百倍。

  • avatar 长安_yq
    回答时间: 2023-08-02 21:09:18
    butterflyspring 发表于 2022-4-7 11:42
    不同的编译器,编译方式,优化规则,链接方式等也会不同的。没有一致的前提条件,不好比较哦。一般来说 ...

    [md]现在是想通过cubeIDE来是搭建工程,但是cubeIDE生成的目标代码云心效率太低了。想找找看能不能有提升效率的方式。

  • avatar xmshao
    回答时间: 2023-08-02 21:33:39

    不同的编译环境会导致代码的执行效率的差异,这个也跟我们的环境配置有关, 代码容量、执行效率会基于不同的应用而有不同的取舍或偏好。这个话题有点大,总之,存在执行效率的差异是正常的。

  • avatar 奇迹
    回答时间: 2023-08-02 21:52:41
    长安_yq 发表于 2022-4-7 08:36
    [md]编译器是不一样,在cubeIDE里面调整了编译器。相同的优化等级之下,cubeIDE产生的目标程序运行效率还 ...

    之前看过一个编译器coremark的比较,在极限性能优化 AC6 -Omax+lto GCC -Ofast+lto AC6的跑分差不多是GCC的1.6倍 甚至ROM占用还要更小点 建议开发arm的要不然使用AC6要不然使用IAR,其他环境还是洗洗睡了

  • avatar 长安_yq
    回答时间: 2023-08-02 22:24:44
    xmshao 发表于 2022-4-7 15:00
    不同的编译环境会导致代码的执行效率的差异,这个也跟我们的环境配置有关, 代码容量、执行效率会基于不同 ...

    感觉差异有点大,差个一两倍还是能接受的,但是差个五倍,导致一个功能无法正常工作,这个有点难以接受了。

  • avatar 长安_yq
    回答时间: 2023-08-02 22:47:15
    奇迹 发表于 2022-4-7 19:28
    之前看过一个编译器coremark的比较,在极限性能优化 AC6 -Omax+lto GCC -Ofast+lto

    现在用的AC5,AC6同事们不让用,说是有bug。。。 能接受编译之后代码由差异,但是同样的工程在MDK和cubeIDE上,五倍的运行效率,这个有点离谱了。

  • avatar 奇迹
    回答时间: 2023-08-02 23:13:48
    长安_yq 发表于 2022-4-12 09:46
    [md]现在用的AC5,AC6同事们不让用,说是有bug。。。 能接受编译之后代码由差异,但是同样的工程在MDK ...

    5倍有点离谱了,你用的啥优化等级 AC6现在已经进入稳定版了,最近几次Keil的更新AC6编译器版本已经稳定了

  • avatar 长安_yq
    回答时间: 2023-08-02 23:44:23
    奇迹 发表于 2022-4-12 15:11
    5倍有点离谱了,你用的啥优化等级 AC6现在已经进入稳定版了,最近几次Keil的更新AC6编译器版本已经稳定了 ...

    STM32CubeIDE上使用GCC,与MDK用AC5对比,确实是5倍。现在已经弃坑STM32CubeIDE了,但我觉得,应该还是要切回到STM32CubeIDE的,毕竟MDK收费。看看有没有办法优化一下吧。

会员中心 微信客服
客服
回到顶部