嵌入式技术之IAP,自从有了它老板再也不担心我的代码了!(上)

news2024/11/16 7:35:31

1.惨痛的教训

那是一个严寒的冬日,客户在现场使用我们公司新研发的设备,设备最初设计可以允许最多连接20个温湿度传感器,但是由于现场空间非常大,客户要求连接30个温湿度传感器。这个需求修改非常简单,只用修改程序中的一个宏定义就可以了。因为涉及到需要修改程序和更新程序固件,我们要求客户把设备寄回我们公司升级设备的固件,然后再把设备给客户寄到测试现场。但是客户因为项目进度计划紧迫,认为这种方案耽误的时间长,不同意这种处理方案!最终我们公司的研发和生产加班了6个小时,直到晚上12点才重新好一套设备,然后让业务人员连夜开车将新设备送给客户。因为一个小小的修改需求,浪费了大量的人力物力,真是沉重的教训!
在这里插入图片描述
有了这次沉重的教训,我毫不犹豫的给设备程序增加了IAP功能,自从设备有了IAP功能,我们可以根据需求随时更新现场设备的固件程序,从此以后就可以实现放飞自我了!
在这里插入图片描述

2.IAP是什么

IAP(In-Application Programming)指的是在应用编程,就是MCU程序固件在运行过程中可以获取新代码数据并对Flash部分区域进行烧写,用新固件程序覆盖旧程序固件,实现程序固件升级。IAP的目的是:通过预留的通信口对产品的程序固件进行更新升级。

为什么要使用IAP功能?
IAP功能会给我们带来哪些好处呢?

在这里插入图片描述
IAP可以为我们带来以下两个好处。
1、IAP可以实现免拆机壳升级产品程序固件。
通常情况下程序下载需要使用专用的下载口(如JTAG口),然而这个接口通常情况下不会预留在设备外部,如果需要更新设备的程序固件,就需要拆开设备外壳,使用下载器连接到设备下载口,下载程序到设备。
在这里插入图片描述
例如现场有100个设备,由于客户提出新的需求,需要给现场的设备升级程序固件。工程师来到现场,首先需要把100个设备的外壳打开,然后使用下载器连接到下载口升级程序固件,然后在将100个设备的外壳安装好。
拆卸和安装设备外壳是一个非常繁琐的过程,有时候甚至会由于意外操作损坏设备(如螺丝滑丝或电路板短路)!如果设备有IAP功能,我们可以使用设备预留的串口,USB口或者网口升级设备程序固件。不需要拆装设备外壳就可以实现程序固件更新,省时省力,也减小出问题的概率。
在这里插入图片描述
2、IAP可以通过网络实现对设备进行远程升级。
如果设备有3G/4G、WIFI、NB等网络功能,IAP可以利用这些网络功能实现远程设备升级。例如设备拥有IOT-NB功能,我们可以利用云端的服务器将数据通过NB网络下发给设备,实现设备的远程固件升级功能,无需外派工程师到现场,省时省力高效!
在这里插入图片描述

3.IAP工作原理

IAP的核心功能是:更新程序。那么IAP是如何实现更新程序功能,IAP的工作原理是什么呢?
在这里插入图片描述
我们先讲一个生活中的例子:金刚石刀头的制造过程。锯片的刀头处通常会焊接一个高强度,耐磨性好的金刚石刀头,这个刀头是金刚石粉末在热压机设备中经过高温高压制作而成。
在这里插入图片描述
热压机设备制造过程中的温度和压力的工艺决定决定金刚石性能品质,例如一个简单的工艺是:启动时温度和压力缓慢增加,一定时间后到达高温高压状态,随后保持高温高压一段时间,最后缓慢减小温度和压力,这个生产过程称为工艺曲线控制。
在这里插入图片描述
假设客户需要锯大理石的锯片,需要高强度的锯片,因此需要修改金刚石刀头的工艺曲线。首先生产主任拿来曲线工艺清单,操作工人接收曲线工艺清单,重新设置工艺曲线,然后重启设备,就这样完成了工艺曲线的更新。在整个工艺曲线更新的过程中有三个重要部分:
1、设备当前运行的工艺曲线参数。
2、生产主任提供的新工艺曲线参数。
3、操作工人。

在这里插入图片描述
工艺曲线更新的过程中有三个重要动作:
1、下发,生产主任将新工艺传递给操作工人。
2、更换,生产工人删除旧的工艺曲线,输入新的工艺曲线。
3、重启,完成新工艺参数输入后重新启动机器,运行新的工艺曲线。

在这里插入图片描述
回到正题,在实现IAP功能时通常需要在设计固件程序时编写
两个项目代码

1、第一个项目代码不执行用户功能操作(产品功能),而是通过USB、USART或者网口接收数据(APP代码就是数据),并对第二部分代码进行更新,我们把这部分代码称为bootloader
2、第二个项目代码是真正的功能代码(实现产品功能),我们把这部分代码称为app(应用程序)。

bootloader和app这两个代码都同时烧录在Flash中(不同区域),当芯片上电后,bootloader代码首先开始运行,随后跳转并执行app代码,大致流程如下:
1、检查是否需要对app代码进行更新,如果有需要就执行app代码更新。
2、跳转到app代码。
3、运行app代码。
在这里插入图片描述
结合金刚石刀头这个实例,可以将IAP工作流程作如下对比:
1、bootloader相当于操作工。操作工可以接收新的工艺参数,更新工艺参数;bootloader可以接收新的程序固件,更新设备程序固件。
2、app就相当于设备中运行的工艺参数。
3、新的app就相当于新的工艺参数。
4、下发,对应外部设备将新app程序数据发送给bootloader。
5、更换,对应bootloader将接收到的appapp程序数据写入app程序对应的FLASH区域。
6、重启,对应bootloader完成app更新后,跳转并执行app代码。

在这里插入图片描述
根据IAP工作流程,可以将IAP功能分解成以下3部分功能:
1、数据交互,接收外部设备发送来的数据。
2、数据存储,将接收到的数据写入存储器。
3、程序跳转,跳转并执行APP。

IAP的以上3部分功能称为IAP三板斧,接下来我们看这三板斧具体完成哪些细节工作,以及我们如何实现这三板斧。
在这里插入图片描述

创作不易希望朋友们点赞,转发,评论,关注!
您的点赞,转发,评论,关注将是我持续更新的动力!
CSDN:https://blog.csdn.net/li_man_man_man
今日头条:https://www.toutiao.com/article/7149576260891443724

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

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

相关文章

帮公司面试了个要25K的测试,我问了他这些问题...

深耕IT行业多年,我们发现,对于一个程序员而言,能去到一线互联网公司,会给我们以后的发展带来多大的影响。 很多人想说,这个我也知道,但是进大厂实在是太难了,简历投出去基本石沉大海&#xff0…

spring security安全认证登录全流程分析

文章目录前言一、登录时序图二、配置与代码1.引入库2.代码文件参考文档前言 本文章主要从spring security安全认证登录内部调用流程来流程分析登录过程。 一、登录时序图 时序原图 二、配置与代码 1.引入库 pom.xml&#xff1a; <!-- Spring框架基本的核心工具 -->&…

截至到2022年12月12日,知网最新改进 YOLO 核心论文合集 | 22篇创新点速览

截至到2022年12月12日&#xff0c;知网最新改进YOLO核心论文合集 本篇博文仅供学习交流&#xff0c;不对文章质量进行评价&#xff0c;请尊重每一位同学的科研成果&#x1f91d;。 文章目录截至到2022年12月12日&#xff0c;知网最新改进YOLO核心论文合集引言&#x1f4a1;0. 什…

Vue.use()的用法详解

目录 &#x1f53d; 前言 &#x1f53d; 官方解释 &#x1f53d; Demo演示 &#x1f388; Object对象 &#x1f449; 创建项目 &#x1f449; 创建组件 &#x1f449; 使用组件 &#x1f388; function函数 &#x1f449; 创建函数 &#x1f449; 引入 &#x1f449…

机器人与视觉,基于坐标系的运动偏移

基于可移动坐标系的机器人坐标偏移 在生产过程中&#xff0c;当需要建造多个坐标系的时候&#xff0c;我们可以采用基于坐标系偏移&#xff0c;可以实现使用机器人坐标系直接完成多个坐标系的联动。 由于实现多个坐标系的联动情况&#xff0c;那么通常都会伴随着坐标系的移动和…

力扣1781. 子字符串的美丽值之和(cpp实现+解析)

文章目录1781.子字符串的美丽值之和完整代码1781.子字符串的美丽值之和 力扣传送门&#xff1a; https://leetcode.cn/problems/sum-of-beauty-of-all-substrings/description/ 题目描述&#xff1a; 一个字符串的 美丽值 定义为&#xff1a;出现频率最高字符与出现频率最低字…

CMake中add_compile_options/target_compile_options的使用

CMake中的add_compile_options命令用于向源文件的编译添加选项&#xff0c;其格式如下&#xff1a; add_compile_options(<option> ...) 将选项添加到COMPILE_OPTIONS目录属性。从当前目录及以下目录编译target时&#xff0c;将使用这些选项。 add_compile_option…

48-90-Scala-函数式编程基础特性等

48-Scala-函数式编程&#xff1a; 函数式编程 1、完全面向对象编程 2、函数式编程&#xff0c;万物皆函数&#xff0c;程序语句的集合&#xff0c;称为函数。类中的函数称之方法。函数无重载重写概念&#xff0c;方法可以。函数可以嵌套 3、函数的定义def test3(s:String):…

电子书资源:分享10个非常好用的免费书籍资源网站

❤️作者主页&#xff1a;IT技术分享社区 ❤️作者简介&#xff1a;大家好,我是IT技术分享社区的博主&#xff0c;从事C#、Java开发九年&#xff0c;对数据库、C#、Java、前端、运维、电脑技巧等经验丰富。 ❤️个人荣誉&#xff1a; 数据库领域优质创作者&#x1f3c6;&#x…

Qt扫盲-QCheckBox 理论总结

QCheckBox 理论总结1. 简述2. 分组3. 状态&信号4. 外观&快捷键1. 简述 QCheckBox是一个选项按钮&#xff0c;可以 选中 或 未选中。复选框通常用于表示应用程序中可以启用或禁用的功能&#xff0c;而不会影响其他功能。可以实现不同类型的行为。一般是很多个联用的。 …

Cookie、Session、Token比较

1 Cookie cookie 指的就是浏览器里面能永久存储的一种数据&#xff0c;仅仅是浏览器实现的一种数据存储功能。 cookie由服务器生成&#xff0c;发送给浏览器&#xff0c;浏览器把cookie以 key-value 形式保存到某个目录下的文本文件内&#xff0c;下一次请求同一网站时会把该…

基于适应度-距离平衡的人工生态系统优化算法解决瞬态稳定性约束最优潮流问题(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

Awaitility同步异步工具介绍与RocketMQ中实战

在编写测试用例的时候遇到有异步或者队列处理的时候经常会用到 Thread.sleep() 等待来进行测试。例如&#xff1a;DLedger 测试选举的过程。当DLedger Leader下线。此时DLedger会重新发起选举&#xff0c;这个选举的过程是需要一定时间。很多时候在测试代码中就会使用 Thread.s…

b站黑马的Vue4小时快速入门案例代码——计数器

目录 目标效果&#xff1a; 重点原理&#xff1a; 1.创建Vue实例的时候&#xff1a; 2.v-on——为元素绑定事件 3.v-text——【解析文本用】设置标签的文本值 v-text【简写】为{{}} 实现步骤&#xff1a; 代码部分&#xff1a; 1.计数器模板.html(全是重点&#xf…

m基于粒子群算法的分布式电源DG的优化配置

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 随着科技的发展&#xff0c;人民生活水平的不断提高&#xff0c;使得当今社会的发展对能源环保性和供电的可靠性的要求也不断提高。集中式供电系统由于污染大、可靠性差及操作难度大等缺陷越来越…

MySQL数据库基础知识7,查询的执行过程

目录一、拆分查询二、分解关联查询三、查询的执行过程四、优化器的一些优化手段1、重新定义关联表的顺序2、将外连接转化为内连接3、使用增加变换规则4、优化count()、max()、min()5、预估并转化为常量表达式6、覆盖索引扫描7、提前终止查询五、MySQL如何执行关联查询六、查询执…

【HTML期末学生大作业】 制作一个简单HTML宠物网页(HTML+CSS)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Linux 学习笔记 04 —— 文件管理和磁盘管理相关命(2) 详解 grep 命令

用法 less 参数 文件 常用用法 很实用的搜索功能。 向前搜索 / &#xff1a; 使用一个模式进行搜索&#xff0c;并定位到下一个匹配的文本 n &#xff1a; 向前查找下一个匹配的文本 N &#xff1a; 向后查找前一个匹配的文本 向后搜索 ? &#xff1a; 使用模式进行搜…

【C语言】程序环境和预编译

如若这一生注定磨难&#xff0c;自由与真我千金不换 文章目录一、程序的翻译环境和运行环境1.翻译环境&#xff08;编译&#xff08;预编译、编译、汇编&#xff09;链接&#xff09;2.运行环境&#xff08;程序入口main 到 程序终止&#xff09;二、预处理&#xff08;预编译…

SpringMVC(四)域对象共享数据(干货、超详细)

【环境说明】 SpringMVC项目中使用的是thymeleaf视图解析器 <!-- Spring和thymeleaf的整合--><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring5</artifactId><version>3.0.12.RELEASE</version>&l…