娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

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

正在發生

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

發布者:技術掌門 來源: eefocus關鍵字:STM8L101F3P6  編程  assert_param() 手機看文章 掃描二維碼
隨時隨地手機看文章

在使用STM8或STM32的過程中,在官方的庫文件中經常能看到assert_param()的使用,一直都是對它無視,因為它不影響使用。但作為一名合格的、嚴謹的工程師來講,連assert_param()斷言都沒搞明白,都沒弄清楚,自己感覺還是有點丟人的。


其實這個就是斷言,它的主要用途是在編程的過程中為程序員提供參數檢查,對于Release之后,對終端用戶而言是無用的。它是在開發調試過程中,對參數錯誤進行提示,以便程序員提高開發效率。


首先,在STM8L101F3P6官方提供的模版庫的main.c文件中我們會看到如下代碼


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()這個函數的定義。

在stm8l10x_conf.h文件中,我們也會看到如下的代碼:


/* 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()的原型。

可以看到,它是一個帶參數的宏定義,參數是一個條件表達式。表達式就是你要檢查的參數。


表達式為真時,其定義為(void)0。即空,什么都不做,對程序無影響。函數調用時傳來的參數都是正確的,不需要進行什么操作。


表達式為假時,其定義為assert_failed((uint8_t *)__FILE__,__LINE__)),這是一個帶兩個參數的函數,這個函數就是在main.c中定義的。第1個參數為文件指針,指示參數錯誤的文件;第2個參數是參數錯誤的等號。


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


1.使用時,要定義USE_FULL_ASSERT這個這宏,在stm8l10x_conf.h文件中去定義


2.可以是assert_failed()函數中,輸出一些提示性的信息,來方便自己調試。


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

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

上一篇:STVD中報can't open file crtsi0.sm8的問題
下一篇:讓STM8使用cosic編譯器時顯示ram flash stack占用信息

推薦閱讀

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

史海拾趣

小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 贵阳市| 桃园市| 延津县| 合川市| 广南县| 肥乡县| 唐河县| 理塘县| 房山区| 南京市| 封开县| 平昌县| 会宁县| 木兰县| 湘潭县| 天全县| 达尔| 乌兰浩特市| 万宁市| 奎屯市| 仪征市| 沂源县| 濮阳县| 阿拉善盟| 新建县| 六安市| 巨野县| 临沭县| 淮滨县| 龙口市| 尚义县| 城步| 财经| 新竹县| 伽师县| 六盘水市| 岑巩县| 徐闻县| 洛宁县| 清河县| 怀化市|