哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么項(xiàng)目中的代碼需要有Assert斷言語(yǔ)句Assert斷言的詳細(xì)資料說(shuō)明

5RJg_mcuworld ? 來(lái)源:未知 ? 2019-03-30 11:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1寫(xiě)在前面

有經(jīng)驗(yàn)的工程師都知道,隨著軟件版本的迭代,或者需求不斷變更,我們的代碼就會(huì)變得越來(lái)越“臃腫”。

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

那么,我們?nèi)绾握页鲞@些隱藏的Bug呢?

今天就說(shuō)其中的一點(diǎn):Assert斷言。

為什么項(xiàng)目中的代碼需要有Assert斷言語(yǔ)句Assert斷言的詳細(xì)資料說(shuō)明

2關(guān)于Assert斷言

什么是Assert斷言?

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

斷言表示為一些布爾表達(dá)式,程序員相信在程序中的某個(gè)特定點(diǎn)該表達(dá)式值為真。

可以在任何時(shí)候啟用和禁用斷言驗(yàn)證,因此可以在測(cè)試時(shí)啟用斷言,而在部署時(shí)禁用斷言。

同樣,程序投入運(yùn)行后,最終用戶(hù)在遇到問(wèn)題時(shí)可以重新啟用斷言。

這里的概念,可能不好理解,簡(jiǎn)單舉一個(gè)例子來(lái)說(shuō)明吧。

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

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

如果我們函數(shù)中不加Assert斷言語(yǔ)句,你覺(jué)得直接調(diào)用會(huì)這個(gè)函數(shù)會(huì)有風(fēng)險(xiǎn)嗎?

假如這么調(diào)用:

int a;a = Fun(8);

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

但是,假如添加有Assert斷言語(yǔ)句,錯(cuò)誤就能一下找出來(lái)。

3Assert斷言實(shí)際應(yīng)用

其實(shí),Assert斷言在很多標(biāo)準(zhǔn)的代碼中,基本都有。我們還是拿STM32的代碼來(lái)說(shuō)明吧。

不管是STM32標(biāo)準(zhǔn)外設(shè)庫(kù),還是HAL、LL庫(kù)源代碼里面都有Assert斷言機(jī)制。

不知道大家有沒(méi)有注意過(guò)assert_param函數(shù)?

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

A.標(biāo)準(zhǔn)外設(shè)庫(kù)GPIO初始化:

B.HAL庫(kù)GPIO初始化:

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

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

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

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

也就是assert_param不起作用。

如果需要使用,就需要對(duì)其使能才行。

A.標(biāo)準(zhǔn)外設(shè)庫(kù)

B.HAL庫(kù)

道理一樣,使能ASSERT,可以手動(dòng):

#define USE_FULL_ASSERT 1U

也可以通過(guò)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ù)實(shí)際項(xiàng)目需求,做出一定處理。比如:打印錯(cuò)誤信息,存儲(chǔ)錯(cuò)誤日志等。

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

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

    關(guān)注

    2312

    文章

    11189

    瀏覽量

    374502
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4975

    瀏覽量

    74344
  • GPIO
    +關(guān)注

    關(guān)注

    16

    文章

    1333

    瀏覽量

    56429

原文標(biāo)題:為什么項(xiàng)目中的代碼需要有Assert斷言語(yǔ)句?

文章出處:【微信號(hào):mcuworld,微信公眾號(hào):嵌入式資訊精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    C語(yǔ)言中assert的使用

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

    解析C語(yǔ)言斷言函數(shù)的使用

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

    C語(yǔ)言assert(斷言)簡(jiǎn)介

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

    如何在if和assert中做選擇

    assert 就是為了驗(yàn)證有效性,它最大作用就是:在開(kāi)發(fā)階段,讓我們的程序盡可能地 crash。每一次的 crash,都意味著代碼中存在著 bug,需要我們?nèi)バ拚?當(dāng)我們寫(xiě)下一個(gè) asser
    發(fā)表于 04-08 06:13

    請(qǐng)問(wèn)HAL函數(shù)對(duì)Handle有效性的檢查為什么不是用assert_param斷言?

    )); ...... } 以HAL_SPI_Init為例,hspi參數(shù)的檢查并沒(méi)有使用assert_param斷言宏,如果是我實(shí)現(xiàn)的話(huà),我會(huì)用assert_param(hspi != NULL)實(shí)現(xiàn)。一般
    發(fā)表于 05-08 07:00

    斷言(Assertion)使用

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

    斷言ASSERT)的用法

    包含#include 的語(yǔ)句之前插入 #define NDEBUG 來(lái)禁用assert調(diào)用,示例代碼如下: 1 #include 2 #define NDEBUG 3 #include   用法總結(jié)
    發(fā)表于 08-23 09:33

    C語(yǔ)言中斷言如何去使用

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

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

    存在錯(cuò)誤。因此,斷言是提高程序可靠性的有效手段。也是開(kāi)發(fā)階段快速定位問(wèn)題的一種很好防御式編程方法。在C語(yǔ)言中,斷言是一些條件判斷的宏。比如C語(yǔ)言?xún)?nèi)置斷言是用標(biāo)準(zhǔn)的 assert 宏實(shí)現(xiàn)
    發(fā)表于 09-21 14:59

    SystemVerilog斷言及其應(yīng)用

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

    怎么理解Assert中的斷言語(yǔ)句?

    為什么項(xiàng)目中代碼需要有Assert斷言語(yǔ)句?
    的頭像 發(fā)表于 03-03 14:12 ?3663次閱讀

    STM32函數(shù)庫(kù)Assert斷言機(jī)制

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

    RT-Thread 大會(huì):utest提供的斷言方法

    utest提供的斷言方法:Utest單元測(cè)試框架提供了-系列的assert 宏,用于測(cè)試用例判斷運(yùn)行結(jié)果。
    的頭像 發(fā)表于 05-27 16:23 ?1809次閱讀
    RT-Thread 大會(huì):utest提供的<b class='flag-5'>斷言</b>方法

    C語(yǔ)言斷言函數(shù)assert()的應(yīng)用,清晰明了!

    這樣可以快速發(fā)現(xiàn)并定位軟件問(wèn)題,同時(shí)對(duì)系統(tǒng)錯(cuò)誤進(jìn)行自動(dòng)報(bào)警。對(duì)于在系統(tǒng)中隱藏很深,用其他手段極難發(fā)現(xiàn)的問(wèn)題也可以通過(guò)斷言進(jìn)行定位,從而縮短軟件問(wèn)題定位時(shí)間,提高系統(tǒng)的可測(cè)性。
    的頭像 發(fā)表于 04-12 10:02 ?2177次閱讀

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

    防御式編程的重點(diǎn)就是需要防御一些程序未曾預(yù)料的錯(cuò)誤,這是一種提高軟件質(zhì)量的輔助性方法,斷言assert就用于防御式編程,編寫(xiě)代碼時(shí),我們總是會(huì)做出一些假設(shè),
    的頭像 發(fā)表于 04-19 11:35 ?1517次閱讀
    金沙县| 涟源市| 丽江市| 泽普县| 云阳县| 衡水市| 绍兴市| 惠水县| 宝坻区| 长宁区| 平度市| 农安县| 开平市| 德昌县| 靖边县| 凤山市| 台中市| 石楼县| 朝阳县| 宁武县| 吴桥县| 库伦旗| 抚远县| 云和县| 崇明县| 宁武县| 井陉县| 张掖市| 洱源县| 屏山县| 安仁县| 明光市| 鄂托克前旗| 岳池县| 中山市| 沾化县| 凌海市| 离岛区| 乐山市| 铜陵市| 丰县|