当MCU死机了,先把硬件抓过来~

5619ad4b7d8085fa62162370a700942d.jpeg

关于软件开发中的偶发性问题,有些处理办法看似不是很难,但其实最重要的还是对问题的敏感度,而这份敏感度就来源于你对整个系统的理解和把握。

当你能够尽快缩小问题代码的范围,在一定程度上就已经加快了解决问题的进度。之前我曾提到,MCU程序直接死了以后,软件上也有力不从心的时候,这时候我觉得你应该把做硬件的哥们揪过来了。

当然,做嵌入式软件的朋友们也不要太高估了自己,虽然大家可以把硬件秀起来,但是你拯救不了“无药可救”的硬件。不要一头扎到代码的调试中,而是更多的分析现场和一些可能性的问题,先排查一些更加常见且易查的硬件问题,此时此刻示波器得秀起来~

1

   电源问题

对于电源问题引起的死机,在这么多年软件调试过程了至少有碰到过10次左右,特别是一些经验不是特别丰富的软件工程师们在开发的过程中很少去质疑硬件问题,所以一言不合就从嵌入式软件开始排查,同时也有许多硬件伙计觉得软件可以优化非常多的硬件问题。

所以,嵌入式软件没有一定经验的话,在调试硬件问题会比较难受,那么对于电源这块能量的核心,主要是电压、功率和稳定性等。大部分芯片都会有一个稳定运行的电压范围,过高或者过低都有可能导致运行异常,注意是可能,不是一定,甚至同一个型号,不同批次的芯片都有所差异~

所以功率不够,电压过低会导致芯片内外供电不够,使得相应模块、外设运行异常,最终程序死机、跑飞是经常发生的。特别是整个系统的功率需求并不是特别稳定,且电源的设计并没有太多的余量,当出现比如动作继电器等等功耗较大的动作时,其电源就有可能出现不稳定状态,最终影响到芯片运行。

当然如果你是购买的劣质或者参数虚标的电源,就要更多的去测试和监控一下电源的稳定程度了。

所以我目前亲自开发的项目,在项目的设计评审初期,会要硬件多留一个MCU的AD采样电路用来实时采集供电电压等,软件内部做一些快速的电压保护或者故障侦测,以检测出大部分电源异常问题。

2

 复位电路干扰

相比电源问题会少一些,不过也遇到过几次,大部分都是板子刚打样回来上电调试的时候,MCU直接不运行的情况,大多都是复位电路中的电阻或者电容贴错了,虚焊了等等;如果是采用复位芯片的大多估计供电不足,选型有问题等等。

不过,有一次遇到是在PCB走线上,复位电路与功率部分挨得比较近导致MCU概率性复位,当然如果有使用外部看门狗的话就更需要排查一下了。

3

  晶振失效或受干扰

晶振本身失效或者受干扰,一般MCU都会选择外部晶振,相比内部的会更加准确一些。

然而对于这个MCU的心脏也是有概率出问题的,之前有个项目采用定时测量时间,每次测量信号的误差都是忽大忽小,后来直接把捕获的信号用IO信号翻转出来与实际信号进行对比,发现并无差异,才定位到是计时这块的频率出了问题,最终定位外部晶振电路存在干扰,导致时钟频率发生变化,最终影响测量结果,如果干扰再大一些估计就跑飞宕机了。

对于当出现了一些死机或者计时不准的问题,不仅仅要看软件,也要从硬件晶振时钟这块进行排查,所以对于目前主流的一些MCU都会存在时钟频率输出的引脚,一方面是用来供外部进行内部时钟的监控,另外一个应用就是进行不同芯片之间时钟上的同步。

4

 最后几小点

最后,静电问题说实在的在开发中真的是虚无缥缈的存在,曾经一个伙计徒手换芯片,10个芯片换上去,坏了一半,大概率是因为天气比较干燥,用手触碰了几下芯片,后来硬件人手准备一套装备~

同时在系统中与MCU没有隔离的IO口,通信等等都要做好保护,这些对外的接口会把静电、或者是浪涌电压等引入MCU内部,使得MCU内部逻辑混乱导致死机。

高速运行的MCU会受外界辐射等电磁干扰,做好一些屏蔽措施等。

基本上遇到的MCU死机或者复位暂时就总结这么多吧,以后再想到一些再写写~

来源:最后一个bug


版权归原作者所有,如有侵权,请联系删除。

6ed8a52fa05af7702dd6c7c8d1bf4ffa.jpeg

31ded07524b33ccf503c6013c93e86fe.png

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

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

相关文章

青蛙学Linux—NFS

NFS,Network File Syttem,网络文件系统。它允许网络上运行不同操作系统的主机通过网络连接到运行NFS服务的主机上,以实现数据共享。NFS的配置非常简单,经过简单的设置既能快速使用NFS。 使用NFS,首先在服务端运行NFS服…

extjs 学习中

首先找了个js得开发工具:Komodo Edit 但是安装了好多次都没有出现提示,均告失败!今天再次鼓起勇气安装试试:首先安装Komodo-Edit-4.3.2-1263; 成功!然后: 下载extjs_api_catalogs-2.0.2-ko.xpi &#xff…

火眼睛睛查coredump(stl sort)------永远让比较函数对相同元素返回false

转载:http://blog.csdn.net/stpeace/article/details/51040218#cpp 看看如下代码的一个非常隐晦的错误, 虽然不会每次core dump, 但类似代码迟早会core dump, 好多人遇到过。 此问题极难定位, 看一下吧: [cpp] view pl…

P1648 看守

传送门 以二维的两个点\((x1,y1),(x2,y2)\)为例,那么他们之间的曼哈顿距离肯定为一下四个之一\((x1-x2)(y1-y2)\),\((x2-x1)(y1-y2)\),\((x1-x2)(y2-y1)\),\((x2-x1)(y2-y1)\),而且为这四个里面最大的 然后搞一搞可以变成下面的样子\((x1y1)-(x2y2)\),\(…

好友让我看这段代码

周末的时候,一个微信好友让我旁边看一段代码在写下面的文章之前,我先简单说下写代码是一件非常有意思的事情,同时也是一件需要我们认真对待的事情,我不认为一定要把代码写的和大神一样看不明白,但是至少要逻辑清晰&…

使用github管理Eclipse分布式项目开发

使用github管理Eclipse分布式项目开发 老关我在前面的博文(github管理iOS分布式项目开发)中介绍了github管理iOS分布式开发,今天老关将向大家介绍使用github管 理Eclipse分布式项目。事实上我们的516inc团队这在开发一个多移动平台项目&#…

愉快且卓有成效:培养你与人相处的能力

毫无疑问,渊博的学识和不断的创新是事业成功的基础。然而,把一个概念变为成果,离开他人的合作,任何人,无论是伟人还是凡夫,都无法实现。与人合作得是否愉快且卓有成效,完全取决于你与人相处的能…

小玩一个并行多线程MCU—MC3172

大家好转发一篇杂烩君的文章,杂烩君是我同一个高中的老乡,他平时分享的嵌入式知识非常不错。——————大家好,我是杂烩君。最近,朋友送了块小板子,板子上的MCU是个很有意思的东西——并行多线程处理器MC3172 。通俗…

Android 人脸识别签到(一)

因为Android课程设计自己选题,所以作者选了这个相对简单的。本来开始是想做大学课程查签到,拍一张集体照,就可识别哪些人已到,哪些未到。查了一下百度AI开发平台的人脸识别接口,发现V3的接口文档有M:N的人脸识别&#…

[系列文章]上传文件管理控件v2

一、引言: 开发v1的时候,遇到很多困难(因为我是新手),于是就上网找了一些资料。 其中,这篇《数据绑定的总结 》文章(http://www.cnblogs.com/qingtianyzl/articles/351012.html)被我…

[ mongoDB ] - mongoDB的基本操作

mongoDB的基本操作 强烈推荐参考官方用户手册: http://www.mongodb.org/display/DOCS 1)插入(insert) 插入的value是json对象,以下示例循环添加了10个用户信息,字段可以是字符串、数值、对象、数组等。 通过VUE查看&am…

STL中的multimap---顺便说说如何查找同一关键字对应的所有值

转载:http://blog.csdn.net/stpeace/article/details/44984639 我个人感觉哈, map的应用场景比multimap更多, 不过, 我们还是来学一下multimap。 我们知道, multimap中, 一个关键字可能对应多个不同的值&am…

信号量保护之位带操作

大家好,上篇文章写的一个中断操作变量的问题,鱼鹰帮忙回复了,大家可以再看看这篇文章。好友让我看这段代码CM3位带操作如果存储器系统支持“锁定传送”( lockedtransfers),或者总线上只有一个主机&#xff…

LeetCode872. Leaf-Similar Trees

自己的代码: # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val x # self.left None # self.right Noneclass Solution:def allNode(self,root):listNode[]if Not root:return ListNode…

CCScene切换的所有特效(28种)以及设置屏幕横竖屏!

CCScene 对于使用cocos2d的童鞋肯定很熟悉,那么在使用 CCScene *s [CCScenenode];[s addChild: [restartAction() node]];[[CCDirectorsharedDirector]replaceScene:s]; 对scene进行场景(CCLayout)进行切换时,cocos2d提供了一…

关于MySqlConnection的一个特殊异常

最近给一个客户做一个项目,其中要与另外一个系统进行数据交换,而那个系统使用的是MySql,因此,从网上下载了一个MySql Connector,由于以前没有用过MySql,而且这个MySql服务器位于互联网上,因此&a…

文档设置及使用

原文链接:http://stynzf.blogbus.com/logs/15944928.html在上一篇文档(《微软文档管理解决方案2007》之一:安装部署)中,讲述了如何安装部署“文档管理解决方案” 这次我们通过将该子网站作为“Windows中文站”的一个文…

SSL和HTTPS

SSL说明: 1)简介 SSL (Secure Socket Layer)为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取。它已被广泛地用于Web浏览器与服务器之间…

N32替换STM32,这些细节别忽略!

前言目前大形势影响,芯片价格日益上涨,采购周期变长,导致国产芯片替代进口芯片成为大趋势,该文章记录了使用国民技术的N32替换STM32的操作流程。话不多说,上步骤。一、工程配置1.安装硬件库硬件库为厂家提供的资料&…

五分钟读懂UML类图

平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道。实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一、类的属性的表示方式 在UML类图中,类使用包含类名、属性(field) 和方法(meth…