日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年03月28日(星期五)

正在發(fā)生

2020年03月28日 | STM8L101F3P6編程中關(guān)于assert_param()斷言的小結(jié)

發(fā)布者:技術(shù)掌門 來(lái)源: eefocus關(guān)鍵字:STM8L101F3P6  編程  assert_param() 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

在使用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)試。


--------------------------------------------------------------------------------------------------------------------------------------

關(guān)鍵字:STM8L101F3P6  編程  assert_param() 引用地址:STM8L101F3P6編程中關(guān)于assert_param()斷言的小結(jié)

上一篇:STVD中報(bào)can't open file crtsi0.sm8的問(wèn)題
下一篇:讓STM8使用cosic編譯器時(shí)顯示ram flash stack占用信息

推薦閱讀

半導(dǎo)體制造商ROHM通過(guò)第三方認(rèn)證機(jī)構(gòu)德國(guó)萊茵TUV取得了汽車行業(yè)功能安全※1標(biāo)準(zhǔn)“ISO26262”※2 的開發(fā)工藝認(rèn)證。這意味著ROHM面向車載領(lǐng)域的元器件開發(fā)工藝被認(rèn)定為可滿足該標(biāo)準(zhǔn)中的最高安全等級(jí)“ASIL-D”。“ISO26262”標(biāo)準(zhǔn)是隨著汽車的電子化及高性能化發(fā)展,全球市場(chǎng)對(duì)汽車安全性能要求日趨嚴(yán)格的背景下,作為汽車行業(yè)功能安全方面的國(guó)際標(biāo)準(zhǔn)于2011...
如果以谷歌無(wú)人駕駛項(xiàng)目Waymo立項(xiàng)為起點(diǎn),自動(dòng)駕駛行業(yè)的發(fā)展已經(jīng)度過(guò)了整整10年?,F(xiàn)在,這一行業(yè)已經(jīng)進(jìn)入了量產(chǎn)落地的前夜。尤其是起步早,技術(shù)強(qiáng)的美國(guó),已經(jīng)有較多公司在公開道路或封閉區(qū)域開始布局試運(yùn)營(yíng)與商用的車輛,例如近日,美國(guó)Optimus Ride公司在紐約州布魯克林海軍船塢地區(qū)部署無(wú)人車,并將于第二季度投入運(yùn)營(yíng)。連對(duì)待自動(dòng)駕駛技術(shù)格外保守的...
DMA,意思為直接存儲(chǔ)器訪問(wèn)。DMA 可 用于實(shí)現(xiàn)外設(shè)與存儲(chǔ)器之間或者存儲(chǔ)器與存儲(chǔ)器之間數(shù)據(jù)高效傳輸。因?yàn)?DMA 傳輸數(shù)據(jù)移動(dòng)過(guò)程無(wú)需 CPU 直接操作,這樣節(jié)省的 CPU 資 源就可供其它操作使用。從硬件層面來(lái)理解,DMA 就好像是 RAM 與 I/O 設(shè)備間數(shù) 據(jù)傳輸?shù)耐?,外設(shè)與存儲(chǔ)器之間或者存儲(chǔ)器與存儲(chǔ)器之間可以直接在這條通路 上進(jìn)行數(shù)據(jù)傳輸...
——國(guó)網(wǎng)冀北公司新能源云應(yīng)用紀(jì)實(shí) 在今年全國(guó)政協(xié)十三屆四次會(huì)議新聞發(fā)布會(huì)上,新聞發(fā)言人郭衛(wèi)民表示,北京冬奧會(huì)、冬殘奧會(huì)競(jìng)賽場(chǎng)館已全部完工,籌辦工作進(jìn)入全力沖刺關(guān)鍵時(shí)期。2022年北京冬奧會(huì)將在奧運(yùn)史上首次實(shí)現(xiàn)全部場(chǎng)館100%綠色電能供應(yīng),冀北電網(wǎng)肩負(fù)著為“綠色冬奧”提供清潔安全、經(jīng)濟(jì)高效電能的重要使命。 張北換流站 為促進(jìn)新能源...

史海拾趣

小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved