電子產(chǎn)業(yè)一站式賦能平臺

PCB聯(lián)盟網(wǎng)

搜索
查看: 21|回復: 0
收起左側(cè)

斷言在STM32中的應用

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
匿名  發(fā)表于 前天 17:48 回帖獎勵 |正序瀏覽 |閱讀模式
首先我們先了解一下,什么是斷言?斷言都有什么特點?
  斷言就是我們?nèi)藶槎x的一個宏,用于判斷一些輸入?yún)?shù)的布爾表達式是否為預設(shè)的值的范圍內(nèi),如果是就為真,否則就為假。斷言就是用于檢查一些函數(shù)的輸入?yún)?shù)的合法性。一般默認情況下,斷言的功能是關(guān)閉的,在debug調(diào)試模式下,將斷言功能打開;在release發(fā)布模式下,將斷言功能關(guān)閉,斷言打開的話,會在一定程度上影響函數(shù)的執(zhí)行效率。
assert() 是 C 標準庫中的一個宏,定義在  頭文件中。
  使用斷言,可以創(chuàng)建更加穩(wěn)定,不易出錯的代碼。如果在單元測試過程中,使用斷言,將會非常方便。使用斷言得區(qū)別于代碼錯誤,代碼錯誤編譯就會不通過,但是斷言有問題,代碼編譯是OK的。斷言檢查的就是在代碼執(zhí)行過程中,一些輸入?yún)?shù)的合法性是否為真。
  斷言就是在debug模式下,代碼運行過程中,對函數(shù)中輸入的參數(shù)進行檢查。如果輸入的參數(shù)違規(guī),將進行某些操作,輸出一些信息提醒,或者控制代碼進入一個死循環(huán)使得代碼無法繼續(xù)執(zhí)行下去。在release版本,是不用斷言功能的。
 #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t *)__FILE__, __LINE__))
宏定義assert_param(expr),通過一個條件判斷語句,如果表達式expr的值為真,則assert_param(expr)返回(void)0,如果表達式expr的值為假,則assert_param(expr)返回assert_failed((uint8_t *)__FILE__, __LINE__)。
void assert_failed(uint8_t* file, uint32_t line);這個函數(shù)的作用就是返回調(diào)用這個函數(shù)的文件名和行數(shù)。
將輸出重定位到串口

STM32中的斷言


可以通過STM32CubeMX配置:

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有賬號?立即注冊

x
回復

使用道具

發(fā)表回復

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表