FreeRTOS - configASSERT(斷言)的使用


原文地址: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"。總之用第一種方式就非常不錯了!!!

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM