0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

讲解一下容易导致软件问题的5种情况以及应对措施

工程师邓生 来源:玩转单片机与嵌入式 作者:风雨无阻 2022-09-05 17:05 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

在进行产品开发或者软件设计时,有没有遇到过下面的这种情况:

程序本来运行的好好的,莫名其妙的就出现了bug,但是还找不到出现bug的规律?

已经验证好的产品,到客户那里突然出现了问题?

出现的bug总是莫名其妙,找不到规律,感觉像“幽灵”一般的存在?

增加了一行无关的代码,程序就不能运行了?

其实,有的时候,问题原因会以一种微妙的方式影响代码的存在,今天我们重点讲解一下难以发现的、容易导致软件问的5种情况,以及所对应的应对措施。

01

堆栈溢出

肯定很多程序员都非常了解“堆栈溢出”这种情况。堆栈溢出可能会对数据或者指令造成破坏,从而影响程序的正确运行。 并且,发生堆栈溢出这种错误,在嵌入式设备程序中造成的影响比计算机中更大。通常有以下几种原因:

1、嵌入式系统通常使用较少的RAM

2、通常没有可依赖的虚拟内存(因为没有磁盘)

3、基于RTOS任务的固件设计使用多个堆栈(每个任务一个),每个堆栈的大小必须足够大,以确保不受唯一最坏情况堆栈深度的影响

4、中断处理程序可能会尝试使用这些堆栈 在进行相关测试的时候,有的时候堆栈溢出这种错误我们并不能测试出来,这就造成了:经过测试验证的程序,到客户处突然运行异常了。

为了避免发生堆栈溢出这种错误,我们可以通过自上而下的代码控制流分析方法,来证明代码是否会出现堆栈溢出错误。

避免措施:

1、确定好自己程序定义的堆栈的全部空间地址;

2、在临近堆栈的位置,定义固定地址的数组或者数据;

3、在程序中实时检查数组或者数据的值,若发现数据改变,证明发生了堆栈溢出,增加特殊的处理姿势:如让设备进入到特定的安全模式,或者输出当前的PC地址等。

02

竞争条件

在程序运行过程中,大量的、无序的任务一直在运行,但是资源是有限的,两个不同的任务之间可能就存在竞争资源的情况,由于两个或者多个进程竞争使用不能被同时访问的资源,使得这些进程有可能因为时间上推进的先后原因而出现问题,这叫做竞争条件。

条件竞争就是两个或者多个进程或者线程同时处理一个资源(如全局变量、文件等)产生非预想的执行效果,从而产生程序执行流的改变,从而达到攻击的目的。

防止条件竞争的方法如下:

1、采用某种保护机制来保护数据(如互斥体),确保只有进行修改的线程才能看到不变量被破坏时的中间状态;

2、使用无锁编程

3、使用事务来处理更新,将数据和读取都存储到事务日志中,然后将之前的操作合并为一步,再进行提交。当数据被另一个线程修改后,或处理已经重启的情况下,提交就会无法进行。

03

不可重入函数

首先需要区分什么是可重入什么是不可重入函数?

可重入函数:可重入函数可以由多个任务并发使用,而不必担心数据错误

不可重入函数:不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)

一些常见的不可重入函数的情形:

函数中使用了静态变量,无论是全局变量还是局部静态变量

函数返回静态变量

函数中调用了不可重入函数

函数体内使用了静态的数据结构

函数体内调用了malloc()或者free()函数

函数体内调用了其他标准I/O函数

函数是singleton中的成员函数而且使用了不使用线程独立存储的成员变量

总得来说,如果一个函数在重入条件下使用了未受保护的共享资源,那么他就是不可重入的。

例如两个函数func1和func2都是不可重入函数:对多线程条件下,操作系统会在func1还没有执行完的情况下,切换到另一个线程中,那个线程可能再次调用func1,这样状态就错了。

避免措施:

在每个库或驱动程序模块中创建并隐藏一个本质上不可重入的互斥锁。将此互斥锁的获取作为操作整个模块中使用的任何持久数据或共享寄存器的先决条件。

04

优先级翻转

优先级翻转是当一个高优先级任务通过信号量机制访问共享资源时,该信号量已被一低优先级任务占有,因此造成高优先级任务被许多具有较低优先级任务阻塞,实时性难以得到保证。

比较经典的由于优先级翻转造成的事故就是当年的火星探路者号,就由于,此处所说的,优先级反转,而导致了内部执行逻辑出错的bug。

在1997年7月4号发射后,在开始搜集气象数据之后没几天,系统(无故)重启了。后来,当然,被相关技术人员找到问题根源,就是,这个优先级反转所导致的,然后修复了此bug。

解决措施:

1、优先级天花板

优先级天花板是当线程申请某资源时,把该线程的优先级提升到可访问这个资源的所有线程中的最高优先级,这个优先级称为该资源的优先级天花板。这种方法简单易行,不必进行复杂的判断,不管线程是否阻塞了高优先级线程的运行, 只要线程访问共享资源都会提升线程的优先级。

2、优先级继承

优先级继承是当线程A申请共享资源Source时,如果共享资源Source正在被线程C使用,通过比较线程C与自身的优先级,如发现线程C的优先级小于自身的优先级, 则将线程C的优先级提升到自身的优先级,线程C释放资源Source后,再恢复线程C的原优先级。这种方法只在占有资源的低优先级线程阻塞了高优先级线程时才动态的改变线程的优先级。

05

内存泄漏

内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

解决措施: 当申请了动态区域,用完的时候一定要记得释放(free),如果没有释放,那么这块内存区域就将处于不可用状态(就像占着茅坑不拉屎一样),程序大了或运行久了就极有可能会导致内存的泄露(重启一下就能解决90%的问题根源),同时我们在释放的时候也要注意释放的内存只能释放一次,不要重复的释放,有的时候代码量会比较大,所以有可能会在不止一处地方进行了代码的释放操作。因为我们内存释放了一次后,该内存区域就有可能用来做别的事了,如果这时候我们又再释放一遍就很有可能会出现问题了。释放完之后最好把指针指向空地址,避免下次再使用指针的时候出现地址的错误。



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1401

    浏览量

    121013
  • 中断处理
    +关注

    关注

    0

    文章

    96

    浏览量

    11506
  • RTOS
    +关注

    关注

    25

    文章

    870

    浏览量

    123218
  • 堆栈溢出
    +关注

    关注

    0

    文章

    10

    浏览量

    8115

原文标题:不要以为莫名其妙的bug是玄学!介绍5个引起程序隐藏bug的原因以及预防措施。

文章出处:【微信号:精通单片机与嵌入式,微信公众号:精通单片机与嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    PLC无线通讯模块的风险与应对

    应对措施 1、信号干扰与稳定性 工业环境中的电磁干扰可能导致数据传输中断或误码。通过以下方式提升抗干扰能力: 硬件设计:集成 EMI 抗干扰滤波单元,经过工业现场考验,可在复杂电磁环境中稳定运行。 2、数据安全与加密 通过以下
    的头像 发表于 01-23 10:48 339次阅读
    PLC无线通讯模块的风险与<b class='flag-5'>应对</b>

    湿热环境的隐患:如何避免聚氨酯灌封胶水解风险? | 铬锐特实业

    聚氨酯灌封胶在高温高湿环境易发生水解,导致胶体发黏、绝缘下降甚至失效。本文详细讲解水解机理、失败表现及实用的预防措施,帮助您选择耐水解聚氨酯灌封胶,有效规避湿热环境风险,大幅提升电子
    的头像 发表于 12-08 01:23 900次阅读
    湿热环境<b class='flag-5'>下</b>的隐患:如何避免聚氨酯灌封胶水解风险? | 铬锐特实业

    频谱芯片常见故障和预防措施

    、对基带处理和数字信号处理模块进行严格的测试和验证,确保其正常工作。 3、定期进行维护和保养,检查和清洁芯片内部的射频接口和连接器。 4、配备合适的散热系统,确保芯片的温度正常,避免过热导致故障。 5、对芯片进行定期的固件和软件
    发表于 12-05 07:15

    CW32 MCU在高频率运行的系统稳定性的提升方案

    问题,并提出系列应对措施,包括硬件设计改进和软件优化策略,以确保系统在高频工作环境中的可靠性和持续稳定运行。 具体内容包括: 高频运行对MCU的影响分析: 探讨CW32 MCU
    发表于 12-04 08:04

    华昕|如何测量晶振好坏-最后一种最实用

    网传很多晶振的测量方法,都说的头头是道,可是经华昕FAE实际实验发现,很多没有效果,万用表,测电笔,示波器到底哪种才是最准确的。我们测试一下网上说的几种测试晶振好坏的方法,看一下他们是否好用。01
    的头像 发表于 10-31 18:15 1977次阅读
    华昕|如何测量晶振好坏-最后<b class='flag-5'>一种</b>最实用

    DDR5 设计指南():DDR5 VS LPDDR5

    DDR 的比较以及 DDR5 与 LPDDR5 的差异以及 DDR5 的拓扑结构。 什么是 DDR5
    的头像 发表于 10-27 19:28 1.2w次阅读
    DDR<b class='flag-5'>5</b> 设计指南(<b class='flag-5'>一</b>):DDR<b class='flag-5'>5</b> VS LPDDR<b class='flag-5'>5</b>

    rtthread_studio 使用lwip软件包变异报错,是什么原因?

    最近学习使用rtthread_studio 开发stm32f407网络通信,打开lwip软件包,结果变异报错,网上查了一下,没人遇到过这个情况,好像简单设置一下就能编译通过,怎么我这就
    发表于 10-13 07:59

    激光锡焊出现气孔的原因及应对措施

    激光锡焊有很多优点,高效,快速等等。但是在激光锡焊的过程中,可能因为这样或者那样的原因,造成焊接点存在气孔。松盛光电来给大家介绍一下激光锡焊焊点气孔存在的原因及相应的解决方案,来了解一下吧。
    的头像 发表于 08-18 09:22 1658次阅读

    变压器过负荷如何处理,五个应对措施让你轻松应对

    变压器是电力系统中非常重要的设备之,用于电压变换,但在实际使用时,变压器会遇到负荷的情况,若不及时处理,会导致变压器过热,缩短其使用寿命,甚至引起变压器损坏,那么当变压器过负荷时,我们应该采取哪些
    的头像 发表于 08-15 15:10 1428次阅读
    变压器过负荷如何处理,五个<b class='flag-5'>应对</b><b class='flag-5'>措施</b>让你轻松<b class='flag-5'>应对</b>

    奥比中光助力支付宝碰一下落地电梯场景

    近日,支付宝与分众传媒宣布联合推出“碰一下抢红包”服务。作为创新交互方式,“支付宝碰一下”首次被引入至电梯场景,并已在全国20余个城市的电梯铺设。奥比中光作为“支付宝碰一下”业务的核心供应商,为这
    的头像 发表于 08-12 11:32 1396次阅读

    大家都在用什么AI软件?有没有好用的免费的AI软件推荐一下

    大家都在用什么AI软件?有没有好用的免费的AI软件推荐一下?直接发个安装包,谢谢。比如deepseek、Chatgpt、豆包、阿里AI、百度AI、腾讯AI,哪个能用、好用?没找到安装包,都是在线搜索?想要Windows版本和IO
    发表于 07-09 18:30

    “碰一下”支付终端应用在酒店:智能无卡入住与客房控制

    “碰一下”支付终端和“碰一下”支付机具今年已在各种餐饮零售门店推广应用。就连天波小编家附近的村口小超市也用上了“碰一下”支付终端。近日,卤味龙头企业绝味食品宣布,全国门店将接入“支付宝碰一下
    的头像 发表于 07-04 09:57 991次阅读
    “碰<b class='flag-5'>一下</b>”支付终端应用在酒店:智能无卡入住与客房控制

    nRF5 SDK软件架构及softdevice工作原理

    SDK,建议先看一下这篇文章“Nordic nRF5 SDK和softdevice介绍”,以建立Nordic nRF5 SDK的些基本知识。 首先说明
    的头像 发表于 06-23 11:08 872次阅读
    nRF<b class='flag-5'>5</b> SDK<b class='flag-5'>软件</b>架构及softdevice工作原理

    一下终端,让自助售货机秒变 “家里的冰箱”

    继刷脸支付后,支付宝近日又推出了新的支付方式——碰一下支付。只需将手机轻轻靠近支付宝“碰一下”支付终端,即可完成支付,比以往要先解锁手机,调出APP的付款码再支付的操作环节要便捷和省时许多。“碰一下
    的头像 发表于 06-18 10:49 2114次阅读
    碰<b class='flag-5'>一下</b>终端,让自助售货机秒变 “家里的冰箱”

    如何应对步进电机的各种干拢问题

    步进电机的干扰问题是个复杂且常见的话题,这些干扰可能来源于步进电机本身,也可能来自外部环境。为了有效地应对这些干扰,可以从以下几个方面进行考虑和解决。 、步进电机对外部的干扰及其应对
    的头像 发表于 05-11 17:38 1539次阅读
    如何<b class='flag-5'>应对</b>步进电机的各种干拢问题