首页 > 其他分享 >浅谈这些年如何被MDK, IAR, GCC和厂家SDK版本兼容性“蹂躏”, 一代版本一代坑

浅谈这些年如何被MDK, IAR, GCC和厂家SDK版本兼容性“蹂躏”, 一代版本一代坑

时间:2023-06-09 15:34:45浏览次数:54  
标签:一代 浅谈 MDK 编译 AC5 MDK5 MDK4 版本

原创文章,转载请注明出处:https://www.armbbs.cn/forum.php?mod=viewthread&tid=119562


 

版本迭代是嵌入式开发永久的痛,这么多年不知道浪费了多少时间在版本迭代上。

部分系统组件还好点,有个LTS长期支持版,而厂家SDK和IDE环境可谓惨不忍睹,一代版本一代坑。


视频版:

https://www.bilibili.com/video/BV1qu4y1d7wV


【MDK】

刚开始接触M内核芯片的时候就是用的这款IDE,最早有MDK2(主要是51使用), MDK3,  进入MDK4后,MDK4.54算是一个经典版本,最早搞M内核那波人,很多人都是用的这个版本上手的。

迭代到MDK4.74后,开启了MDK5时代,刚开始的MDK5.0X和MDK5.1X就是填坑,所以用MDK4转载到MDK5的人还不是很多。


1、进入到MDK5.2X后,开始第1个分水岭。

芯片厂家新出的新品没法再用MDK4,必须转战到MDK5了。KEIL为了缓解用户的对MDK4的依赖,推出MDK5后,仅接着搞了个MDK5对MDK4的兼容包。初期推广的时候,很多人不知道这个兼容包。

将MDK4使用MDK5强行打开后,各种各样的问题,被搞得头都大了。把所有的例子都用MDK5重新创建下,有点不现实,例子太多了。后来不断摸索,搞了个骚操作,直接修改MDK4工程后缀 uvproj 改成 MDK5的后缀 uvprojx即可,大部分例子都可以这么方便的使用MDK5打开。

2、第2个分水岭,MDK5编译HAL库

MDK5 AC5编译HAL库带brower info堪称史诗级灾难,编译10来分钟都是小意思。编译慢就算了,电脑CPU都飙到100%了,电脑什么都干不了,只能干等着。

为了缓解用户的焦虑,开始推进MDK AC6,刚开始的时候还挺开心,带browser info编译速度快了很多,当编译完毕后,发现go to def不能用,研究了下,原来是把browser info生成搞到了后台。实际总时间和AC5区别不大。


3、第3分水岭,AC5转AC6

这个痛点,估计近几年无法得到解决,因为市面上大量开源工程依然是MDK AC5创建的,更重要的是工程中一些开源组件不支持MDK AC6,这就给转战MDK AC6带来很大难度。虽然KEIL后来出了AC5转AC6文档,但杯水车薪,复杂工程的修改难度太大了。

既然这么麻烦,为什么还要转战AC6,因为AC5从MDK5.37开始正式推出历史舞台,后面出的M23,M33,M55,M85等芯片也没法用AC5了。

现在的大部分工程依然要使用AC5 LINK警告类型


4、第4个分水岭,MDK RTE创建工程

早期的芯片还支持MDK RTE经典创建方式,这个方式非常好用,也非常给力,这个值得肯定。

后来新出的芯片,同样是灾难级表现,以STM32H7为例,不再支持经典方式了,RTE必须配合STM32CubeMX一起使用,  而且对应的工程必须使用指定MDK版本,CMSIS版本和STM32H7软件包版本。


5、第5个分水岭,MDK软件包下载问题

本来官网下载就奇卡无比,最近还搞了骚操作,让本就难用的下载问题“雪上加霜”,软件包的下载变得超级难用


6、今年年底要发布MDK6

这个必将又是一顿疯狂操作。


【IAR】

IAR最早用的是IAR6.3,之后陆续使用了7.x ,8.x和9.x

IAR早期版本最大的缺点就是毫无兼容性可言,你的工程是版本创建的,就必须使用那个版本打开。到后来的IAR8.X和9.X好了很多,可以强制转换之前老版本创建的程序了。

除了兼容性问题,新出的IAR9.X带来了一个坑,之前的fputc和fgetc重定向串口没法用了,必须用他们官方的重定向方式解决。

https://www.armbbs.cn/forum.php?mod=viewthread&tid=109542


[GCC]

基于GCC创建的IDE环境,同样是各种兼容性问题,以Embedded Studio为例,之前用V5.X创建的工程,现在使用V7,X就无法正常编译,直接报错。

这找谁说理去,网友们一打开,无法正常编译,这用户体验不太舒服。

基于eclipse/vscode/clion + gcc + openocd的玩法,我用的少,没有研究过版本兼容问题。


[芯片厂家SDK]

芯片厂家的SDK也是各种坑,各种折腾用户。

以STM32为例进行说明

(1)标准库到HAL和LL库

本来早期的F1,F2,F3,F4等系列,标准库玩法已经很成熟了,时间关键的地方再倒腾下寄存器方式加速实现,大部分项目也够用。但后面为了配合STM32CubeMX图形化开发工具,不得不推出HAL和LL库。

对于用户做产品还好点,但像我们这种做开发板的,就是灾难,不得不做HAL库和标准库两个版本。甚至必要的情况下还得提供全部使用STM32CubeMX创建的工程。

(2)HAL库的版本迭代

有时候版本迭代不考虑兼容性,同样让人头疼,以串口代码为例,后面的升级竟然直接来个删除结构体成员的骚操作:

针对各种兼容问题,大家有什么好的思路来解决这些问题,欢迎分享,个人用倒是没什么,但是团队之间或者网上分享给别,兼容性就不得不考虑了。

标签:一代,浅谈,MDK,编译,AC5,MDK5,MDK4,版本
From: https://www.cnblogs.com/armfly/p/17469330.html

相关文章

  • 华为云新一代分布式数据库GaussDB,给世界一个更优选择
    摘要:与伙伴一起,共建繁荣开放的GaussDB数据库新生态。本文分享自华为云社区《华为云新一代分布式数据库GaussDB,给世界一个更优选择》,作者:华为云头条。6月7日,在华为全球智慧金融峰会2023上,华为常务董事、华为云CEO张平安以“一切皆服务,做好金融数字化云底座和使能器”为主题发表演......
  • 华为认证 | HCIE-Big Data-Data Mining 认证即将升级新版本!
    华为认证HCIE-BigData-DataMiningV3.0(中文版)预计将于2023年6月30日正式对外发布。为了帮助您做好学习、培训和考试计划,现进行预发布通知,请您关注。01发布概述基于“平台+生态”战略,围绕“云-管-端”协同的新ICT技术架构,华为公司打造了覆盖ICT领域的认证体系。包含ICT基础设施认......
  • 关于版本更新的索引忘记添加
    版本更新之后,数据库表初始创建的脚本,忘记再脚本中给数据库表创建索引, 导致检材数据导入很慢,原先几十分钟的数据现在要7个小时,已更正。(当然不是我的锅,是同事出现的问题,我记录一下哈)......
  • 20.sw工程图导出cad版本,设置导出比例1:1
    1.选择系统选项 2.选择导出、选择DWG、选择激活......
  • 关于redis在我们数据平台升级版本时出现的问题
    redis启动原来我们是用写死的代码后来统一使用了启动脚本这就导致了redis存储的问题 我们知道,redis在默认情况(appendonlyno)下是使用快照存储,然而在写死的代码中,快照存储的位置是rootPath(我们的数据产品的根路径)大概更新了三个版本之后,bat脚本启动的位置是根路径\redis路径......
  • [浅谈] 欧拉函数
    definition\(\varphi(n)\)表示不超过\(n\)且与\(n\)互质的正整数的个数。欧拉函数是一个数论函数(定义域为正整数)和积性函数(对于互质的正整数\(a,b\)满足\(f(a,b)=f(a)f(b)\))积性函数的性质:\(n=\prodp_i^{a_i}(p_i为质数)\)\(f(n)=\prodf(p_i^{a_i})\)。theorem......
  • nvm控制node版本
    nvm控制node版本​ ubuntu中使用yarn下载插件报错,@vitejs/[email protected]:Theengine"node"isincompatiblewiththismodule.Expectedversion"^14.18.0||>=16.0.0".Got"14.16.0"解决方案,nvm(NodeVersionManager)切换node版本:#查看所有node版本......
  • 揭秘新一代云数仓技术架构与最佳实践
    从传统数仓到湖仓一体,历经三十多年发展,技术的浪潮快速迭代,以云原生数仓为中心的现代数据栈时代已然到来。背后的核心的原因在于,企业正在加速走向数字化、智能化,对数据的应用也提出了全新要求,特别是对数据的实时分析、实时部署需求更加的强烈,而云数据仓库为用户实现云原生、智能运维......
  • Google colab 更改Tensorflow深度学习框架版本
    Googlecolab默认导入的tensorflow版本是2.0想,想更改tensorflow版本为1.x则需要加入%tensorflow_version1.ximporttensorflowastftf.__version__之后要进行colab的重启,即可完成版本改装,由于colab没有terminal,所以只能这么修改。欢迎登陆官网(附https://tensorflow.google.cn/)......
  • 同一个服务需要使用同一个依赖(jar)的不同版本的解决方案(类加载器方案)
    当使用类加载器隔离来处理同一依赖的不同版本时,可以创建自定义的类加载器来加载各自的版本。以下是一个简单的示例,演示如何使用类加载器隔离不同版本的依赖://自定义类加载器publicclassCustomClassLoaderextendsClassLoader{privateStringjarPath;publicCus......