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

news2024/11/28 7:41:21

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


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

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


视频版:

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

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


【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重定向串口没法用了,必须用他们官方的重定向方式解决。

IAR9.X printf串口底层重定向方法,否则提示Linker Error: "no definition for __write" - 开发环境 - 硬汉嵌入式论坛 - Powered by Discuz!

 


【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库的版本迭代

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/628722.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

侧信道攻击:SPA / DPA

参考资料:Cryptographic Engineering, by Cetin Kaya Ko, Editor Springer. 文章目录 Side-Channel AnalysisTiming AnalysisSample Power AnalysisDifferential Power Analysis其他攻击 对抗方法 Side-Channel Analysis 对于密码算法的攻击手段,往往是…

【LoRaWAN】单播与组播multicast调试记录

本文主要记录 【LoRaWAN】单播与组播multicast调试过程的问题 2023.06.09 📋 个人简介 💖 作者简介:大家好,我是喜欢记录零碎知识点的小菜鸟。😎📝 个人主页:[欢迎访问我的 Ethernet_Comm 博客…

甘孜州文化旅游产品市场营销策略研究_kaic

甘孜州文化旅游产品市场营销策略研究 摘要: 近年来,随着文化旅游的兴起,越来越多的旅游者渴望精神层面的满足,获得新奇的文化体验,而我国文化旅游仍处于单层次的观赏旅游。本文研究背景包括对旅游行业的背景介绍&#…

【HTML】form标签

<form> 标签用于创建 HTML 表单&#xff0c;它是用于收集用户输入的重要元素。表单可以包含各种输入字段、按钮和其他交互元素&#xff0c;用于向服务器发送用户输入数据。 下面是一个简单的 <form> 标签的示例&#xff1a; <form action"/submit-form&q…

Spring高级装配--条件化的bean

目录 条件化创建bean的例子 使用 解析 条件化创建bean的例子 希望一个或多个bean只有在应用的类路径下包含特定的库时创建希望某个bean只有当另外某个特定的bean也声明之后才会创建要求某个特定的环境变量设置之后&#xff0c;才会创建某个bean在Spring 4之前&#xff0c;很…

【乐观锁与悲观锁】—— 每天一点小知识

&#x1f4a7; 乐观锁与悲观锁 \color{#FF1493}{乐观锁与悲观锁} 乐观锁与悲观锁&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390; &#x1f433; 《数据结构与算法》专栏的文章图文并茂&…

2023-06-09:什么是Redis事务?原理是什么?

2023-06-09&#xff1a;什么是Redis事务&#xff1f;原理是什么&#xff1f; 答案2023-06-09&#xff1a; Redis中的事务是以一组命令的形式出现的&#xff0c;这些命令被认为是最小的执行单位。事务可以保证在一个单独独立的隔离操作中执行所有命令&#xff0c;而且所有命令…

linuxOPS基础_linux ACL访问控制

问题&#xff1a;我们学过的所有者身份包含哪些&#xff1f; 答案:ugo,属主&#xff0c;属组&#xff0c;其他。 问题&#xff1a;我们学过的文件权限包含哪些&#xff1f; 答案&#xff1a;rwx&#xff0c;读写执行&#xff0c;特殊s,t ​ ACL&#xff0c;是 Access Contro…

java变量

基本数据类型介绍 基本的数据类型: 整数类型&#xff1a;byte、short、int、long 定义long类型的变量&#xff0c;赋值时需要以"l"或"L"作为后缀。 Java程序中变量通常声明为int型&#xff0c;除非不足以表示较大的数&#xff0c;才使用long。 Java的整…

移动开发行业,就业及毕业,再到无业,夜夜无眠~

近期听得最多的一个消息就是&#xff1a;“今年太不好找工作了” 这是粉丝朋友发来的感叹&#xff0c;三个星期内没有找到工作&#xff0c;在我朋友圈中算短的了&#xff0c;还有不少朋友已经失业快半年了&#xff0c;情况都和这个类似。 是移动互联网市场变了吗&#xff1f; …

字符串是否相等案例s1==s3?

下列代码的运行结果是&#xff1f; public class test { public static void main(String[] args) { String s1 "abc"; String s2 "ab"; String s3 s2 "c"; System.out.println(s1 s3); } } /** C…

【linux】信号的保存和递达处理

上节我们了解到了预备&#xff08;信号是什么&#xff0c;信号的基础知识&#xff09;再到信号的产生&#xff08;四种方式&#xff09;。今天我们了解信号的保存。信号产生&#xff0c;进程不一定立马就去处理&#xff0c;而是等合适的时间去处理&#xff0c;那么在这段时间内…

[Java基础]面向对象

目录 1、对象和类 2、类之间的关系 3、引用 4、对象的创建和使用 5、构造函数/构造方法 6、内存解析 在这篇文章中&#xff0c;我们将学习面向对象的思想&#xff0c;并学习如何使用面向对象思想编程。在学习面向对象编程之前&#xff0c;我们先了解一下编程语言的发展&a…

Win安装Node.js Npm

1、在使用之前&#xff0c;先类掌握3个东西&#xff0c;明白它们是用来干什么的&#xff1a; npm: nodejs 下的包管理器。 webpack: 它主要用途是通过CommonJS 的语法把所有浏览器端需要发布的静态资源作相应的准备&#xff0c;比如资源的合并和打包。 vue-cli: 用户生成Vue工…

HNU-操作系统OS-作业4(37-40章)

OS_homework_4 这份文件是OS_homework_4 by计科2102 梅炳寅 202108010206 文档设置了目录,可以通过目录快速跳转至答案部分。 第37章 运行程序wolf/OS-homework/file-disks/disk.py 解释一些参数 -G可以查看可视化内容-c可以计算结果。-a 提供待访问的数组-S 将寻道速率改…

深度学习训练营之优化器对比

深度学习训练营之优化器对比 原文链接环境介绍前置工作设置GPU 数据处理导入数据数据集处理数据集可视化 模型构造模型训练结果可视化 原文链接 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章&#xff1a;365天深度学习训练营…

deque(简单介绍一下)

deque的基本情况&#xff1a; 简单的来说deque是一个双头队列。且两边的尺寸可以动态收缩或者扩张。 其底层实现相当复杂&#xff0c;而且效率并不高。大多数时候都不会使用。 deque诞生的原因是vector和list的优缺点不可分割。 正好复习一下vector和list的优缺点。 vector的…

手机抓包fiddler配置及使用教程

本文基于Fiddler4讲解基本使用 fiddler抓包原理 注意&#xff1a;Fiddler 是以代理web服务器的形式工作的&#xff0c;它使用代理地址:127.0.0.1&#xff0c;端口:8888。当Fiddler退出的时候它会自动注销&#xff0c;这样就不会影响别的 程序。不过如果Fiddler非正常退出&…

学校热水供应系统方案

学校热水供应系统是现代化校园建设的重要组成部分。一套高效、可靠、安全、环保的热水供应系统&#xff0c;不仅能够满足学生、教职工的日常生活需求&#xff0c;也能提高学校形象和竞争力。 在设计学校热水供应系统方案时&#xff0c;需要考虑以下几个方面&#xff1a; 一、热…

【计算机网络复习之路】运输层(谢希仁第八版)万字详解 主打基础

运输层是OSI七层模型中最重要最关键的一层&#xff0c;是唯一负责总体数据传输和控制的一层。运输层要达到两个主要目的&#xff1a;第一&#xff0c;提供可靠的端到端的通信&#xff08;“端到端的通信” 是应用进程之间的通信&#xff09;&#xff1b;第二&#xff0c;向会话…