原文地址:http://www.cnblogs.com/god-of-death/p/6891400.html
FreeRTOS中的斷言函數configASSERT()和標准C中的斷言函數assert()是一樣的,如果斷言函數的參數為0時將觸發斷言函數的執行。
FreeRTOS的斷言功能在調試階段是非常有用的,可以有效地檢查參數錯誤和運行中的錯誤,但在正式發布軟件時,請將此功能關閉,因為斷言功能會增加工程代碼大小並降低工程執行效率。關閉斷言也比較簡單,如果FreeRTOSConfig.h文件中有斷言的宏定義,將其注釋掉即可,如果沒有宏定義,默認在FreeRTOS.h文件中就是關閉的。
/* Define configASSERT() to disable interrupts and sit in a loop. */
#define configASSERT( x ) if( x == 0 ) { taskDISABLE_INTERRUPTS(); for(;;); }
在使用調試器的情況下,一旦出現斷言失敗,會關閉中斷,程序會死在這個for循環中,此時用戶可以很容易就鎖定函數出錯位置。
FreeRTOS還提供另外一種方式,如截圖:

但是測試了如果把“void vAssertCalled( const char * pcFile, unsigned long ulLine );”放入FreeRTOSConfig.h會提示“bad instruction, error while running Assembler”,原因是FreeRTOSConfig.h文件被portasm.s引用,但是匯編文件不能出現C語言的語法,如果一定要用第二種方法,為portasm.s單獨建一個配置文件,如"FreeRTOSConfig_asm.h"。總之用第一種方式就非常不錯了!!!
