2016-07-12 132 views
0

根據關於堆棧溢出FreeRTOS文檔:FreeRTOS的堆棧溢出鉤

該應用程序必須提供如果configCHECK_FOR_STACK_OVERFLOW沒有被設置爲0。鉤子函數必須 調用vApplicationStackOverflowHook(),堆棧溢出鉤子函數和具有以下原型 :

void vApplicationStackOverflowHook(TaskHandle_t xTask,signed char * pcTaskName);

而且在FreeRTOS以下原型內tasks.h文件中定義:

/* Callback function prototypes. --------------------------*/ 
extern void vApplicationStackOverflowHook(xTaskHandle pxTask, signed char *pcTaskName); 

所以,我設置configCHECK_FOR_STACK_OVERFLOW爲2,在我的應用程序代碼實現功能 :

void vApplicationStackOverflowHook(xTaskHandle pxTask, signed char *pcTaskName) 
{ 
    while (1) 
    { 
     /* my code. Prints stuff directly to the console*/ 
    } 
} 

我問題是這個實現是否正確?即鉤子實現在我的應用程序代碼中,並且tasks.h中的聲明保持不變。

+1

您懷疑的原因是什麼?如果它編譯並鏈接並調用正確的函數,那麼它是正確的 - 即編譯器/鏈接器將很快告訴你它是否不正確。當你得到堆棧溢出時,要注意你的代碼可能會以導致這個函數不被調用的方式崩潰 - 這種檢查只能在上下文切換時執行,並且在堆棧溢出後代碼可能不會那麼遠。 – Clifford

+0

任何你使用非常規'2'的原因是不是C中的標準布爾值?我們應該如何告訴你這是正確的?畢竟它是**你的**代碼。請注意,典型的FreeRTOS應用程序中沒有控制檯。 – Olaf

+0

對我很好。但正如克利福德所說,如果你的籌碼已經溢出了可能發生的事情! –

回答