本文除了介紹assert在c語言程式設計的的使用,更重要的是在rtos系統程式設計中,configassert除錯的方法。
首先,介紹assert函式下c程式設計中的使用
測試程式如下:
#include#include#include#includeint max_fun(int *a,int *b)
int main(int argc, const char *ar**)
本例中輸入a的大小控制在大於50,否則程式出錯。
執行結果:
這個是assert在c語言中的簡單應用。
在freertos系統中,與其功能類似的的函式configassert在debug過程佔據這極其重要的位置,特別在程式執行不正常宕機時,可以定位其問題,具體使用方法也很簡單。
freertos 核心中的關鍵點都會呼叫configassert(x),當x 為0 的時候說明有錯誤發生;使用斷言的話會導致開銷加大,一般在除錯階段使用。只需要在freertosconfig.h 檔案中定義configassert()巨集函式即可;
例如:
#define vassertcalled(char,int) printf("error:%s,%d\r\n",char,int)
#define configassert(x) if((x)==0) vassertcalled(__file__,__line__)
如上,程式出錯的地方就會被列印。
注意:此辦法只是除錯程式的一種手段,並不能定位所有的問題。
C語言中斷言ASSERT
我一直以為assert僅僅是個報錯函式,事實上,它居然是個巨集,並且作用並非 報錯 在經過對其進行一定了解之後,對其作用及用法有了一定的了解,assert 的用法像是一種 契約式程式設計 在我的理解中,其表達的意思就是,程式在我的假設條件下,能夠正常良好的運作,其實就相當於乙個if語句 if 假設成...
C語言中,斷言的使用
標準c中的斷言函式assert 如果斷言函式的引數為0時將觸發斷言函式的執行,會在執行時程式崩潰。我從freertos中學到,freertos中的斷言函式configassert 和標準c中的斷言函式assert 是一樣的,我們可以重新利用他,下面我用乙個簡單的程式例項,來學習下。include i...
程式設計中斷言函式作用
編寫 時,我們總是會做出一些假設,斷言就是用於在 中捕捉這些假設。斷言表示為一些布林表示式,程式設計師相信在程式中的某個特定點該表示式值為真,可以在任何時候啟用和禁用斷言驗證 因此可以在測試時啟用斷言而在部署時禁用斷言。同樣,程式投入執行後,終端使用者在遇到問題時可以重新啟用斷言。使用斷言可以建立更...