a级毛片免费全部播放-a级毛片免费观看在线播放-a级毛片免费观看网站-a级毛片免费看-国产成人精品在视频-国产成人精品在线

歡迎來到培訓無憂網!

全國切換

咨詢熱線 400-001-5729

位置:培訓無憂網 > 新聞資訊 > 電腦/IT > 嵌入式開發 >  防御性C語言編程在嵌入式開發中的使用方法

防御性C語言編程在嵌入式開發中的使用方法

來源:m.dedgn.cn 發布人:云朵

2021-12-04 10:28:18|已瀏覽:336次

防御性C語言編程在嵌入式開發中的使用方法

    嵌入式產品的可靠性自然與硬件密不可分,但在硬件確定、并且沒有第三方測試的前提下,使用防御性編程思想寫出的代碼,往往具有更高的穩定性。防御性編程首先需要認清C語言的種種缺陷和陷阱,C語言對于運行時的檢查十分弱小,需要程序員謹慎的考慮代碼,在必要的時候增加判斷;防御性編程的另一個核心思想是假設代碼運行在并不可靠的硬件上,外接干擾有可能會打亂程序執行順序、更改RAM存儲數據等等。

1、具有形參的函數,需判斷傳遞來的實參是否合法

    程序員可能無意識的傳遞了錯誤參數;外界的強干擾可能將傳遞的參數修改掉,或者使用隨機參數意外的調用函數,因此在執行函數主體前,需要先確定實參是否合法。

2、仔細檢查函數的返回值

    對函數返回的錯誤碼,要進行全面仔細處理,必要時做錯誤記錄。

3、防止指針越界

    如果動態計算一個地址時,要保證被計算的地址是合理的并指向某個有意義的地方。特別對于指向一個結構或數組的內部的指針,當指針增加或者改變后仍然指向同一個結構或數組。

4、防止數組越界

    數組越界的問題前文已經講述的很多了,由于C不會對數組進行有效的檢測,因此必須在應用中顯式的檢測數組越界問題。

5、數學算數運算

5.1、除法運算,只檢測除數為零就可靠嗎?

    除法運算前,檢查除數是否為零幾乎已經成為共識,但是僅檢查除數是否為零就夠了嗎?

    考慮兩個整數相除,對于一個signed long類型變量,它能表示的數值范圍為:-2147483648 ~+2147483647,如果讓-2147483648/ -1,那么結果應該是+2147483648,但是這個結果已經超出了signedlong所能表示的范圍了。所以,在這種情況下,除了要檢測除數是否為零外,還要檢測除法是否溢出。

5.2、檢測運算溢出

    整數的加減乘運算都有可能發生溢出,在討論未定義行為時,給出過一個有符號整形加法溢出判斷代碼。

5.3、檢測移位

    在討論未定義行為時,提到有符號數右移、移位的數量是負值或者大于操作數的位數都是未定義行為,也提到不對有符號數進行位操作,但要檢測移位的數量是否大于操作數的位數。

6、如果有硬件看門狗,則使用它

    在其它一切措施都失效的情況下,看門狗可能是最后的防線。它的原理特別簡單,但卻能大大提高設備的可靠性。如果設備有硬件看門狗,一定要為它編寫驅動程序。

7、關鍵數據儲存多個備份,取數據采用“表決法”

    RAM中的數據在受到干擾情況下有可能被改變,對于系統關鍵數據應該進行保護。關鍵數據包括全局變量、靜態變量以及需要保護的數據區域。備份數據與原數據不應該處于相鄰位置,因此不應由編譯器默認分配備份數據位置,而應該由程序員指定區域存儲。

    可以將RAM分為3個區域,第一個區域保存原碼,第二個區域保存反碼,第三個區域保存異或碼,區域之間預留一定量的“空白”RAM作為隔離。可以使用編譯器的“分散加載”機制將變量分別存儲在這些區域。需要進行讀取時,同時讀出3份數據并進行表決,取至少有兩個相同的那個值。

8、對非易失性存儲器進行備份存儲

    非易失性存儲器包括但不限于Flash、EEPROM、鐵電。僅僅將寫入非易失性存儲器中的數據再讀出校驗是不夠的。強干擾情況下可能導致非易失性存儲器內的數據錯誤,在寫非易失性存儲器的期間系統掉電將導致數據丟失,因干擾導致程序跑飛到寫非易失性存儲器函數中,將導致數據存儲紊亂。

    一種可靠的辦法是將非易失性存儲器分成多個區,每個數據都將按照不同的形式寫入到這些分區中,需要進行讀取時,同時讀出多份數據并進行表決,取相同數目較多的那個值。

9、軟件鎖

    對于初始化序列或者有一定先后順序的函數調用,為了保證調用順序或者確保每個函數都被調用,我們可以使用環環相扣,實質上這也是一種軟件鎖。此外對于一些安全關鍵代碼語句(是語句,而不是函數),可以給它們設置軟件鎖,只有持有特定鑰匙的,才可以訪問這些關鍵代碼。也可以通俗的理解為,關鍵安全代碼不能按照單一條件執行,要額外的多設置一個標志。

    比如,向Flash寫一個數據,我們會判斷數據是否合法、寫入的地址是否合法,計算要寫入的扇區。之后調用寫Flash子程序,在這個子程序中,判斷扇區地址是否合法、數據長度是否合法,之后就要將數據寫入Flash。

    由于寫Flash語句是安全關鍵代碼,所以程序給這些語句上鎖:必須具有正確的鑰匙才可以寫Flash。這樣即使是程序跑飛到寫Flash子程序,也能大大降低誤寫的風險。

    本文由培訓無憂網達內教育課程顧問老師整理發布,更多課程信息可關注嵌入式開發培訓或添加老師微信:15033336050

      注:尊重原創文章,轉載請注明出處和鏈接 http://m.dedgn.cn/news-id-6215.html 違者必究!部分文章來源于網絡由培訓無憂網編輯部人員整理發布,內容真實性請自行核實或聯系我們,了解更多相關資訊請關注嵌入式開發頻道查看更多,了解相關專業課程信息您可在線咨詢也可免費申請試課。關注官方微信了解更多:150 3333 6050

留下你的信息,課程顧問老師會一對一幫助你規劃更適合你的專業課程!
  • 姓名:

  • 手機:

  • 地區:

  • 想學什么:

  • 培訓無憂網
免 費 申 請 試 聽
提交申請,《培訓無憂網》課程顧問老師會一對一幫助你規劃更適合你的專業課程!

主站蜘蛛池模板: 免费男女乱淫真视频播放 | 在线a毛片免费视频观看 | 美国大毛片 | 国产一区精品在线观看 | 99九九国产精品免费视频 | 欧美日a | 男人天堂男人天堂 | 国产在线爱做人成小视频 | 日本护士视频xxxxxwww | 欧美成人伊人十综合色 | 亚洲精品国产专区一区 | 国产精品免费视频一区一 | 免费高清毛片在线播放视频 | 黄在线观看在线播放720p | 国产精品手机视频一区二区 | 京东一热本色道久久爱 | 国产成人偷拍 | 香港激情三级做爰小说 | 伊在人亚洲香蕉精品区 | 国产精品亚洲专区一区 | 99精品久久99久久久久 | 日本在线网 | 粉嫩jk制服美女啪啪 | 三级网站视频在线观看 | 亚洲影院手机版777点击进入影院 | 国内精品久久久久久久星辰影视 | 亚洲在线视频网站 | 国产精品hd在线播放 | 亚洲男人网 | 日韩欧美国产另类 | 国产成人精品精品欧美 | 成视频年人黄网站免费 | 美女很黄很黄免费的 | 九九精品视频在线播放8 | 亚洲欧洲eeea在线观看 | 欧美一级影院 | s8国产成人精品视频 | 国产高清在线精品一区a | 韩国美女一级片 | a级国产乱理伦片在线观看99 | 欧美成人综合在线观看视频 |