chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

還有沒上車的嗎

馬上要開車了

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

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

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

你等下一班車吧

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

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

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

/* #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è)條件語句。

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

assert_param詳情

1.STM8S中的assert_param

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

#define USE_FULL_ASSERT (1)

開啟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)

也就是沒有做任何處理。

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

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

看到這個(gè)函數(shù),就要說下__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)目情況來實(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)品出廠之前測(cè)試是很有必要的,方便分析問題所在。正式推出版本,不定義USE_FULL_ASSERT這個(gè)宏既可以關(guān)閉了。

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

    關(guān)注

    32

    文章

    1184

    瀏覽量

    131579
  • STM32
    +關(guān)注

    關(guān)注

    2301

    文章

    11073

    瀏覽量

    369391
  • STM8
    +關(guān)注

    關(guān)注

    18

    文章

    393

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

    SFUD驅(qū)動(dòng)庫(kù)實(shí)戰(zhàn)手冊(cè):串行SPI Flash開發(fā)全流程解析

    針對(duì)嵌入式系統(tǒng)SPI Flash的多樣化需求,SFUD庫(kù)提供了靈活且通用的解決方案。本文將從環(huán)境配置、庫(kù)初始化、基本操作到高級(jí)特性,完整展示SFUD庫(kù)的應(yīng)用流程,并通過具體示例幫助開
    的頭像 發(fā)表于 07-29 13:19 ?403次閱讀
    SFUD驅(qū)動(dòng)<b class='flag-5'>庫(kù)</b>實(shí)戰(zhàn)手冊(cè):串行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語言:函數(shù)—編程的“積木塊”藝術(shù)

    在編程的世界里,函數(shù)就像建筑的“積木塊”——它們是構(gòu)建復(fù)雜程序的基石。通過靈活組合這些模塊,開發(fā)者能打造出功能強(qiáng)大且結(jié)構(gòu)清晰的代碼。函數(shù)之所以成為C語言的核心,正是因?yàn)樗鉀Q了編程的三大關(guān)
    的頭像 發(fā)表于 06-30 17:26 ?1280次閱讀
    <b class='flag-5'>深入理解</b>C語言:函數(shù)—編程<b class='flag-5'>中</b>的“積木塊”藝術(shù)

    深入理解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 ?1517次閱讀
    <b class='flag-5'>深入理解</b>C語言:C語言循環(huán)控制

    半導(dǎo)體器件微量摻雜元素的EDS表征

    微量摻雜元素在半導(dǎo)體器件的發(fā)展起著至關(guān)重要的作用,可以精準(zhǔn)調(diào)控半導(dǎo)體的電學(xué)、光學(xué)性能。對(duì)器件微量摻雜元素的準(zhǔn)確表征和分析是深入理解半導(dǎo)體器件特性、優(yōu)化器件性能的關(guān)鍵步驟,然而由于微量摻雜元素含量極低,對(duì)它的檢測(cè)和表征也面臨很
    的頭像 發(fā)表于 04-25 14:29 ?1238次閱讀
    半導(dǎo)體器件<b class='flag-5'>中</b>微量摻雜元素的EDS表征

    可靠性測(cè)試結(jié)構(gòu)設(shè)計(jì)概述

    深入理解設(shè)計(jì)規(guī)則,設(shè)計(jì)者可在可靠性測(cè)試結(jié)構(gòu)優(yōu)化兼顧性能、成本與質(zhì)量,推動(dòng)半導(dǎo)體技術(shù)的持續(xù)創(chuàng)新。
    的頭像 發(fā)表于 04-11 14:59 ?878次閱讀
    可靠性測(cè)試結(jié)構(gòu)設(shè)計(jì)概述

    LPCVD方法在多晶硅制備的優(yōu)勢(shì)與挑戰(zhàn)

    本文圍繞單晶硅、多晶硅與非晶硅三種形態(tài)的結(jié)構(gòu)特征、沉積技術(shù)及其工藝參數(shù)展開介紹,重點(diǎn)解析LPCVD方法在多晶硅制備的優(yōu)勢(shì)與挑戰(zhàn),并結(jié)合不同工藝條件對(duì)材料性能的影響,幫助讀者深入理解硅材料在先進(jìn)微納制造的應(yīng)用與工藝演進(jìn)路徑。
    的頭像 發(fā)表于 04-09 16:19 ?1319次閱讀
    LPCVD方法在多晶硅制備<b class='flag-5'>中</b>的優(yōu)勢(shì)與挑戰(zhàn)

    HarmonyOS Next V2 @Local 和@Param

    HarmonyOS Next V2 @Local 和@Param @Local 背景 @Local 是 harmony 應(yīng)用開發(fā)的 v2 版本 對(duì)標(biāo)**@State**的狀態(tài)管理修飾器,它解決了
    的頭像 發(fā)表于 04-02 18:27 ?663次閱讀
    HarmonyOS Next V2 @Local 和@<b class='flag-5'>Param</b>

    在外部中斷中將printf寫入,外部中斷LED可以翻轉(zhuǎn),但串口不可顯示,為什么?

    number where the assert_param error has occurred. where the assert_param error has occurred.
    發(fā)表于 03-13 06:19

    技術(shù)干貨驛站 ▏深入理解C語言:嵌套循環(huán)與循環(huán)控制的底層原理

    大家好!在上一節(jié),我們學(xué)習(xí)了C語言中的基本循環(huán)語句,如for、while和do...while循環(huán)。今天,我們將進(jìn)一步探討嵌套循環(huán)和循環(huán)控制,這些技巧可以幫助我們實(shí)現(xiàn)更復(fù)雜的邏輯操作。無論是處理
    的頭像 發(fā)表于 02-21 18:26 ?888次閱讀
    技術(shù)干貨驛站  ▏<b class='flag-5'>深入理解</b>C語言:嵌套循環(huán)與循環(huán)控制的底層原理

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

    異?;虮罎?。為深入理解動(dòng)態(tài)鏈接機(jī)制及其工作原理,我重溫了《程序員的自我修養(yǎng)》,并通過實(shí)踐演示與反匯編分析,了解了動(dòng)態(tài)鏈接的過程。 本文將深入探討Linux系統(tǒng)的動(dòng)態(tài)鏈接庫(kù)機(jī)制,這其中
    的頭像 發(fā)表于 12-18 10:06 ?805次閱讀
    <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語言:循環(huán)語句的應(yīng)用與優(yōu)化技巧

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

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

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

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

    最新的自然語言處理(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 ?1523次閱讀