查看: 10083|回复: 15

【RT1052】+ 终于找到Keil编译超慢的罪魁祸首+解决方案

[复制链接]

该用户从未签到

16

主题

107

帖子

2

中级会员

Rank: 3Rank: 3

积分
365
最后登录
2022-12-14
发表于 2018-11-27 17:52:09 | 显示全部楼层 |阅读模式
RT1052的例程用Keil编译起来真的是超慢啊。。。。用了两分钟以上。。。。 no_pch.png

刚开始我以为是最新版Keil编译器做了很多优化,所以慢。
然而今天我用Keil编译STM32的CMSIS-DAP程序的时候,发现编译超快。那么应该不是编译器的问题。


那肯定是代码体积的问题咯。于是乎我把所有c代码的文件打开,发现也不大啊。

再一看,发现#include的头文件里面,包含了一个巨大的.h文件(#include "MIMXRT1052.h")
这个头文件是RT1052的芯片内部所有寄存器定义,一共29K行。。。。。。。。。。

基于对头文件的优化理解,我记得很多编译器包括MSVC、GCC都有头文件预编译的优化选项,大概原理就是除非头文件被修改,否则把头文件的单独编译一下,把中间文件保存下来,这样下次对头文件的编译就可以略过,直接使用之前的中间文件即可。


通过查找,发现Keil的C编译器支持头文件预编译优化选项--pch,


果断在Keil的工程选项里面设置--pch。

pch_config.png

优化对比来了。。。usb_device_hid_generic例程的编译,从2分8秒缩短到7秒钟(第一次编译生成PCH的时候还是需要2分钟以上。)
with-pch.png

注意编译的时候提示 " using precompiled header file "xxx.pch"说明用上了之前预编译的pch文件。

PS:PCH文件特别大。我编译出来基本每个PCH文件都有12M。总共PCH加起来有350MB。这算得上是以空间换时间的典型的代码优化方法了。

pch_doc.png
回复

使用道具 举报

  • TA的每日心情

    2021-2-4 09:24
  • 签到天数: 190 天

    [LV.7]常住居民III

    38

    主题

    591

    帖子

    28

    金牌会员

    Rank: 6Rank: 6

    积分
    2193
    最后登录
    2023-12-1
    发表于 2018-11-27 18:42:39 | 显示全部楼层
    学习学习
    哎...今天够累的,签到来了~
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2018-4-20 15:04
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    49

    主题

    188

    帖子

    1

    金牌会员

    Rank: 6Rank: 6

    积分
    2952
    最后登录
    2023-7-24
    发表于 2018-11-27 20:42:11 | 显示全部楼层
    这个方法副作用太大,查函数定义查不了,并且会把一大堆头文件复制到工程目录那里。
    今天心情不错
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2021-7-8 09:06
  • 签到天数: 27 天

    [LV.4]偶尔看看III

    18

    主题

    438

    帖子

    26

    金牌会员

    Rank: 6Rank: 6

    积分
    2209
    最后登录
    2024-3-5
    发表于 2018-11-27 22:23:15 | 显示全部楼层
    增量编译比较靠谱
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16

    主题

    107

    帖子

    2

    中级会员

    Rank: 3Rank: 3

    积分
    365
    最后登录
    2022-12-14
     楼主| 发表于 2018-11-28 09:01:09 | 显示全部楼层
    donatello1996 发表于 2018-11-27 20:42
    这个方法副作用太大,查函数定义查不了,并且会把一大堆头文件复制到工程目录那里。 ...

    怎么看不了函数???源代码都在这。

    --pch_dir选项了解一下。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2024-4-9 17:01
  • 签到天数: 1478 天

    [LV.10]以坛为家III

    203

    主题

    2万

    帖子

    64

    超级版主

    Rank: 8Rank: 8

    积分
    92618
    最后登录
    2024-4-24
    发表于 2018-11-28 12:14:55 | 显示全部楼层
    编译成lib以后效果更佳
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16

    主题

    107

    帖子

    2

    中级会员

    Rank: 3Rank: 3

    积分
    365
    最后登录
    2022-12-14
     楼主| 发表于 2018-11-28 15:00:00 | 显示全部楼层
    本帖最后由 mars4zhu 于 2018-11-28 15:02 编辑
    stm1024 发表于 2018-11-28 12:14
    编译成lib以后效果更佳

    No。肯定是PCH。编译慢的根本原因是头文件太大而不是库函数太多。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    16

    主题

    107

    帖子

    2

    中级会员

    Rank: 3Rank: 3

    积分
    365
    最后登录
    2022-12-14
     楼主| 发表于 2018-11-28 15:01:25 | 显示全部楼层
    xiaoshen-372360 发表于 2018-11-27 21:34
    刚刚试过了楼主的方法,在初次编译的时候生成PCH文件就还是会花掉很多时间…第二次的话会省掉很多时间,… ...

    10秒和一秒的区别。

    编译慢的根本原因是头文件太大而不是库函数太多。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2023-7-4 19:10
  • 签到天数: 92 天

    [LV.6]常住居民II

    15

    主题

    222

    帖子

    23

    高级会员

    Rank: 4

    积分
    640
    最后登录
    2023-8-6
    发表于 2018-11-29 11:47:13 | 显示全部楼层
    lib方法好用还是  就是不能看底层了
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    昨天 11:19
  • 签到天数: 818 天

    [LV.10]以坛为家III

    71

    主题

    2444

    帖子

    24

    金牌会员

    Rank: 6Rank: 6

    积分
    5513
    最后登录
    2024-4-23
    发表于 2018-11-30 10:33:02 | 显示全部楼层
    谢谢分享,被这个折磨的
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-24 13:28 , Processed in 0.135865 second(s), 27 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表