OTA升级时软件异常复位问题分析

news/2025/9/24 22:06:07/文章来源:https://www.cnblogs.com/jiangchang/p/19110072

背景:
最近半年陆陆续续压测OTA,OTA升级总有概率失败,一直未找到失败的根本原因。

实验:
最近的压测发现新板子升级没有问题,老板子压测会出现较多的失败。
失败时能看到34服务异常:
主节点:
10 10 0B 34 00 44 00 01
10 21 00 00 00 03 00 00
从节点:
10 03 7F 34 7F FF FF FF
分析:
擦除的时候出现异常,查询芯片手册发现芯片的最大次数为1000次,超过会有未预期的行为发生且擦除的时间为12ms-130ms,130ms的时间明显超过窗口狗的最大时间128ms。
APP的大小为192KB左右,擦除的最小单元为2K,擦除的时间远超过窗口狗的时间。因此原先的设计是把擦除的区域切片,擦除固定大小的区域后去喂狗。
但是随着擦除的次数增加,单位大小的区域擦除时间增加,极大概率导致喂狗超时。
优化:
采用flash driver支持的回调函数去实现喂狗。擦除的行为实际上是一个硬件行为,软件会一直等硬件的状态标志位,在软件等待的1oop中一直执行时钟寄存器的检查,通过寄存器的值去判断是否需要喂狗,喂狗后重置寄存器值。
后记:
调试过程中遇到的几个问题分享:
1.在寄存器未初始化的时候读取寄存器的值会导致软件复位
2.在Erase的过程中一般都禁止flash的读取操作:
Erase的操作后等待硬件状态字的那段代码中有除法(库函数,属于flash区)和函数(flash代码)都需要避免。如果是函数建议采用__ramfunc关键字去修饰。
补充说明:__ramfunc 关键字
该关键字是一个编译器指令,用于指示编译器将函数放置在RAM中,而不是闪存中。这对于需要快速执行的函数非常有用,因为RAM访问通常比闪存访问更快。对于需要在运行时修改的函数也非常有用,因为闪存通常是只读的。
但是,需要注意的是,将函数放置在RAM中会增加程序使用的RAM里。RAM是一种宝贵的资源,尤其是在嵌入式系统中,因此务必谨慎使用__ramfunc,并且仅用于RAM执行的益处大于增加RAM 使用成本的函数。外,使用__ramfunc时,您需要确保在执行函数之前将其从闪存复制到RAM。这通常在程序的初始化阶段完成。

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

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

相关文章

汽车网站开发方案html5做网站

telnet 192.168.0.111 801检测192.168.0.111的801端口是否能连通,如果提示不能连接则有可能是防火墙开启或者端口没有监听程序。window7需要安装telnet客户端才能执行该命令。

深圳公司设计网站外贸电商平台都有哪些

前端路由 问题导入 在前面完成的资产管理案例中, 我们是把列表区域和添加表单区域实现在了一个区域。当页面功能比较复杂时,我们需要它们拆分开来:一个页面中只显示一个区域。 一个比较直观的解决方案是把它们分别做成两个独立的网页文件&…

360网站怎么做ppt注册公司代理公司

智慧宇易精挑细选2020年5933篇不能仅仅为了支持IPv6而使用IPv6,如何利用IPv6解决现实问题尤其重要。创新网络服务、应用服务、数据服务,可能是发展IPv6最重要的一个策略。11月15日,在第二届中国互联网基础资源大会上,IPv6被多位专…

餐饮连锁网站建设如何推广品牌

查询性能优化 文章目录 查询性能优化一、查询优化器的提示(hint)二、优化特定类型的查询 一、查询优化器的提示(hint) HIGH_PRIORITY和LOW_PRIORITY 这个提示告诉MySQL,当多个语句同时访问某一个表时,哪些语句的优先级相对高些,哪些相对低些…

Atcoder Educational DP Contest 做题记录

E 思路 \(W\) 大范围,\(SumV\) 小范围的背包,令 \(f[i]\) 表示价值为 \(i\) 时最小容量,转移方程:\(f[j]=\min(f[j],f[j-v[i]]+w[i])\) 。

网站无法上传图片使用cn域名做网站的多吗

正则表达式中的量词有以下几种:1. *: 匹配前面的字符0次或多次。2. : 匹配前面的字符1次或多次。3.?: 匹配前面的字符0次或1次。4. {n}: 匹配前面的字符恰好n次。5. {n,}: 匹配前面的字符至少n次。6. {n,m}:匹配前面的字符至少n次,但不超过m次。 以下是使用Python的…

20250924

上午离散数学啃完集合的幂集与笛卡尔积,把空集是任何集合的子集这条想通了; 马原课讨论“实践是认识的来源”。 明天周4,上午有课但8点要查宿舍卫生,得清理干净,早点起床拖地,希望一次过关,不被扣分。

跨端边云时序数据管理新范式:Apache IoTDB 的 DB+AI 融合之道 - 实践

跨端边云时序数据管理新范式:Apache IoTDB 的 DB+AI 融合之道 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &q…

《Real-Time Rendering》第二章 图形渲染管线

开篇这个章节会展示实时图形的核心组件,即图形渲染管线(Graphics Rendering Pipeline)或“管线”。管线的主要功能是在给定一个虚拟相机、一些三维物体、一些光源等条件下,生成或绘制一张二维图像,下图描述了使用…

vue可以做pc网站吗flash做安卓游戏下载网站

往期回顾: 抓包工具mitmproxy环境配置使用(一) 抓包工具mitmproxy | mitmweb基本用法(二) mitmproxy抓包 | Python实时生成接口自动化用例(三) mitmproxy抓包 | Python实时生成接口自动化用例 mitmproxy抓包 | Python疑难测试场景mock实战(四) mitmproxy抓包 | Python…

太仓网站开发常德制作网站

总况1、数据库构成  全国1:25万数据库,是国家基础地理信息系统三个全国性空间数据库之一。它由地形数据库、数字高程模型(DEM)数据库、地名数据库三部分构成。地形数据库:以矢量方式存储管理1:25万地形图…

放弃Unity后,我为什么选择了Unigine?

Unity一直在搞事相信大家都知道,特别是unity.cn,之前都还在我的容忍范围之内,直到上半年他们事实性的宣布不会支持Unity 6之后,我就决定换引擎了。 至于换哪个引擎着实挑选了一段不短的时间(实际上我“物色”引擎…

怎么让百度蜘蛛围着网站爬取wordpress评论白名单

GitHub repository - Watch - Star - Fork - Follow References 眼睛图标旁边写着 Watch 字样。点击这个按钮就可以 Watch 该仓库,今后该仓库的更新信息会显示在用户的公开活动中。Star 旁边的数字表示给这个仓库添加 Star 的人数。这个数越高,代表该仓库…

PHP 与 Java 的终极对比:2025年,开发者该如何选择? - 详解

PHP 与 Java 的终极对比:2025年,开发者该如何选择? - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Cons…

银行同业存单的信用等级

银行同业存单的信用等级在“中证同业存单AAA指数”这个名称中,“AAA”指的是信用评级,代表了最高级别的信用等级。1. 通俗理解:资产的“质检标签”您可以把信用评级想象成一个 “质检标签”。AAA:相当于成绩单上的…

企业网站建设板块网站验证码代码

JavaWeb 学习笔记 8:AJAX AJAX(Asynchronous JavaScript And XML,异步 js 和 XML)是一种用 js 代码异步(或同步)的方式请求服务端数据,并在页面显示或加载的技术。 1.快速入门 先看如何用纯 …

虚拟网站管理系统做网站编辑累吗

本文实例为大家分享了python实现石头剪刀布的具体代码,供大家参考,具体内容如下 概述: 如果你和我一样是一个有着其他语言基础的编程者,那我想这个小程序对于你来说是小case。由于本人初学Python,就先拿这个熟悉熟悉一…

途牛旅行网站建设策划书wordpress水印

说明:本篇博客基于selenium 4.1.0 selenium-css定位 element_css driver.find_element(By.CSS_SELECTOR, css表达式) 复制代码 css定位说明 selenium中的css定位,实际是通过css选择器来定位到具体元素,css选择器来自于css语法 css定位优点…

科技信息差(9.22) - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …