在使用STM8或STM32的過(guò)程中,在官方的庫(kù)文件中經(jīng)常能看到assert_param()的使用,一直都是對(duì)它無(wú)視,因?yàn)樗挥绊懯褂?。但作為一名合格的、?yán)謹(jǐn)?shù)墓こ處焷?lái)講,連assert_param()斷言都沒搞明白,都沒弄清楚,自己感覺還是有點(diǎn)丟人的。
其實(shí)這個(gè)就是斷言,它的主要用途是在編程的過(guò)程中為程序員提供參數(shù)檢查,對(duì)于Release之后,對(duì)終端用戶而言是無(wú)用的。它是在開發(fā)調(diào)試過(guò)程中,對(duì)參數(shù)錯(cuò)誤進(jìn)行提示,以便程序員提高開發(fā)效率。
首先,在STM8L101F3P6官方提供的模版庫(kù)的main.c文件中我們會(huì)看到如下代碼:
void main(void)
{
/* Infinite loop */
while (1)
{
}
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval : None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %drn", file, line) */
/* Infinite loop */
while (1)
{
}
}
#endif
其含義是:如果定義了USE_FULL_ASSERT宏,則程序包含了assert_failed()這個(gè)函數(shù)的定義。
在stm8l10x_conf.h文件中,我們也會(huì)看到如下的代碼:
/* Exported macro ------------------------------------------------------------*/
#ifdef USE_FULL_ASSERT
/**
* @brief The assert_param macro is used for function's parameters check.
* @param expr: If expr is false, it calls assert_failed function
* which reports the name of the source file and the source
* line number of the call that failed.
* If expr is true, it returns no value.
* @retval : None
*/
#define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
/* Exported functions ------------------------------------------------------- */
void assert_failed(uint8_t* file, uint32_t line);
#else
#define assert_param(expr) ((void)0)
#endif /* USE_FULL_ASSERT */
這里是assert_param()的原型。
可以看到,它是一個(gè)帶參數(shù)的宏定義,參數(shù)是一個(gè)條件表達(dá)式。表達(dá)式就是你要檢查的參數(shù)。
表達(dá)式為真時(shí),其定義為(void)0。即空,什么都不做,對(duì)程序無(wú)影響。函數(shù)調(diào)用時(shí)傳來(lái)的參數(shù)都是正確的,不需要進(jìn)行什么操作。
表達(dá)式為假時(shí),其定義為assert_failed((uint8_t *)__FILE__,__LINE__)),這是一個(gè)帶兩個(gè)參數(shù)的函數(shù),這個(gè)函數(shù)就是在main.c中定義的。第1個(gè)參數(shù)為文件指針,指示參數(shù)錯(cuò)誤的文件;第2個(gè)參數(shù)是參數(shù)錯(cuò)誤的等號(hào)。
--------------------------------------------------------------------------------------------------------------------------------------
1.使用時(shí),要定義USE_FULL_ASSERT這個(gè)這宏,在stm8l10x_conf.h文件中去定義
2.可以是assert_failed()函數(shù)中,輸出一些提示性的信息,來(lái)方便自己調(diào)試。
--------------------------------------------------------------------------------------------------------------------------------------
上一篇:STVD中報(bào)can't open file crtsi0.sm8的問(wèn)題
下一篇:讓STM8使用cosic編譯器時(shí)顯示ram flash stack占用信息
推薦閱讀
史海拾趣
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- Microchip 升級(jí)數(shù)字信號(hào)控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無(wú)線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁(yè)和arduino的通訊
- ESP32 freeRTOS使用測(cè)試
- PCIe M.2接口測(cè)試的現(xiàn)狀、挑戰(zhàn)與泰克解決方案
- ABB在中國(guó)推出面向電子制造業(yè)的兩大全新機(jī)器人系列
- ABB在中國(guó)推出PoWa協(xié)作機(jī)器人系列
- 西門子 NX 新增 AI 助手等多項(xiàng)功能
- 貿(mào)澤即日起開售適用于數(shù)據(jù)中心和網(wǎng)絡(luò)應(yīng)用的 全新TE Connectivity QSFP 112G SMT連接器
- ABB推出三大全新機(jī)器人系列,強(qiáng)化中國(guó)機(jī)器人市場(chǎng)領(lǐng)導(dǎo)地位
- 新思科技關(guān)于美國(guó)解除近期對(duì)華出口限制的聲明
- Wolfspeed 1700 V MOSFET 技術(shù),助力重塑輔助電源系統(tǒng)的耐用性和成本
- 英飛凌大中華區(qū) 2025 生態(tài)創(chuàng)新峰會(huì),究竟探討了哪些創(chuàng)新與生態(tài)合作?
- Microchip攜手Nippon Chemi-Con和NetVision 打造日本汽車市場(chǎng)首個(gè)ASA-ML攝像頭開發(fā)生態(tài)系統(tǒng)
- 下載、評(píng)論贏雙重好禮|PI 邀您跟littleshrimp一起拆解小米最新二合一充電寶
- Keysight示波器主題月有獎(jiǎng)系列活動(dòng)之 注冊(cè)大獎(jiǎng)天天抽 搶樓踩中亦有獎(jiǎng)
- 限時(shí)秒殺,100本專業(yè)書籍——TI 中國(guó)大學(xué)計(jì)劃20周年
- ADI有獎(jiǎng)下載活動(dòng)之20:基于NDIR和PID的ADI氣體探測(cè)器解決方案和新產(chǎn)品
- 免費(fèi)申請(qǐng)?jiān)囉脇福祿克Norma6000功率分析儀
- DigiKey應(yīng)用探索站重磅上線!潮流應(yīng)用,硬核技術(shù)探秘,N多干貨,一站get!
- 翻開《射頻技術(shù)For Dummies系列》書籍,跟帖漫談射頻世界
- 全新吉時(shí)利4200A SCS參數(shù)分析儀震撼上市,邀您參與翻蓋有禮!
- ADI基于ADPD188BI的煙霧探測(cè)器集成解決方案 有獎(jiǎng)直播 5月13日上午10:00-11:30 為您揭曉!
- 最后一周報(bào)名,STM32中國(guó)峰會(huì)暨粉絲狂歡節(jié),5月12-13日深圳
- 愛立信拿下95個(gè)5G合同,超華為躍升第一
- Xbox主管:手機(jī)暢玩主機(jī)游戲不會(huì)取代游戲主機(jī)與PC
- 榮耀趙明:5G手機(jī)進(jìn)入爆發(fā)階段 進(jìn)一步占位細(xì)分市場(chǎng)
- 手機(jī)“消毒”很重要!常用的方法都有哪些?
- 為追趕臺(tái)積電跳過(guò)4nm工藝,傳三星電子修改芯片工藝路線圖
- 傳音控股:2020年手機(jī)出貨量1.74億部,Q1凈利大增126%到8億元
- 中電科完成8英寸集成電路的裝備驗(yàn)證工藝線建設(shè)
- 日經(jīng):蘋果M2芯片本月已進(jìn)入量產(chǎn)階段,下半年或亮相
- 華為HarmonyOS 2.0公測(cè)版開啟推送,控制中心加入智能家居操控
- 芯密科技 欲建設(shè)亞洲最先進(jìn)半導(dǎo)體全氟密封產(chǎn)品生產(chǎn)線
- 關(guān)于DSP28335 GPIO模塊的各寄存器
- MODEM的電路圖
- 寵物連連看-----源程序奉上
- 64K字節(jié)SRAM,堆、棧最大可以設(shè)多大值?
- 關(guān)于eZ430-RF2500 開發(fā)工具的使用
- platform builder 怎么使用定制wince系統(tǒng)
- 【轉(zhuǎn)】 數(shù)字信號(hào)處理 教案 ---- 2、時(shí)域離散信號(hào)和系統(tǒng)的頻域分析
- 三極管的H橋與場(chǎng)效應(yīng)管的H橋電路在原理上跟功能上有什么不同?
- mc39i啟動(dòng)的問(wèn)題
- 你有多久沒在家過(guò)元宵節(jié)了