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

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

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

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群

還有沒上車的嗎

馬上要開車了

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

老司機,再稍我一個

車已經發(fā)動了

你等下一班車吧

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

庫函數(shù)中的assert_param

STM8STM32標準外設庫,或者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__))

相當于是一個條件語句。

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

而在其他地方調用情況(如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;

}

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

assert_param詳情

1.STM8S中的assert_param

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

#define USE_FULL_ASSERT (1)

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

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

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

void assert_failed(u8* file, u32 line)

{

while (1)

{

}

}

#endif

2.STM32中的assert_param

在STM32標準外設庫,HAL庫中的USE_FULL_ASSERT這個宏是被屏蔽了的。故程序運行#define assert_param(expr) ((void)0)

也就是沒有做任何處理。

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

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

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

__LINE__:正在編譯文件的行號

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

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

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

voidassert_failed(uint8_t* file, uint32_t line)

{

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

}

這條語句在調及產品出廠之前測試是很有必要的,方便分析問題所在。正式推出版本,不定義USE_FULL_ASSERT這個宏既可以關閉了。

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

    關注

    32

    文章

    1193

    瀏覽量

    132785
  • STM32
    +關注

    關注

    2313

    文章

    11195

    瀏覽量

    374740
  • STM8
    +關注

    關注

    18

    文章

    393

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    深入理解單片機的位數(shù)對性能的影響

    設備也能在低功耗模式下有效運行。 64位單片機:雖然提供最高的性能,但也是能耗最大的。它們通常用于桌面計算機和服務器等不太在意功耗的應用。 五、 成本 8位單片機:由于結構簡單,制造成
    發(fā)表于 04-27 15:05

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

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

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

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

    深入剖析 ST10F269-T3 微控制器:特性、應用與設計要點

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

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

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

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

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

    深入理解積分型ADC

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

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

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

    怎樣理解和調試變頻器的轉矩提升功能

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

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

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

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

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

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

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

    K8s存儲類設計與Ceph集成實戰(zhàn)

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

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

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

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

    在Python編程語言中,條件語句和循環(huán)是構成復雜邏輯和數(shù)據處理的基石。本篇基礎教程將幫助您深入了解Python的條件語句和循環(huán)結構,讓您能夠更好地控制程序流程。 條件
    發(fā)表于 07-03 16:13
    襄城县| 雷山县| 祥云县| 厦门市| 锦州市| 昌都县| 林口县| 广平县| 泗水县| 交城县| 台东县| 盐亭县| 墨竹工卡县| 新干县| 依安县| 和硕县| 天水市| 台州市| 定西市| 沈阳市| 盖州市| 运城市| 子长县| 永川市| 远安县| 内丘县| 广平县| 望江县| 定襄县| 泾源县| 井陉县| 纳雍县| 华池县| 铅山县| 呼和浩特市| 浪卡子县| 黑龙江省| 阆中市| 达日县| 星子县| 柳江县|