在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

為什么項目中的代碼需要有Assert斷言語句Assert斷言的詳細資料說明

5RJg_mcuworld ? 來源:未知 ? 2019-03-30 11:04 ? 次閱讀

1寫在前面

有經驗的工程師都知道,隨著軟件版本的迭代,或者需求不斷變更,我們的代碼就會變得越來越“臃腫”。

在編碼的過程中,如果沒有注重一些細節,你的代碼就可能存在許多隱藏的Bug。

那么,我們如何找出這些隱藏的Bug呢?

今天就說其中的一點:Assert斷言。

為什么項目中的代碼需要有Assert斷言語句Assert斷言的詳細資料說明

2關于Assert斷言

什么是Assert斷言?

編寫代碼時,我們總是會做出一些假設,斷言就是用于在代碼中捕捉這些假設,可以將斷言看作是異常處理的一種高級形式。

斷言表示為一些布爾表達式,程序員相信在程序中的某個特定點該表達式值為真。

可以在任何時候啟用和禁用斷言驗證,因此可以在測試時啟用斷言,而在部署時禁用斷言。

同樣,程序投入運行后,最終用戶在遇到問題時可以重新啟用斷言。

這里的概念,可能不好理解,簡單舉一個例子來說明吧。

有這么一個數組和函數:

int Array[5] = {0xA1, 0xB2, 0xC3, 0xD4, 0xE5};int Fun(char i){ return Array[i];}

如果我們函數中不加Assert斷言語句,你覺得直接調用會這個函數會有風險嗎?

假如這么調用:

int a;a = Fun(8);

很明顯,就這么調用,會出錯,且我們不容易發現錯誤在哪里。

但是,假如添加有Assert斷言語句,錯誤就能一下找出來。

3Assert斷言實際應用

其實,Assert斷言在很多標準的代碼中,基本都有。我們還是拿STM32的代碼來說明吧。

不管是STM32標準外設庫,還是HAL、LL庫源代碼里面都有Assert斷言機制。

不知道大家有沒有注意過assert_param函數?

1.拿STM32最常見的GPIO初始化函數為例

A.標準外設庫GPIO初始化:

B.HAL庫GPIO初始化:

相信大家都看到過STM32庫中的參數斷言語句,他的作用就是用于檢查函數傳入參數是否正確。

2.STM32參數斷言使能

STM32的assert_param參數斷言函數是沒有使能的,如下:

#define assert_param(expr) ((void)0)

也就是assert_param不起作用。

如果需要使用,就需要對其使能才行。

A.標準外設庫

B.HAL庫

道理一樣,使能ASSERT,可以手動:

#define USE_FULL_ASSERT 1U

也可以通過STM32CubeMX配置:

3.代碼大小

添加Assert斷言之后,代碼量肯定要增加,比如:

不使能assert_param代碼量:

Code=5350 RO-data=360 RW-data=16 ZI-data=1152

使能assert_param:

Code=8300 RO-data=362 RW-data=16 ZI-data=1152

4.斷言失敗處理

斷言失敗,可根據實際項目需求,做出一定處理。比如:打印錯誤信息,存儲錯誤日志等。

本文就講到這里,方法教給大家,需要自己理解并消化其中內容。

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

    關注

    2270

    文章

    10909

    瀏覽量

    356575
  • 代碼
    +關注

    關注

    30

    文章

    4802

    瀏覽量

    68738
  • GPIO
    +關注

    關注

    16

    文章

    1211

    瀏覽量

    52178

原文標題:為什么項目中的代碼需要有Assert斷言語句?

文章出處:【微信號:mcuworld,微信公眾號:嵌入式資訊精選】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言中assert的使用

    assert意思是斷言,常用在程序的DEBUG版本中。
    發表于 07-21 14:51 ?864次閱讀

    解析C語言斷言函數的使用

    對于斷言,相信大家都不陌生,大多數編程語言也都有斷言這一特性。簡單地講,斷言就是對某種假設條件進行檢查。 在 C 語言中,斷言被定義為宏的形式(as
    發表于 08-08 09:51 ?491次閱讀
    解析C語言<b class='flag-5'>斷言</b>函數的使用

    何為斷言?斷言的作用有哪些?斷言的種類 斷言層次結構

    斷言主要用來檢查仿真過程中存在的時序問題,如果存在異常情況,斷言會報警。一般在數字電路設計中都要加入斷言,斷言占整個設計的比例應不少于30%。
    的頭像 發表于 08-28 11:16 ?8477次閱讀
    何為<b class='flag-5'>斷言</b>?<b class='flag-5'>斷言</b>的作用有哪些?<b class='flag-5'>斷言</b>的種類 <b class='flag-5'>斷言</b>層次結構

    C語言assert(斷言)簡介

    assert的功能,條件為真,程序繼續執行;如果斷言為假(false),則程序終止。
    的頭像 發表于 11-17 16:33 ?1179次閱讀
    C語言<b class='flag-5'>assert</b>(<b class='flag-5'>斷言</b>)簡介

    如何在if和assert中做選擇

    assert 就是為了驗證有效性,它最大作用就是:在開發階段,讓我們的程序盡可能地 crash。每一次的 crash,都意味著代碼中存在著 bug,需要我們去修正。 當我們寫下一個 asser
    發表于 04-08 06:13

    請問HAL函數對Handle有效性的檢查為什么不是用assert_param斷言?

    )); ...... } 以HAL_SPI_Init為例,hspi參數的檢查并沒有使用assert_param斷言宏,如果是我實現的話,我會用assert_param(hspi != NULL)實現。一般
    發表于 05-08 07:00

    斷言ASSERT)的用法

    包含#include 的語句之前插入 #define NDEBUG 來禁用assert調用,示例代碼如下: 1 #include 2 #define NDEBUG 3 #include   用法總結
    發表于 08-23 09:33

    C語言中斷言如何去使用

    文章目錄1 C語言中斷言的使用1.1 處理方式1.2 原型定義1.3 示例代碼1 C語言中斷言的使用1.1 處理方式如果斷言的條件返回錯誤,則終止程序執行。1.2 原型定義#inclu
    發表于 07-14 08:15

    何為斷言?斷言該怎么使用呢

    存在錯誤。因此,斷言是提高程序可靠性的有效手段。也是開發階段快速定位問題的一種很好防御式編程方法。在C語言中,斷言是一些條件判斷的宏。比如C語言內置斷言是用標準的 assert 宏實現
    發表于 09-21 14:59

    SystemVerilog斷言及其應用

    在介紹SystemVerilog 斷言的概念、使用斷言的好處、斷言的分類、斷言的組成以及斷言如何被插入到被測設計(DUT)的基礎上,本文
    發表于 05-24 16:35 ?0次下載
    SystemVerilog<b class='flag-5'>斷言</b>及其應用

    怎么理解Assert中的斷言語句?

    為什么項目中代碼需要有Assert斷言語句
    的頭像 發表于 03-03 14:12 ?2759次閱讀

    STM32函數庫Assert斷言機制

    編寫代碼時,我們總是會做出一些假設,斷言就是用于在代碼中捕捉這些假設,可以將斷言看作是異常處理的一種高級形式。斷言表示為一些布爾表達式,程序
    發表于 02-08 15:29 ?2次下載
    STM32函數庫<b class='flag-5'>Assert</b><b class='flag-5'>斷言</b>機制

    RT-Thread 大會:utest提供的斷言方法

    utest提供的斷言方法:Utest單元測試框架提供了-系列的assert 宏,用于測試用例判斷運行結果。
    的頭像 發表于 05-27 16:23 ?1237次閱讀
    RT-Thread 大會:utest提供的<b class='flag-5'>斷言</b>方法

    C語言斷言函數assert()的應用,清晰明了!

    這樣可以快速發現并定位軟件問題,同時對系統錯誤進行自動報警。對于在系統中隱藏很深,用其他手段極難發現的問題也可以通過斷言進行定位,從而縮短軟件問題定位時間,提高系統的可測性。
    的頭像 發表于 04-12 10:02 ?1127次閱讀

    防御式編程之斷言assert的使用

    防御式編程的重點就是需要防御一些程序未曾預料的錯誤,這是一種提高軟件質量的輔助性方法,斷言assert就用于防御式編程,編寫代碼時,我們總是會做出一些假設,
    的頭像 發表于 04-19 11:35 ?690次閱讀
    主站蜘蛛池模板: 亚洲午夜影视| 天天碰人人| 人人九九精| 中文字幕一区二区三区不卡| 在线观看免费av网| 狠狠狠狠干| 2021国产精品久久| 西西人体www303sw大胆高清| 欧美区在线| 男人扒开美女尿口无遮挡图片| 黄视频网站免费| 亚洲人成www在线播放| 天堂网最新版www| 人阁色第四影院在线观看| 美女一级毛片毛片在线播放| 国产亚洲新品一区二区| 91九色成人| 欧美黄色片免费观看| 2019天天操夜夜操| 性久久久久久久| 4438x成人网全国最大| 亚洲欧美日韩特级毛片| 成片一卡三卡四卡免费网站| 1024国产手机视频基地| 好黄好猛好爽好痛的视频| 男人j桶进女人j的视频| 亚洲a在线观看| 欧美特黄一级视频| 成人在线精品| 欧美夜夜夜| 亚洲一区二区三区中文字幕| 97色噜噜| 欧美一级欧美三级在线观看| 国产网站在线免费观看| 台湾黄色毛片| 好爽好紧好大的免费视频国产| 中国国产aa一级毛片| 日本片免费观看一区二区| 国产精品美女免费视频观看| 奇米狠狠操| 亚洲国产一区二区在线|