日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

3天內不再提示

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

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-03-03 14:12 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1寫在前面

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

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

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

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

2關于Assert斷言

什么是Assert斷言?

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

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

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

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

---來自百度百科

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

有這么一個數(shù)組和函數(shù):

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

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

假如這么調用:

int a; a = Fun(8);

很明顯,就這么調用,會出錯,且我們不容易發(fā)現(xiàn)錯誤在哪里。

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

3Assert斷言實際應用

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

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

不知道大家有沒有注意過assert_param函數(shù)?


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

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

B.HAL庫GPIO初始化:

相信大家都看到過STM32庫中的參數(shù)斷言語句,他的作用就是用于檢查函數(shù)傳入?yún)?shù)是否正確。

2.STM32參數(shù)斷言使能

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

#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.斷言失敗處理

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

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

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

    關注

    30

    文章

    4977

    瀏覽量

    74417
  • 異常處理
    +關注

    關注

    0

    文章

    15

    瀏覽量

    7475
  • 斷言
    +關注

    關注

    0

    文章

    8

    瀏覽量

    6870
  • ASSERT
    +關注

    關注

    0

    文章

    17

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    MAX16922:汽車應用的高效電源管理解決方案

    MAX16922:汽車應用的高效電源管理解決方案 在汽車電子領域,對于功率應用而言,高效且緊湊的電源管理解決方案至關重要。MAX16922 這款電源管理集成電路(PMIC),正是滿
    的頭像 發(fā)表于 03-12 15:30 ?245次閱讀

    條件的執(zhí)行語句

    條件執(zhí)行語句大多在if語句中使用,也在使用關系運算符(<,==,>等) 或者布爾值表達式(,!等)計算復雜表達式時使用。對于包含函數(shù)調 用的代碼片段,由于函數(shù)返回值會被
    發(fā)表于 12-12 08:25

    斷言(Assertion)使用

    斷言(Assertion),斷言用于在程序檢查特定條件是否滿足,如果條件為假,會觸發(fā)斷言失敗,并輸出相關信息 #define assert
    發(fā)表于 12-12 07:46

    求助,關于C代碼的printf打印的疑問求解

    在使用E203 testbench執(zhí)行附帶的benchmark測試用例時候,得到如下打印信息: CPU驗證小白一枚,有個問題不是很理解:黃色框框內的字符看起來應該是C代碼的printf語句
    發(fā)表于 11-10 07:54

    關于e203_ifu_litebpu的rsx1xn_rdrf寄存器的清除條件的疑問求解

    ~rs1xn_rdrf_r斷言)) 且 ( 當前沒有指令正在執(zhí)行(~jalr_rs1xn_dep斷言) 或 當前OITF為空(沒有流水的多周期指令指令),IR不為空時:IR即將被清除(IR的指令到達了最后一個
    發(fā)表于 10-20 10:01

    在使用rt_free釋放內存時觸發(fā)了斷言,怎么解決?

    的, 就是代碼從循環(huán)改成回調, 釋放就斷言了 內存使用沒有問題, 里面的內容都好好的, 只有釋放錯誤 這是斷言內容, 這是什么意思
    發(fā)表于 09-29 07:02

    Zynq7100 BSP移植,MSH終端不能正確顯示是為什么?

    有些問題。 情形一: 此時不注釋掉board.c的rt_console_set_device(RT_CONSOLE_DEVICE_NAME)語句。 main函數(shù)如下所示 此時的串口輸出 情形二
    發(fā)表于 09-19 06:26

    FreeModbus主機調試一直斷言錯誤是怎么回事?

    發(fā)送數(shù)據(jù)后,xMBMasterRTUReceiveFSM中斷言錯誤,但通過打印查看eSndState值為STATE_M_TX_XMIT eSndState[1] STATE_M_TX_IDLE
    發(fā)表于 09-17 07:15

    在線程刪除時遇到斷言,是什么原因導致的?

    在一個線程調用線程刪除函數(shù)刪除另外一個線程,這2個線程的優(yōu)先級是相等的,被刪除的線程也是動態(tài)創(chuàng)建的,出現(xiàn)了下面的斷言內容,一般是什么情況導致的?堆棧分配不足?刪除的線程和被刪除的線程哪個堆棧分配
    發(fā)表于 09-12 06:08

    人工智能行業(yè)如何使用for循環(huán)語句進行循環(huán)

    : 支持range()函數(shù)生成數(shù)字序列 可結合else語句使用 Java的for循環(huán): 傳統(tǒng)結構:for(初始化; 條件; 增量) 增強for循環(huán):for(類型 變量 : 集合) 主要用于數(shù)組和集合
    的頭像 發(fā)表于 09-10 12:55 ?711次閱讀

    線程超時函數(shù) assert 失敗是什么原因導致的?

    最近調試 gd32h759 遇到了一個十分奇怪的問題,在初步調通所有的邏輯功能后,發(fā)現(xiàn)系統(tǒng)經常會在運行一段時間后死在一個奇怪的線程超時函數(shù) assert 失敗導致卡死。用 cmbacktrace
    發(fā)表于 09-09 06:56

    Unicore標準NEMA語句GSA及說明

    本文介紹和芯星通的NEMA語句說明。
    的頭像 發(fā)表于 07-16 11:39 ?855次閱讀
    Unicore標準NEMA<b class='flag-5'>語句</b>GSA及說明

    基礎篇3:掌握Python的條件語句與循環(huán)

    在Python編程語言中,條件語句和循環(huán)是構成復雜邏輯和數(shù)據(jù)處理的基石。本篇基礎教程將幫助您深入了解Python的條件語句和循環(huán)結構,讓您能夠更好地控制程序流程。 條件語句 條件
    發(fā)表于 07-03 16:13

    詳解TIA Portal SCL編程語言中的IF語句

    IF 語句是編程中最基本和最重要的控制結構之一,它的主要作用是根據(jù)條件決定程序的執(zhí)行路徑,IF 語句是編程實現(xiàn)邏輯判斷和決策的基礎。
    的頭像 發(fā)表于 05-24 15:01 ?2193次閱讀
    詳解TIA Portal SCL編程語言中的IF<b class='flag-5'>語句</b>

    SVA斷言的用法教程

    SVA是System Verilog Assertion的縮寫,即用SV語言來描述斷言。斷言是對設計的屬性的描述,用以檢查設計是否按照預期執(zhí)行。
    的頭像 發(fā)表于 05-15 11:39 ?3812次閱讀
    SVA<b class='flag-5'>斷言</b>的用法教程
    县级市| 威宁| 沛县| 南涧| 沙河市| 临漳县| 开阳县| 富裕县| 大同县| 平南县| 威信县| 新宁县| 晋宁县| 伊川县| 成安县| 南平市| 文化| 马龙县| 株洲县| 苏尼特右旗| 通山县| 贵港市| 灌阳县| 安福县| 丰县| 股票| 千阳县| 长泰县| 荆门市| 饶河县| 玉环县| 德清县| 循化| 海城市| 陆良县| 酒泉市| 大厂| 桃园县| 赤城县| 延安市| 田林县|