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

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

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

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

HAL和標(biāo)準(zhǔn)庫的Assert斷言機(jī)制

strongerHuang ? 來源:strongerHuang ? 作者:strongerHuang ? 2022-12-12 10:22 ? 次閱讀

偶爾會(huì)有讀者問:改bug有什么技巧?

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

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

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

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

關(guān)于Assert斷言

什么是Assert斷言?

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

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

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

同樣,程序投入運(yùn)行后,最終用戶在遇到問題時(shí)可以重新啟用斷言。 ---來自百度百科

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

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

int Array[5] = {0xA1, 0xB2, 0xC3, 0xD4, 0xE5};


int Fun(char i)
{
    return Array[i];
}
如果我們函數(shù)中不加Assert斷言語句,你覺得直接調(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斷言語句,錯(cuò)誤就能一下找出來。

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

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

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

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

1.拿STM32最常見的GPIO初始化函數(shù)為例 A.標(biāo)準(zhǔn)外設(shè)庫GPIO初始化:

d0db5f92-787c-11ed-8abf-dac502259ad0.jpg

B.HAL庫GPIO初始化:

d0f7a79c-787c-11ed-8abf-dac502259ad0.jpg ?
相信大家都看到過STM32庫中的參數(shù)斷言語句,他的作用就是用于檢查函數(shù)傳入?yún)?shù)是否正確

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

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

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

也就是assert_param不起作用。

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

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

d111c67c-787c-11ed-8abf-dac502259ad0.jpg ?

B.HAL庫

道理一樣,使能ASSERT,可以手動(dòng):
#define USE_FULL_ASSERT    1U
也可以通過STM32CubeMX配置:

d12657f4-787c-11ed-8abf-dac502259ad0.jpg ?
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ò)誤日志等。 本文就講到這里,具體如何應(yīng)用實(shí)際項(xiàng)目中,還需要大家進(jìn)一步深入理解其中精髓。

審核編輯:湯梓紅

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

    關(guān)注

    0

    文章

    31

    瀏覽量

    7495
  • ASSERT
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    7258
  • HAL
    HAL
    +關(guān)注

    關(guān)注

    2

    文章

    71

    瀏覽量

    12639

原文標(biāo)題:HAL和標(biāo)準(zhǔn)庫的Assert斷言機(jī)制

文章出處:【微信號:strongerHuang,微信公眾號:strongerHuang】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    C語言中assert的使用

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

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

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

    C語言assert(斷言)簡介

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

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

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

    HAL標(biāo)準(zhǔn)的原理區(qū)別

    HAL的學(xué)習(xí)HAL標(biāo)準(zhǔn)的原理區(qū)別串口通信實(shí)驗(yàn)包含的文件區(qū)別具體代碼區(qū)別總結(jié)
    發(fā)表于 07-29 08:48

    標(biāo)準(zhǔn)HAL有啥區(qū)別

    “健康守護(hù)者”——STM32標(biāo)準(zhǔn)HAL的比較使用STM32芯片的時(shí)候呢,大家可能都喜歡用,什么標(biāo)
    發(fā)表于 08-04 08:22

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

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

    STM32標(biāo)準(zhǔn)改為HAL的程序?qū)崿F(xiàn)

    標(biāo)準(zhǔn)占絕大多數(shù),自己買的板子跟的資料也一般是標(biāo)準(zhǔn)HAL很少,不過要是使用STM32Cub
    發(fā)表于 11-22 11:23 ?3.5w次閱讀

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

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

    STM32Cube HAL中斷處理機(jī)制 以及回調(diào)函數(shù)實(shí)現(xiàn)原理

    STM32Cube HAL中斷處理機(jī)制,以及回調(diào)函數(shù)實(shí)現(xiàn)原理
    的頭像 發(fā)表于 03-03 14:01 ?1.3w次閱讀

    仿標(biāo)準(zhǔn),對HAL的補(bǔ)充代碼

    前言: ST官方從2017年下半年開始就不再維護(hù)升級標(biāo)準(zhǔn),轉(zhuǎn)而推廣HAL。到2019年,HAL
    發(fā)表于 11-29 11:36 ?30次下載
    仿<b class='flag-5'>標(biāo)準(zhǔn)</b><b class='flag-5'>庫</b>,對<b class='flag-5'>HAL</b><b class='flag-5'>庫</b>的補(bǔ)充代碼

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

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

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

    防御式編程的重點(diǎn)就是需要防御一些程序未曾預(yù)料的錯(cuò)誤,這是一種提高軟件質(zhì)量的輔助性方法,斷言assert就用于防御式編程,編寫代碼時(shí),我們總是會(huì)做出一些假設(shè),斷言就是用于在代碼中捕捉這些假設(shè)。使用
    的頭像 發(fā)表于 04-19 11:35 ?690次閱讀

    STM32 HAL的功能和使用方法 STM32 HAL標(biāo)準(zhǔn)的區(qū)別

    和可維護(hù)性,從而節(jié)省開發(fā)成本和時(shí)間。STM32 HAL是STM32系列芯片的HAL,由ST公司提供和維護(hù)。下面將介紹STM32 HAL
    發(fā)表于 08-08 18:21 ?4547次閱讀

    HAL標(biāo)準(zhǔn)的區(qū)別 HAL與CMSIS的關(guān)系

    在嵌入式系統(tǒng)開發(fā)中,HAL(硬件抽象層)標(biāo)準(zhǔn)是兩種常用的軟件,它們在功能和使用場景上有所不同。 1.
    的頭像 發(fā)表于 12-02 14:02 ?908次閱讀
    主站蜘蛛池模板: 天天免费视频| 精品啪啪| 中文字幕一二三区乱码老| 天天操夜夜操美女| 丁香花五月婷婷开心| 欧美xxxxxbbbb| 日本高清免费aaaaa大片视频| 国产亚洲精品久久久极品美女| 亚洲第一黄色网址| 77788色淫视频免费观看| 国模龙园园私拍337p| 美女国产| 男人天堂网在线观看| 九色在线播放| 99一级毛片| 91精选视频在线观看| 天天做天天添天天谢| 天天舔天天干天天操| 欧美ggg| 天天操操操操| 大香线蕉97久久| 中国同志chinese小彬tv| 国产第一页在线观看| 欧美xxx另类| 91美女啪啪| 亚洲一级视频在线观看| semimi亚洲综合在线观看| 亚a在线| 欧美一区二区三区不卡视频| 亚洲卡5卡6卡7国色天香| 1024 cc香蕉在线观看看中文| 日韩高清在线日韩大片观看网址 | 黄色毛片基地| 国产汉服被啪福利在线观看| 毛片2016免费视频| 搞黄视频网站| 三级全黄a| 亚洲 欧美 成人| 亚洲色图图片| 四虎影院新网址| 欧美综合一区二区三区|