同样的单片机代码,编译后的hex为啥会变?

strongerHuang 2025-07-28 12:14

关注+星标公众,不错过精彩内容

作者 | strongerHuang

微信公众号 | strongerHuang


同一个单片机项目,Keil代码工程(源码不变),生成的(hex)程序却变了?

这个问题,之前有好几个朋友都问题,包括很早以前,我也遇到过。

对于很多新手来说,肯定会纳闷,明明代码没变,为啥结果不一样了呢?

资讯配图

这个问题,很大一部分原因,是由编译器版本不同(Keil版本)导致的,当然,还与优化有关。

不同版本Keil,编译器可能不同

为了验证这个问题,我安装了以前老版本的Keil V5.28和V5.36,默认自带的编译器AC(Arm Compiler),不管是AC5,还是AC6版本都不一样。


Keil V5.28默认自带编译器为AC5.06-6和AC6.12:

资讯配图

Keil V5.36默认自带编译器为AC5.06-7AC6.16:

资讯配图

而这个工程源代码没变、优化选项(配置)没变,编译出来的Hex文件却不一样:
资讯配图

如何解决这种问题?

1.使用相同开发环境

这里的开发环境主要指Keil版本,比如:以前用Keil V5.14,现在也继续使用V5.14版本。


当然,如果条件允许,操作系统(Windows)也最好一样,有可能会因为操作系统导致编译结果一样。


上个月才给大家分享过一篇文章:软件工具没事别瞎升级

资讯配图

2.使用相同编译器

当然,如果不能做到上面说的软件版本以及系统一样(有的人就喜欢新版本的软件),可以使用相同版本编译器来尽量保持一致。


不管是这里说的Keil Arm Compiler 编译器,还是GCC等工具,道理都是一样。


Keil的编译器可以修改,可能很多小伙伴还不知道,这里就给大家说一下。


更换Keil编译器的方法比较简单,到Keil(Arm)官方下载你需要版本的编译器,自己安装一下即可。


方法比较简单,这里就不讲述了,具体可以参看我之前分享的文章:手把手教你升级Keil MDK的ARM编译器


本文就分享到这里,大家如果还有遇到类似的奇奇怪怪的问题,欢迎留言讨论。

------------ END ------------

资讯配图
●专栏《嵌入式工具
●专栏《嵌入式开发》
●专栏《Keil教程》
●嵌入式专栏精选教程

关注公众号回复“加群”按规则加入技术交流群,回复“1024”查看更多内容。


点击“阅读原文”查看更多分享。

声明:内容取材于网络,仅代表作者观点,如有内容违规问题,请联系处理。 
单片机
more
单片机跑RTOS的优势!
单片机开发为啥很少用C++?
单片机电池供电产品设计要点
单片机软件为啥要上架构?
如何将单片机变量“钉”在Standby RAM中?
单片机自定义printf函数的几种写法
单片机代码中while(1)和for(;;)的区别
基于单片机定时器+DMA实现CPU低负载、高精度数字波形输出!
6个月从零掌握单片机开发!软硬件全流程实战,配套开发板+项目驱动教学!
单片机项目如何添加版本信息?
Copyright © 2025 成都科技区角科技有限公司
蜀ICP备2025143415号-1
  
川公网安备51015602001305号