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
中的聲明保持不變。
您懷疑的原因是什麼?如果它編譯並鏈接並調用正確的函數,那麼它是正確的 - 即編譯器/鏈接器將很快告訴你它是否不正確。當你得到堆棧溢出時,要注意你的代碼可能會以導致這個函數不被調用的方式崩潰 - 這種檢查只能在上下文切換時執行,並且在堆棧溢出後代碼可能不會那麼遠。 – Clifford
任何你使用非常規'2'的原因是不是C中的標準布爾值?我們應該如何告訴你這是正確的?畢竟它是**你的**代碼。請注意,典型的FreeRTOS應用程序中沒有控制檯。 – Olaf
對我很好。但正如克利福德所說,如果你的籌碼已經溢出了可能發生的事情! –