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

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

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

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

老司機(jī)帶你深入理解ST庫中的 assert_param 語句

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

掃碼添加小助手

加入工程師交流群

還有沒上車的嗎

馬上要開車了

不等了,開始發(fā)車

老司機(jī),再稍我一個

車已經(jīng)發(fā)動了

你等下一班車吧

車子運(yùn)行中,大伙兒坐穩(wěn)啦!

庫函數(shù)中的assert_param

STM8STM32標(biāo)準(zhǔn)外設(shè)庫,或者HAL庫的stm8_conf.h、stm32···_conf.h文件中會看見如下一段代碼:

/* #define USE_FULL_ASSERT 1 */

#ifdef USE_FULL_ASSERT

#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))

voidassert_failed(uint8_t* file, uint32_t line);

#else

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

#endif

大概意思就是:如果定義了USE_FULL_ASSERT,則會宏定義:#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))

相當(dāng)于是一個條件語句。

此時,還需要我們實(shí)現(xiàn)assert_failed函數(shù),如果不實(shí)現(xiàn),則會報(bào)錯(后面來講具體如何實(shí)現(xiàn))。

而在其他地方調(diào)用情況(如GPIO)

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

{

assert_param(IS_GPIO_ALL_PERIPH(GPIOx));

assert_param(IS_GPIO_PIN(GPIO_Pin));

GPIOx->BSRR = GPIO_Pin;

}

調(diào)用assert_param的主要作用就是檢測參數(shù)正確與否,即我們所說的斷言。

assert_param詳情

1.STM8S中的assert_param

細(xì)心的朋友會發(fā)現(xiàn),STM8標(biāo)準(zhǔn)外設(shè)庫stm8s_conf.h中開啟了USE_FULL_ASSERT這個宏:

#define USE_FULL_ASSERT (1)

開啟USE_FULL_ASSERT這個宏,就意味著要實(shí)現(xiàn)assert_failed((uint8_t *)__FILE__, __LINE__))這個函數(shù);

那么我就在main.c文件下,按照官方的例程實(shí)現(xiàn)了assert_failed函數(shù):

#ifdef USE_FULL_ASSERT //斷言(參考官方)

void assert_failed(u8* file, u32 line)

{

while (1)

{

}

}

#endif

2.STM32中的assert_param

在STM32標(biāo)準(zhǔn)外設(shè)庫,HAL庫中的USE_FULL_ASSERT這個宏是被屏蔽了的。故程序運(yùn)行#define assert_param(expr) ((void)0)

也就是沒有做任何處理。

我之前提供的例程中,為了不動官方代碼,assert_param這個函數(shù)都是沒有使用的。

3.assert_failed((uint8_t *)__FILE__, __LINE__))

看到這個函數(shù),就要說下__FILE__和__LINE__這兩個標(biāo)準(zhǔn)定義。

__LINE__:正在編譯文件的行號

__FILE__:正在編譯文件的文件名

還不懂的同學(xué),建議參考之前的文章【ANSIC幾種特殊的標(biāo)準(zhǔn)定義(__FILE__、__LINE__、__STDC__···)】。

而上面只是申明,函數(shù)具體的實(shí)現(xiàn)還需要自己實(shí)現(xiàn)。理解了上面兩個參數(shù),相信大家都會知道如何實(shí)現(xiàn)了。需要根據(jù)自己項(xiàng)目情況來實(shí)現(xiàn)。常規(guī)舉例:

voidassert_failed(uint8_t* file, uint32_t line)

{

printf("Error code in file:%s,line:%u ",file,line);

}

這條語句在調(diào)及產(chǎn)品出廠之前測試是很有必要的,方便分析問題所在。正式推出版本,不定義USE_FULL_ASSERT這個宏既可以關(guā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)投訴
  • ST
    ST
    +關(guān)注

    關(guān)注

    32

    文章

    1193

    瀏覽量

    132740
  • STM32
    +關(guān)注

    關(guān)注

    2312

    文章

    11188

    瀏覽量

    374464
  • STM8
    +關(guān)注

    關(guān)注

    18

    文章

    393

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    深入剖析ST72321B系列8位MCU:特性、應(yīng)用與開發(fā)指南

    深入剖析ST72321B系列8位MCU:特性、應(yīng)用與開發(fā)指南 在電子工程師的日常工作,選擇合適的微控制器(MCU)是項(xiàng)目成功的關(guān)鍵。今天,我們將聚焦于ST72321BRx、
    的頭像 發(fā)表于 04-16 12:55 ?131次閱讀

    ST72104Gx、ST72215Gx、ST72216Gx、ST72254Gx 8位MCU深度解析

    72215Gx、ST72216Gx和ST72254Gx這一系列8位MCU,憑借其豐富的功能和出色的性能,在眾多應(yīng)用場景得到了廣泛應(yīng)用。今天,我們就來深入剖析這幾款MCU的特性、功能及
    的頭像 發(fā)表于 04-16 12:40 ?146次閱讀

    深入剖析 ST10F269-T3 微控制器:特性、應(yīng)用與設(shè)計(jì)要點(diǎn)

    深入剖析 ST10F269-T3 微控制器:特性、應(yīng)用與設(shè)計(jì)要點(diǎn) 引言 在嵌入式系統(tǒng)設(shè)計(jì)領(lǐng)域,選擇一款合適的微控制器至關(guān)重要,它直接影響到系統(tǒng)的性能、功能和穩(wěn)定性。ST10F269-T3 作為意法
    的頭像 發(fā)表于 04-15 15:55 ?92次閱讀

    深入解析HUF75321D3ST N - 通道UltraFET功率MOSFET

    深入解析HUF75321D3ST N - 通道UltraFET功率MOSFET 一、引言 在電子設(shè)計(jì)領(lǐng)域,功率MOSFET是至關(guān)重要的元件,廣泛應(yīng)用于各種電源管理和功率轉(zhuǎn)換電路。今天我們要
    的頭像 發(fā)表于 04-14 15:40 ?67次閱讀

    怎么理解TCP三次握手和四次揮手

    作為運(yùn)維工程師,無論是排查網(wǎng)絡(luò)故障、分析日志,還是配置負(fù)載均衡器,都需要對 TCP 協(xié)議有深入理解。很多"疑難雜癥"的根源,往往在于對 TCP 狀態(tài)轉(zhuǎn)換和連接管理理解不夠透徹。
    的頭像 發(fā)表于 04-10 16:42 ?753次閱讀

    深入理解積分型ADC

    深入理解積分型ADC 一、引言 作為電子工程師,我們在設(shè)計(jì)中常常需要將模擬信號轉(zhuǎn)換為數(shù)字信號,而積分型模數(shù)轉(zhuǎn)換器(ADCs)就是實(shí)現(xiàn)這一功能的重要手段之一。積分型ADC能夠提供高分辨率的模數(shù)轉(zhuǎn)換,并
    的頭像 發(fā)表于 04-02 09:15 ?614次閱讀

    如何理解直流無刷電機(jī)倒相的說法?

    直流無刷電機(jī)(BLDC)的“倒相”是電機(jī)控制領(lǐng)域的關(guān)鍵概念,其本質(zhì)是通過電子換相替代傳統(tǒng)有刷電機(jī)的機(jī)械換相,實(shí)現(xiàn)高效、精準(zhǔn)的轉(zhuǎn)矩控制。要深入理解這一說法,需從工作原理、控制邏輯及技術(shù)實(shí)現(xiàn)三個維度展開分析。
    的頭像 發(fā)表于 03-16 17:31 ?639次閱讀

    怎樣理解和調(diào)試變頻器的轉(zhuǎn)矩提升功能

    變頻器作為現(xiàn)代工業(yè)控制不可或缺的核心設(shè)備,其轉(zhuǎn)矩提升功能直接關(guān)系到電機(jī)啟動性能、負(fù)載適應(yīng)能力以及系統(tǒng)能效優(yōu)化。這一功能的合理設(shè)置,既是工程師調(diào)試經(jīng)驗(yàn)的體現(xiàn),也是實(shí)現(xiàn)設(shè)備高效運(yùn)行的關(guān)鍵技術(shù)環(huán)節(jié)。要深入理解轉(zhuǎn)矩提升的本質(zhì),需從原理出發(fā),結(jié)合應(yīng)用場景,掌握其調(diào)試方法論。
    的頭像 發(fā)表于 02-28 16:57 ?664次閱讀
    怎樣<b class='flag-5'>理解</b>和調(diào)試變頻器的轉(zhuǎn)矩提升功能

    【「Linux 設(shè)備驅(qū)動開發(fā)(第 2 版)」閱讀體驗(yàn)】+讀深入理解Linux內(nèi)核內(nèi)存分配

    每個內(nèi)存地址是虛擬的,不是直接指向RAM的任何地址。當(dāng)用戶訪問內(nèi)存的存儲單元時,都會進(jìn)行地址轉(zhuǎn)換以匹配相應(yīng)的物理內(nèi)存。書籍的第10章討論了五個主題,對Linux內(nèi)核內(nèi)存分配進(jìn)行詳細(xì)講解。 接著
    發(fā)表于 01-16 20:05

    深入淺出GMSSL:掌握SM2、SM3、SM4國密算法的高效實(shí)踐

    帶你從零開始,深入理解這三大核心算法在GMSSL的高效使用方式,幫助你在實(shí)際項(xiàng)目中快速落地國密安全方案。 本文將以通信定位二合一系列Air780EGH核心板為例,帶你快速上手GMS
    的頭像 發(fā)表于 12-12 18:20 ?858次閱讀
    <b class='flag-5'>深入</b>淺出GMSSL:掌握SM2、SM3、SM4國密算法的高效實(shí)踐

    GCC開發(fā)工程的模版

    line number * where the assert_param error has occurred. * @param file: pointer to the source file
    發(fā)表于 11-28 08:15

    K8s存儲類設(shè)計(jì)與Ceph集成實(shí)戰(zhàn)

    在云原生時代,存儲是制約應(yīng)用性能的關(guān)鍵瓶頸。本文將帶你深入理解K8s存儲類的設(shè)計(jì)原理,并手把手實(shí)現(xiàn)與Ceph的完美集成,讓你的集群存儲性能提升300%!
    的頭像 發(fā)表于 08-22 11:50 ?1063次閱讀

    SFUD驅(qū)動實(shí)戰(zhàn)手冊:串行SPI Flash開發(fā)全流程解析

    針對嵌入式系統(tǒng)SPI Flash的多樣化需求,SFUD提供了靈活且通用的解決方案。本文將從環(huán)境配置、初始化、基本操作到高級特性,完整展示SFUD的應(yīng)用流程,并通過具體示例幫助開
    的頭像 發(fā)表于 07-29 13:19 ?832次閱讀
    SFUD驅(qū)動<b class='flag-5'>庫</b>實(shí)戰(zhàn)手冊:串行SPI Flash開發(fā)全流程解析

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

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

    深入理解C語言:C語言循環(huán)控制

    在C語言編程,循環(huán)結(jié)構(gòu)是至關(guān)重要的,它可以讓程序重復(fù)執(zhí)行特定的代碼塊,從而提高編程效率。然而,為了避免程序進(jìn)入無限循環(huán),C語言提供了多種循環(huán)控制語句,如break、continue和goto,用于
    的頭像 發(fā)表于 04-29 18:49 ?2190次閱讀
    <b class='flag-5'>深入理解</b>C語言:C語言循環(huán)控制
    邵阳市| 芦山县| 万盛区| 建水县| 紫金县| 德惠市| 都匀市| 县级市| 钟祥市| 文安县| 嘉禾县| 高邑县| 内黄县| 商南县| 莱阳市| 砚山县| 鄂尔多斯市| 苏尼特右旗| 青川县| 河东区| 保靖县| 陕西省| 喀喇沁旗| 琼海市| 恭城| 岳阳市| 八宿县| 襄汾县| 肇东市| 岳阳市| 德格县| 庆城县| 平顺县| 黄山市| 许昌市| 永州市| 元谋县| 白银市| 峨边| 台中市| 股票|