91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

講解一下容易導致軟件問題的5種情況以及應對措施

工程師鄧生 ? 來源:玩轉單片機與嵌入式 ? 作者:風雨無阻 ? 2022-09-05 17:05 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在進行產品開發(fā)或者軟件設計時,有沒有遇到過下面的這種情況:

程序本來運行的好好的,莫名其妙的就出現了bug,但是還找不到出現bug的規(guī)律?

已經驗證好的產品,到客戶那里突然出現了問題?

出現的bug總是莫名其妙,找不到規(guī)律,感覺像“幽靈”一般的存在?

增加了一行無關的代碼,程序就不能運行了?

其實,有的時候,問題原因會以一種微妙的方式影響代碼的存在,今天我們重點講解一下難以發(fā)現的、容易導致軟件問的5種情況,以及所對應的應對措施。

01

堆棧溢出

肯定很多程序員都非常了解“堆棧溢出”這種情況。堆棧溢出可能會對數據或者指令造成破壞,從而影響程序的正確運行。 并且,發(fā)生堆棧溢出這種錯誤,在嵌入式設備程序中造成的影響比計算機中更大。通常有以下幾種原因:

1、嵌入式系統通常使用較少的RAM

2、通常沒有可依賴的虛擬內存(因為沒有磁盤)

3、基于RTOS任務的固件設計使用多個堆棧(每個任務一個),每個堆棧的大小必須足夠大,以確保不受唯一最壞情況堆棧深度的影響

4、中斷處理程序可能會嘗試使用這些堆棧 在進行相關測試的時候,有的時候堆棧溢出這種錯誤我們并不能測試出來,這就造成了:經過測試驗證的程序,到客戶處突然運行異常了。

為了避免發(fā)生堆棧溢出這種錯誤,我們可以通過自上而下的代碼控制流分析方法,來證明代碼是否會出現堆棧溢出錯誤。

避免措施:

1、確定好自己程序定義的堆棧的全部空間地址;

2、在臨近堆棧的位置,定義固定地址的數組或者數據;

3、在程序中實時檢查數組或者數據的值,若發(fā)現數據改變,證明發(fā)生了堆棧溢出,增加特殊的處理姿勢:如讓設備進入到特定的安全模式,或者輸出當前的PC地址等。

02

競爭條件

在程序運行過程中,大量的、無序的任務一直在運行,但是資源是有限的,兩個不同的任務之間可能就存在競爭資源的情況,由于兩個或者多個進程競爭使用不能被同時訪問的資源,使得這些進程有可能因為時間上推進的先后原因而出現問題,這叫做競爭條件。

條件競爭就是兩個或者多個進程或者線程同時處理一個資源(如全局變量、文件等)產生非預想的執(zhí)行效果,從而產生程序執(zhí)行流的改變,從而達到攻擊的目的。

防止條件競爭的方法如下:

1、采用某種保護機制來保護數據(如互斥體),確保只有進行修改的線程才能看到不變量被破壞時的中間狀態(tài);

2、使用無鎖編程;

3、使用事務來處理更新,將數據和讀取都存儲到事務日志中,然后將之前的操作合并為一步,再進行提交。當數據被另一個線程修改后,或處理已經重啟的情況下,提交就會無法進行。

03

不可重入函數

首先需要區(qū)分什么是可重入什么是不可重入函數?

可重入函數:可重入函數可以由多個任務并發(fā)使用,而不必擔心數據錯誤

不可重入函數:不能由超過一個任務所共享,除非能確保函數的互斥(或者使用信號量,或者在代碼的關鍵部分禁用中斷)

一些常見的不可重入函數的情形:

函數中使用了靜態(tài)變量,無論是全局變量還是局部靜態(tài)變量

函數返回靜態(tài)變量

函數中調用了不可重入函數

函數體內使用了靜態(tài)的數據結構

函數體內調用了malloc()或者free()函數

函數體內調用了其他標準I/O函數

函數是singleton中的成員函數而且使用了不使用線程獨立存儲的成員變量

總得來說,如果一個函數在重入條件下使用了未受保護的共享資源,那么他就是不可重入的。

例如兩個函數func1和func2都是不可重入函數:對多線程條件下,操作系統會在func1還沒有執(zhí)行完的情況下,切換到另一個線程中,那個線程可能再次調用func1,這樣狀態(tài)就錯了。

避免措施:

在每個庫或驅動程序模塊中創(chuàng)建并隱藏一個本質上不可重入的互斥鎖。將此互斥鎖的獲取作為操作整個模塊中使用的任何持久數據或共享寄存器的先決條件。

04

優(yōu)先級翻轉

優(yōu)先級翻轉是當一個高優(yōu)先級任務通過信號量機制訪問共享資源時,該信號量已被一低優(yōu)先級任務占有,因此造成高優(yōu)先級任務被許多具有較低優(yōu)先級任務阻塞,實時性難以得到保證。

比較經典的由于優(yōu)先級翻轉造成的事故就是當年的火星探路者號,就由于,此處所說的,優(yōu)先級反轉,而導致了內部執(zhí)行邏輯出錯的bug。

在1997年7月4號發(fā)射后,在開始搜集氣象數據之后沒幾天,系統(無故)重啟了。后來,當然,被相關技術人員找到問題根源,就是,這個優(yōu)先級反轉所導致的,然后修復了此bug。

解決措施:

1、優(yōu)先級天花板

優(yōu)先級天花板是當線程申請某資源時,把該線程的優(yōu)先級提升到可訪問這個資源的所有線程中的最高優(yōu)先級,這個優(yōu)先級稱為該資源的優(yōu)先級天花板。這種方法簡單易行,不必進行復雜的判斷,不管線程是否阻塞了高優(yōu)先級線程的運行, 只要線程訪問共享資源都會提升線程的優(yōu)先級。

2、優(yōu)先級繼承

優(yōu)先級繼承是當線程A申請共享資源Source時,如果共享資源Source正在被線程C使用,通過比較線程C與自身的優(yōu)先級,如發(fā)現線程C的優(yōu)先級小于自身的優(yōu)先級, 則將線程C的優(yōu)先級提升到自身的優(yōu)先級,線程C釋放資源Source后,再恢復線程C的原優(yōu)先級。這種方法只在占有資源的低優(yōu)先級線程阻塞了高優(yōu)先級線程時才動態(tài)的改變線程的優(yōu)先級。

05

內存泄漏

內存泄漏(Memory Leak)是指程序中已動態(tài)分配的堆內存由于某種原因程序未釋放或無法釋放,造成系統內存的浪費,導致程序運行速度減慢甚至系統崩潰等嚴重后果。

解決措施: 當申請了動態(tài)區(qū)域,用完的時候一定要記得釋放(free),如果沒有釋放,那么這塊內存區(qū)域就將處于不可用狀態(tài)(就像占著茅坑不拉屎一樣),程序大了或運行久了就極有可能會導致內存的泄露(重啟一下就能解決90%的問題根源),同時我們在釋放的時候也要注意釋放的內存只能釋放一次,不要重復的釋放,有的時候代碼量會比較大,所以有可能會在不止一處地方進行了代碼的釋放操作。因為我們內存釋放了一次后,該內存區(qū)域就有可能用來做別的事了,如果這時候我們又再釋放一遍就很有可能會出現問題了。釋放完之后最好把指針指向空地址,避免下次再使用指針的時候出現地址的錯誤。



審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • RAM
    RAM
    +關注

    關注

    8

    文章

    1399

    瀏覽量

    120570
  • 中斷處理
    +關注

    關注

    0

    文章

    96

    瀏覽量

    11481
  • RTOS
    +關注

    關注

    25

    文章

    866

    瀏覽量

    122997
  • 堆棧溢出
    +關注

    關注

    0

    文章

    10

    瀏覽量

    8107

原文標題:不要以為莫名其妙的bug是玄學!介紹5個引起程序隱藏bug的原因以及預防措施。

文章出處:【微信號:精通單片機與嵌入式,微信公眾號:精通單片機與嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    濕熱環(huán)境的隱患:如何避免聚氨酯灌封膠水解風險? | 鉻銳特實業(yè)

    聚氨酯灌封膠在高溫高濕環(huán)境易發(fā)生水解,導致膠體發(fā)黏、絕緣下降甚至失效。本文詳細講解水解機理、失敗表現及實用的預防措施,幫助您選擇耐水解聚氨酯灌封膠,有效規(guī)避濕熱環(huán)境風險,大幅提升電子
    的頭像 發(fā)表于 12-08 01:23 ?633次閱讀
    濕熱環(huán)境<b class='flag-5'>下</b>的隱患:如何避免聚氨酯灌封膠水解風險? | 鉻銳特實業(yè)

    頻譜芯片常見故障和預防措施

    、對基帶處理和數字信號處理模塊進行嚴格的測試和驗證,確保其正常工作。 3、定期進行維護和保養(yǎng),檢查和清潔芯片內部的射頻接口和連接器。 4、配備合適的散熱系統,確保芯片的溫度正常,避免過熱導致故障。 5、對芯片進行定期的固件和軟件
    發(fā)表于 12-05 07:15

    CW32 MCU在高頻率運行的系統穩(wěn)定性的提升方案

    問題,并提出系列應對措施,包括硬件設計改進和軟件優(yōu)化策略,以確保系統在高頻工作環(huán)境中的可靠性和持續(xù)穩(wěn)定運行。 具體內容包括: 高頻運行對MCU的影響分析: 探討CW32 MCU
    發(fā)表于 12-04 08:04

    支付寶“碰一下”的革新背后:國民技術MCU的隱形力量

    近日,全球頂尖金融科技盛會Money20/20公布首屆創(chuàng)新大獎TheMoneyAwards結果,“支付寶碰一下”從眾多參賽企業(yè)中脫穎而出,憑借創(chuàng)新的解決方案和極致的用戶體驗摘得“支付”類別大獎,成為
    的頭像 發(fā)表于 11-21 19:15 ?1340次閱讀
    支付寶“碰<b class='flag-5'>一下</b>”的革新背后:國民技術MCU的隱形力量

    華昕|如何測量晶振好壞-最后一種最實用

    網傳很多晶振的測量方法,都說的頭頭是道,可是經華昕FAE實際實驗發(fā)現,很多沒有效果,萬用表,測電筆,示波器到底哪種才是最準確的。我們測試一下網上說的幾種測試晶振好壞的方法,看一下他們是否好用。01
    的頭像 發(fā)表于 10-31 18:15 ?1298次閱讀
    華昕|如何測量晶振好壞-最后<b class='flag-5'>一種</b>最實用

    DDR5 設計指南():DDR5 VS LPDDR5

    DDR 的比較以及 DDR5 與 LPDDR5 的差異以及 DDR5 的拓撲結構。 什么是 DDR5
    的頭像 發(fā)表于 10-27 19:28 ?9821次閱讀
    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 開發(fā)stm32f407網絡通信,打開lwip軟件包,結果變異報錯,網上查了一下,沒人遇到過這個情況,好像簡單設置一下就能編譯通過,怎么我這就
    發(fā)表于 10-13 07:59

    激光錫焊出現氣孔的原因及應對措施

    激光錫焊有很多優(yōu)點,高效,快速等等。但是在激光錫焊的過程中,可能因為這樣或者那樣的原因,造成焊接點存在氣孔。松盛光電來給大家介紹一下激光錫焊焊點氣孔存在的原因及相應的解決方案,來了解一下吧。
    的頭像 發(fā)表于 08-18 09:22 ?1296次閱讀

    變壓器過負荷如何處理,五個應對措施讓你輕松應對

    變壓器是電力系統中非常重要的設備之,用于電壓變換,但在實際使用時,變壓器會遇到負荷的情況,若不及時處理,會導致變壓器過熱,縮短其使用壽命,甚至引起變壓器損壞,那么當變壓器過負荷時,我們應該采取哪些
    的頭像 發(fā)表于 08-15 15:10 ?1251次閱讀
    變壓器過負荷如何處理,五個<b class='flag-5'>應對</b><b class='flag-5'>措施</b>讓你輕松<b class='flag-5'>應對</b>

    奧比中光助力支付寶碰一下落地電梯場景

    近日,支付寶與分眾傳媒宣布聯合推出“碰一下搶紅包”服務。作為創(chuàng)新交互方式,“支付寶碰一下”首次被引入至電梯場景,并已在全國20余個城市的電梯鋪設。奧比中光作為“支付寶碰一下”業(yè)務的核心供應商,為這
    的頭像 發(fā)表于 08-12 11:32 ?1229次閱讀

    大家都在用什么AI軟件?有沒有好用的免費的AI軟件推薦一下?

    大家都在用什么AI軟件?有沒有好用的免費的AI軟件推薦一下?直接發(fā)個安裝包,謝謝。比如deepseek、Chatgpt、豆包、阿里AI、百度AI、騰訊AI,哪個能用、好用?沒找到安裝包,都是在線搜索?想要Windows版本和IO
    發(fā)表于 07-09 18:30

    “碰一下”支付終端應用在酒店:智能無卡入住與客房控制

    “碰一下”支付終端和“碰一下”支付機具今年已在各種餐飲零售門店推廣應用。就連天波小編家附近的村口小超市也用上了“碰一下”支付終端。近日,鹵味龍頭企業(yè)絕味食品宣布,全國門店將接入“支付寶碰一下
    的頭像 發(fā)表于 07-04 09:57 ?831次閱讀
    “碰<b class='flag-5'>一下</b>”支付終端應用在酒店:智能無卡入住與客房控制

    nRF5 SDK軟件架構及softdevice工作原理

    SDK,建議先看一下這篇文章“Nordic nRF5 SDK和softdevice介紹”,以建立Nordic nRF5 SDK的些基本知識。 首先說明
    的頭像 發(fā)表于 06-23 11:08 ?697次閱讀
    nRF<b class='flag-5'>5</b> SDK<b class='flag-5'>軟件</b>架構及softdevice工作原理

    一下終端,讓自助售貨機秒變 “家里的冰箱”

    繼刷臉支付后,支付寶近日又推出了新的支付方式——碰一下支付。只需將手機輕輕靠近支付寶“碰一下”支付終端,即可完成支付,比以往要先解鎖手機,調出APP的付款碼再支付的操作環(huán)節(jié)要便捷和省時許多?!芭?b class='flag-5'>一下
    的頭像 發(fā)表于 06-18 10:49 ?1798次閱讀
    碰<b class='flag-5'>一下</b>終端,讓自助售貨機秒變 “家里的冰箱”

    如何應對步進電機的各種干攏問題

    步進電機的干擾問題是個復雜且常見的話題,這些干擾可能來源于步進電機本身,也可能來自外部環(huán)境。為了有效地應對這些干擾,可以從以下幾個方面進行考慮和解決。 、步進電機對外部的干擾及其應對
    的頭像 發(fā)表于 05-11 17:38 ?1315次閱讀
    如何<b class='flag-5'>應對</b>步進電機的各種干攏問題