怎样去解决Keil编译的速度越来越慢的问题呢

发布者:温暖拥抱最新更新时间:2024-06-18 来源: elecfans关键字:Keil  编译  速度 手机看文章 扫描二维码
随时随地手机看文章

最近我在进行一个项目的开发,用的IDE是Keil mdk,由于代码量逐渐增加,发现编译的速度越来越慢。

构建项目


这个项目基于STM32F407,在此基础上还添加了FreeRTOS和LWIP TCP/IP 协议栈,所以整体的代码量就被协议栈和RTOS弄得很大,每次构建项目或者重新构建项目的时候,都要花很长的时间,如下图所示;

pYYBAGL5up6ACXu3AACHEAkEdas828.png

可以看到,在这里我用了3分钟。这个时间太长了,会大大影响我的开发效率,所以后面尝试了几个方法,提高构建的速度。

解决方案

首先我找到一个解决办法就是在构建过程中防止生成 Browse Information 文件。

pYYBAGL5uq-AXLF5AACodZZC9NI351.png

配置

想要在项目配置中将这个选项勾选去掉即可,最终实践发现,项目构建时间缩短到 24秒 ,整体还可以接受。

pYYBAGL5usGAB-4NAACXN8JTRt0159.png

优化后的时间

主要原因其实是构建的时候,避免生成 .CRF 文件,生成这个文件的主要作用就是我们在进行代码编辑的时候,宏定义,函数原型,函数声明可以进行跳转。

pYYBAGL5utCAbiaPAAEG1ZmWWzU106.png

CRF

官方文档中的解释:Cross-Reference file containing browse information (definitions, references for identifiers).

如果选择不生成这个文件,代价就是牺牲了我们写代码的效率。

因为我们写代码的时候,会频繁地进行函数原型和函数声明直接的跳转,有时候要跳转到宏定义,如果无法进行跳转,使用Keil MDK只能使用全文搜索来替代,因此一定程度上会降低效率。

pYYBAGL5uuOAXkgtAACCE8WlPgo114.png

进行跳转

当我们尝试跳转到函数声明时,最终提示如下:

poYBAGL5uvOAEPjVAAAvGI1HDyo691.png

错误提示

这时候,我喜欢配合其他编辑器,比如source insight,vs code,代码编辑的工作放在其他体验更好的软件中进行,然后代码的构建和调试又重新回到keil mdk,发挥各自的优势。

之前写过一篇使用EIDE的插件,在vs code中导入keil mdk的项目进行开发,在vs code中调用arm cc进行项目的构建。

poYBAGL5uweAISNDAADQXrG_zq4409.png

EIDE在VSCODE中的构建时间

整体的构建时间为 30秒 ,可以接受,然后还能充分发挥vs code在代码编辑上的优势,感兴趣的可以试一下。

总结

今天的介绍的挺简单,主要是在keil mdk下开发,构建项目时会产生.CRF文件,从而使构建速度大大降低,从而影响开发效率。

具体的解决办法是避免生成.CRF文件,但是会影响整体函数原型和声明以及宏定义的跳转,可以通过全文搜索,或者借助其他编辑器作为辅助手段来解决。


关键字:Keil  编译  速度 引用地址:怎样去解决Keil编译的速度越来越慢的问题呢

上一篇:独立看门狗的一点经验
下一篇:如何结合CubeMx与MC Workbench生成workbench中所未包含芯片的控制程序

推荐阅读最新更新时间:2024-11-17 10:28

如何编译文件得到的bootloader的.hex文件(例如:atmega328p)
一、打开Arduino ide的文件存放位置,本人是将其放在D盘的Arduino中 在D:Arduinoarduinohardwarearduinoavrbootloadersoptiboot文件中 你会看到有omake,omake.bat,Makefile,以及.h,.c,.hex等文件。而其中的optiboot_atmega328.hex文件就是atmega328p的bootloader,其就是 arduino ide 中为arduino uno板子烧录的bootloader(如何烧录引导程序bootloader,请问度娘) 二、准备工作:移除optiboot_atmega328.hex文件(移除前做好备份)
[单片机]
如何<font color='red'>编译</font>文件得到的bootloader的.hex文件(例如:atmega328p)
如何建立Linux下的ARM交叉编译环境
在进行嵌入式开发之前,首先要建立一个交叉编译环境,这是一套编译器、连接器和libc库等组成的开发环境。文章通过一个具体的例子说明了这些嵌入式交叉编译开发工具的制作过程。 随着消费类电子产品的大量开发和应用和Linux操作系统的不断健壮和强大,嵌入式系统越来越多的进入人们的生活之中,应用范围越来越广。 在裁减和定制Linux,运用于你的嵌入式系统之前,由于一般嵌入式开发系统存储大小有限,通常你都要在你的强大的pc机上建立一个用于目标机的交叉编译环境。这是一个由编译器、连接器和解释器组成的综合开发环境。交叉编译工具主要由 binutils、gcc 和 glibc 几个部分组成。有时出于减小 libc 库大小的考虑,你也可以用别
[单片机]
奔驰推出音乐互动驾驶功能:根据行车速度改变音乐
1 月 11 日消息,在近期举行的 CES 2024 活动上,奔驰带来了全新车内娱乐功能 MBUX Sound Drive。 据介绍,奔驰联手美国音乐人 will.i.am(威廉姆・亚当斯),合作推出了一套能把音乐和驾驶动作结合互动的全新功能。目前,will.i.am (威廉姆・亚当斯)设计了总计 16 首不同曲风和心情的音乐,利用传感器和先进软件辨识车辆驾驶动态,并将其转换成不同音乐,预计于 2024 年中正式推出。 据IT之家此前报道,奔驰还在本次展会带来全新 MBUX 虚拟助理,官方称新系统是梅赛德斯-奔驰迄今最“人性化”的系统,搭载了生成式人工智能和主动式智能技术。奔驰表示,MBUX 虚拟助理可以根据用户的习惯和场
[汽车电子]
2、PIC新建工程并编译烧录
1、说明 目前正在学习使用的开发板芯片为PICMX460F512L,512KB Flash,128KB RAM,具体可参看PIC官方介绍https://www.microchip.com/wwwproducts/en/en534177或通过DataSheet了解芯片资源 2、创建工程 1、运行集成开发环境,并点击File- New Project,创建工程 2、在弹出的对话框中依次选择,Microchip Embedded- Standalone Project,并点击Next 3、选择与开发版芯片相匹配的设置,PIC32系列中的PIC32MX460F512L,点击Next 4、选择编译器,选择与芯片相匹配的编译器
[单片机]
2、PIC新建工程并<font color='red'>编译</font>烧录
[单片机框架][drivers层][g_sensor][adxl34x] 加速度传感器的使用
ADXL345是一款低功耗,三轴MEMS加速度计模块,具有I2C和SPI接口。这些模块的Adafruit Breakout板载板载3.3v电压调节和电平转换功能,使其易于与Arduino等5v微控制器接口。 ADXL345具有4个灵敏度范围,从+/- 2G到+/- 16G。它支持10Hz到3200Hz的输出数据速率。 工作原理: MEMS-微型机电系统传感器由硅晶片上的微机械结构组成。该结构由多晶硅弹簧悬挂,当在X,Y和/或Z轴上受到加速度时,它可以在任何方向上平滑偏转。挠曲会导致固定板和连接到悬挂结构的板之间的电容发生变化。每个轴上的电容变化都会转换为与该轴上的加速度成比例的输出电压。 I2C接线: ADXL3
[单片机]
[单片机框架][drivers层][g_sensor][adxl34x] 加<font color='red'>速度</font>传感器的使用
三点助你了解TI针对工业应用的速度最快、分辨率最高的芯片
对3D打印和直接成像平版印刷术等工业应用中的空间光调制应用来说,速度总是最重要的。原因很简单:开发人员创造产品的速度越快,这些产品成功上市的时间就越快。 这也是我们开发全新DLP9000X TI推出的最快、分辨率最高的芯片组的原因。但对于开发人员来说,这意味着什么?以下三点凸显了该芯片组的优势所在: 快 无止境。 借助每秒超过60Gb的数据速率支持,由DLP9000X数字微镜器件 (DMD) 和新近推出的DLPC910控制芯片组成的DLP9000X提供相较TI DLP 产品库中的其它芯片组5倍以上的总曝光速度。它还提供针对实时、连续、高位深图形的出色数据加载速度,从而带来细节图像。 微镜数量决定
[工业控制]
电动自行车速度与里程表的设计方案1
本文介绍的速度与里程表设计以单片机和光电传感器为核心。传感器将不同车速转变成的不同频率的脉冲信号输入到单片机进行控制与计算,再采用LED模块进行显示,使得电动自行车的速度与里程数据能直观的显示给使用者。   系统概述   本系统由信号预处理电路、单片机AT89C2051、系统化LED显示模块、串口数据存储电路和系统软件组成。其中信号预处理电路包含信号放大、波形变换和波形整形。对待测信号进行放大的目的是降低对待测信号的幅度要求;波形变换和波形整形电路则用来将放大的信号转换成可与单片机相连的TTL信号;通过单片机的设置可使内部定时器T1对脉冲输入引脚T0进行控制,这样能精确地算出加到T0引脚的单位时间内检测到的脉冲数;设计中速
[模拟电子]
关于stm32f1ox.h头文件启动代码与编译器里的宏定义
今天调试stm32f107vc发现他的外部时钟竟是25M,和之前的stm32f103rbt6的8M晶振有所区别。 在此总结一下自己的发现。 stm32f107vc属于互联性器件,他的启动文件应该是.cl。对于启动文件有ji个, .ld .md .hd .cl .xl rbt6选用的是md 可以在keil c++ 宏定义那边说明STM32F10X_CL, 或者在stm32f10x。h中找到 #if !defined (STM32F10X_LD) && !defined (STM32F10X_LD_VL) && !defined (STM32F10X_MD) && !defined (STM32F10X_MD_V
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved