硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2569|回复: 11
收起左侧

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

  [复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
发表于 2023-6-9 04:33:47 | 显示全部楼层 |阅读模式
版本迭代是嵌入式开发永久的痛,这么多年不知道浪费了多少时间在版本迭代上。

部分系统组件还好点,有个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的兼容包。初期推广的时候,很多人不知道这个兼容包。

下载.png

将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警告类型

下载 (1).png


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

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

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

下载 (2).png


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

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




6、今年年底要发布MDK6

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





【IAR】

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

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

下载 (3).png

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

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

下载 (4).png


[GCC]

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

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

下载 (5).png


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



下载 (6).png

[芯片厂家SDK]

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

以STM32为例进行说明

(1)标准库到HAL和LL库

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

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

(2)HAL库的版本迭代

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




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

















评分

参与人数 1金币 +4 收起 理由
mhlyjay + 4

查看全部评分

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
111540
QQ
 楼主| 发表于 2023-6-9 04:35:10 | 显示全部楼层
更新完成。
回复

使用道具 举报

2

主题

18

回帖

24

积分

新手上路

积分
24
发表于 2023-6-9 06:23:32 | 显示全部楼层
辛苦了!身体更重要。
回复

使用道具 举报

0

主题

8

回帖

8

积分

新手上路

积分
8
发表于 2023-6-9 08:33:29 | 显示全部楼层
硬汉哥多更新点这方面的东西,看着好玩,也很有用
回复

使用道具 举报

3

主题

82

回帖

91

积分

初级会员

积分
91
发表于 2023-6-9 09:36:43 | 显示全部楼层
寄存器应该不存在这个问题。但寄存器的开发难度相比库开发高,开发时间也需要的更多。

鱼和熊掌
回复

使用道具 举报

2

主题

26

回帖

32

积分

新手上路

积分
32
发表于 2023-6-9 10:30:07 | 显示全部楼层
使用寄存器吧,随它SDK怎么改。
遵从了CMSIS标准,迁移也不会有多大改变。
回复

使用道具 举报

0

主题

13

回帖

13

积分

新手上路

积分
13
发表于 2023-6-9 11:07:48 | 显示全部楼层
这种没办法,这是C和C++语言特性,最简单不行直接换个开发语言,"人生苦短,我用Python";完善的包管理体系,不行还能弄个虚拟环境一套直接整个环境打包。折腾累了就转rust吧,有方便统一的包管理系统和安全机制保证的语言,还是可靠些,现在嵌入式rust也发展很快。

说起来,看python的虚拟环境这个解决方案还是挺好的,直接连同代码和依赖环境打包一起又不影响系统,然而C和C++这堆东西装出来的windows虚拟机巨大无比根本不便于下载和存储。

按依赖环境与代码一起打包发布,又轻量级这个思路走,目前最好用的方案是用docker打包,弄出来很轻量级,一套linux可用的gcc+cmake+ninja+clangd+openocd还有vscode各种插件包或者jlink啥的(目前iar也出了linux编译环境,keil的AC6编译器也有linux版本,只是都貌似没破解版本),整体打包下来也就几百M量级,现在的网速和国内docker镜像源docker pull下来这种轻量级虚拟环境也非常快。像开源的基于stm32f4的电机驱动项目Odrive就是整体docker环境打包的,具体咋用docker 打包可以参考这个项目的docker 配置。

整体打包好了,其他人一键docker下载下来运行,环境和各种库版本直接全套复制好了,配合本地vscode的docker插件直接在docker 容器里面使用容器打包好的vscode插件包开发、调试好了,或者打包直接把vscode和各种插件打包进去,docker开了直接用浏览器开发调试也行了。
回复

使用道具 举报

4

主题

24

回帖

36

积分

新手上路

积分
36
发表于 2023-6-9 11:25:13 | 显示全部楼层
说的太对了,搞开发搞久了就感觉mcu开发有个大坑,天天学习新知识,不学不行呀,厂商多,而且都是各自为战,一人一套东西。另外感觉厂商的心思,mcu主频越来越高,系统越来越复杂,soc资源越来越多,为了降低开发难度都是封装各种库,就是为了让更多人能快速使用,不必关注底层实现的细节专注自己需求开发,而且库封装的越完善,开发人员离底层越远,关键是代码很少没有bug的,厂商也不例外,库出了问题,查起来更不方便,头绪难找。感觉一个东西前期门坎越低,开发越容易,后期出了问题,越要花费时间、精力去解决。
回复

使用道具 举报

2

主题

26

回帖

32

积分

新手上路

积分
32
发表于 2023-6-9 13:48:21 | 显示全部楼层
1.像HAL库不同版本有时候不止删结构体成员,甚至还删里面的一些函数
2.CubeMX也是不够人性化,我记得V5.x的版本打开SPI还默认选8bit,后面不知道从V6.x开始,你勾选SPI他默认4bit??!稍微不注意就被坑了
3.像VSCode,你打开文件夹还能直接右键查看函数定义,MDK不知道为啥非要花那么久,就算是AC6他在后台加载的时间也还是很久
回复

使用道具 举报

0

主题

25

回帖

25

积分

新手上路

积分
25
发表于 2023-6-14 10:16:52 | 显示全部楼层
AC5和6的确蛋疼
回复

使用道具 举报

12

主题

52

回帖

88

积分

初级会员

积分
88
发表于 2023-9-5 15:29:50 | 显示全部楼层
就是蛋痛,名义上看着方便了,结果是需要不断增加学习成本和修改成本
旧项目定格库的版本来应对
新项目又要学习一遍
回复

使用道具 举报

75

主题

1257

回帖

1482

积分

至尊会员

积分
1482
发表于 2023-9-7 09:28:08 | 显示全部楼层
flying1104 发表于 2023-9-5 15:29
就是蛋痛,名义上看着方便了,结果是需要不断增加学习成本和修改成本
旧项目定格库的版本来应对
新项目又 ...

有点类似强制你使用新版windows系统一样。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-11-1 07:41 , Processed in 0.310938 second(s), 32 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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