欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

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

黃工的嵌入式技術(shù)圈 ? 來(lái)源:黃工的嵌入式技術(shù)圈 ? 2020-03-14 14:52 ? 次閱讀

還有沒(méi)上車(chē)的嗎

馬上要開(kāi)車(chē)了

不等了,開(kāi)始發(fā)車(chē)

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

車(chē)已經(jīng)發(fā)動(dòng)了

你等下一班車(chē)吧

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

庫(kù)函數(shù)中的assert_param

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

/* #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,則會(huì)宏定義:#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))

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

此時(shí),還需要我們實(shí)現(xiàn)assert_failed函數(shù),如果不實(shí)現(xiàn),則會(huì)報(bào)錯(cuò)(后面來(lái)講具體如何實(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的主要作用就是檢測(cè)參數(shù)正確與否,即我們所說(shuō)的斷言。

assert_param詳情

1.STM8S中的assert_param

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

#define USE_FULL_ASSERT (1)

開(kāi)啟USE_FULL_ASSERT這個(gè)宏,就意味著要實(shí)現(xiàn)assert_failed((uint8_t *)__FILE__, __LINE__))這個(gè)函數(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è)庫(kù),HAL庫(kù)中的USE_FULL_ASSERT這個(gè)宏是被屏蔽了的。故程序運(yùn)行#define assert_param(expr) ((void)0)

也就是沒(méi)有做任何處理。

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

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

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

__LINE__:正在編譯文件的行號(hào)

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

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

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

voidassert_failed(uint8_t* file, uint32_t line)

{

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

}

這條語(yǔ)句在調(diào)及產(chǎn)品出廠之前測(cè)試是很有必要的,方便分析問(wèn)題所在。正式推出版本,不定義USE_FULL_ASSERT這個(gè)宏既可以關(guān)閉了。

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

    關(guān)注

    32

    文章

    1140

    瀏覽量

    129198
  • STM32
    +關(guān)注

    關(guān)注

    2272

    文章

    10926

    瀏覽量

    357751
  • STM8
    +關(guān)注

    關(guān)注

    18

    文章

    392

    瀏覽量

    56979
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    深入探討Linux系統(tǒng)的動(dòng)態(tài)鏈接庫(kù)機(jī)制

    異常或崩潰。為深入理解動(dòng)態(tài)鏈接機(jī)制及其工作原理,我重溫了《程序員的自我修養(yǎng)》,并通過(guò)實(shí)踐演示與反匯編分析,了解了動(dòng)態(tài)鏈接的過(guò)程。 本文將深入探討Linux系統(tǒng)的動(dòng)態(tài)鏈接庫(kù)機(jī)制,這其中
    的頭像 發(fā)表于 12-18 10:06 ?204次閱讀
    <b class='flag-5'>深入</b>探討Linux系統(tǒng)<b class='flag-5'>中</b>的動(dòng)態(tài)鏈接<b class='flag-5'>庫(kù)</b>機(jī)制

    深入理解C語(yǔ)言:循環(huán)語(yǔ)句的應(yīng)用與優(yōu)化技巧

    能讓你的代碼更加簡(jiǎn)潔明了,還能顯著提升程序執(zhí)行效率。本文將詳細(xì)介紹C語(yǔ)言中的三種常見(jiàn)循環(huán)結(jié)構(gòu)——while循環(huán)、for循環(huán)和do...while循環(huán),帶你深入理解
    的頭像 發(fā)表于 12-07 01:11 ?259次閱讀
    <b class='flag-5'>深入理解</b>C語(yǔ)言:循環(huán)<b class='flag-5'>語(yǔ)句</b>的應(yīng)用與優(yōu)化技巧

    技術(shù)干貨驛站 ▏深入理解C語(yǔ)言:掌握C語(yǔ)言條件判斷,從if到switch的應(yīng)用

    在編程,條件判斷語(yǔ)句是控制程序流程的核心元素之一。它們使得程序能夠根據(jù)不同的輸入和狀態(tài),做出相應(yīng)的決策。特別是在C語(yǔ)言中,條件判斷語(yǔ)句的使用極為廣泛,涵蓋了從簡(jiǎn)單的if語(yǔ)句到更復(fù)雜的
    的頭像 發(fā)表于 11-09 01:10 ?449次閱讀
    技術(shù)干貨驛站 ▏<b class='flag-5'>深入理解</b>C語(yǔ)言:掌握C語(yǔ)言條件判斷,從if到switch的應(yīng)用

    深入理解 Llama 3 的架構(gòu)設(shè)計(jì)

    最新的自然語(yǔ)言處理(NLP)技術(shù)和深度學(xué)習(xí)算法,旨在提供更加自然、流暢和智能的對(duì)話體驗(yàn)。 1. 核心組件 Llama 3的架構(gòu)設(shè)計(jì)可以分為以下幾個(gè)核心組件: 1.1 預(yù)處理模塊 預(yù)處理模塊負(fù)責(zé)將原始文本數(shù)據(jù)轉(zhuǎn)換為模型可以理解的格式。這包括文本清洗
    的頭像 發(fā)表于 10-27 14:41 ?661次閱讀

    深入理解FPD-link III ADAS解串器HUB產(chǎn)品

    電子發(fā)燒友網(wǎng)站提供《深入理解FPD-link III ADAS解串器HUB產(chǎn)品.pdf》資料免費(fèi)下載
    發(fā)表于 09-06 09:58 ?1次下載
    <b class='flag-5'>深入理解</b>FPD-link III ADAS解串器HUB產(chǎn)品

    技術(shù)干貨驛站 ▏深入理解C語(yǔ)言:基本數(shù)據(jù)類(lèi)型和變量

    在C語(yǔ)言中,數(shù)據(jù)類(lèi)型和變量是編程的基礎(chǔ),也是理解更復(fù)雜概念的關(guān)鍵。數(shù)據(jù)類(lèi)型決定了變量的內(nèi)存分配、存儲(chǔ)范圍和操作方式,而變量則是存儲(chǔ)數(shù)據(jù)的容器。本篇文章將從基本數(shù)據(jù)類(lèi)型和變量?jī)蓚€(gè)方面,帶你深入了解C
    的頭像 發(fā)表于 07-26 17:53 ?2274次閱讀
    技術(shù)干貨驛站 ▏<b class='flag-5'>深入理解</b>C語(yǔ)言:基本數(shù)據(jù)類(lèi)型和變量

    KW-2402鉑RTD傳感器的SPICE模型的其中一句LTspice仿真語(yǔ)句是什么意思呢?

    我想問(wèn)下,.param UNIT=(IF(T1&gt;0,1,0))這句仿真語(yǔ)句,怎么理解呢? 最近在做測(cè)溫電路,正好讀到了ADI智庫(kù)新出來(lái)的一個(gè)資料(非常非常好)??吹竭@個(gè)仿
    發(fā)表于 06-04 13:30

    stm8l用iar download debug時(shí)出錯(cuò)的原因?

    錯(cuò)誤提示是:Error[Li005]: no definition for \"assert_param\" [referenced from D
    發(fā)表于 05-13 06:41

    STM32F103C8T6時(shí)鐘RTC每次啟動(dòng)變慢1s是為什么?

    ; /* Check input parameters */ if(hrtc == NULL) { return HAL_ERROR; } /* Check the parameters */ assert_param
    發(fā)表于 05-13 06:25

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

    */ if (hspi == NULL) { return HAL_ERROR; } /* Check the parameters */ assert_param(IS_SPI_ALL_INSTANCE
    發(fā)表于 05-08 07:00

    stm32F407 USART發(fā)送數(shù)據(jù),TC不能置位是怎么回事?

    ; /* Check the parameters */ assert_param(IS_USART_ALL_PERIPH(USARTx)); assert_param(IS_USART_FLAG
    發(fā)表于 04-25 06:15

    深入理解FFmpeg閱讀體驗(yàn)》

    ,運(yùn)動(dòng)圖像專家組)聯(lián)合制定的視頻編碼標(biāo)準(zhǔn)。而X264是一個(gè)開(kāi)源的H.264/MPEG-4 AVC視頻編碼函數(shù)庫(kù),是最好的有損視頻編碼器之一。 先直接從網(wǎng)絡(luò)(http
    發(fā)表于 04-16 22:54

    如何在if和assert做選擇

    面的定義可以看到: 如果定義了宏 NDEBUG,那么 assert() 宏將不做什么動(dòng)作,也就是相當(dāng)于一條空語(yǔ)句:(void)0;,當(dāng)在 release 階段編譯代碼的時(shí)候,都會(huì)在編譯選項(xiàng)
    發(fā)表于 04-08 06:13

    深入理解 FPGA 的基礎(chǔ)結(jié)構(gòu)

    轉(zhuǎn)載地址:https://zhuanlan.zhihu.com/p/506828648 文章很詳細(xì)的介紹了FPGA的基礎(chǔ)結(jié)構(gòu),能更直觀的理解內(nèi)部結(jié)構(gòu)原理。對(duì)深入學(xué)習(xí)很有幫助。 以下是正文: 這一段
    發(fā)表于 04-03 17:39

    深入理解數(shù)據(jù)備份的關(guān)鍵原則:應(yīng)用一致性與崩潰一致性的區(qū)別

    深入理解數(shù)據(jù)備份的關(guān)鍵原則:應(yīng)用一致性與崩潰一致性的區(qū)別 在數(shù)字化時(shí)代,數(shù)據(jù)備份成為了企業(yè)信息安全的核心環(huán)節(jié)。但在備份過(guò)程,兩個(gè)關(guān)鍵概念——應(yīng)用一致性和崩潰一致性,常常被誤解或混淆。本文旨在闡明
    的頭像 發(fā)表于 03-11 11:29 ?1033次閱讀
    <b class='flag-5'>深入理解</b>數(shù)據(jù)備份的關(guān)鍵原則:應(yīng)用一致性與崩潰一致性的區(qū)別