首先我們先了解一下,什么是斷言?斷言都有什么特點?
斷言就是我們?nèi)藶槎x的一個宏,用于判斷一些輸入?yún)?shù)的布爾表達式是否為預(yù)設(shè)的值的范圍內(nèi),如果是就為真,否則就為假。斷言就是用于檢查一些函數(shù)的輸入?yún)?shù)的合法性。一般默認情況下,斷言的功能是關(guān)閉的,在debug調(diào)試模式下,將斷言功能打開;在release發(fā)布模式下,將斷言功能關(guān)閉,斷言打開的話,會在一定程度上影響函數(shù)的執(zhí)行效率。
assert() 是 C 標(biāo)準(zhǔn)庫中的一個宏,定義在 頭文件中。
使用斷言,可以創(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配置:
|