2016-07-12 12 views
0

Nach FreeRTOS Dokumentation in Bezug auf Stack-Überlauf:FreeRTOS Stapelüberlauf Haken

Der Antrag muss einen Stapelüberlauf-Hook-Funktion zur Verfügung stellen, wenn configCHECK_FOR_STACK_OVERFLOW nicht auf 0 Die Hook-Funktion muss eingestellt ist aufgerufen wird vApplicationStackOverflowHook() und haben den Prototyp unter:

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

Und in FreeRTOS der folgenden Prototyp innerhalb tasks.h-Datei definiert:

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

Also, ich configCHECK_FOR_STACK_OVERFLOW auf 2 gesetzt und die Funktion in meinem Anwendungscode implementieren:

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

Meine Die Frage ist, ob diese Implementierung korrekt ist oder nicht? Das heißt, die Hook-Implementierung befindet sich in meinem Anwendungscode und die Deklaration in tasks.h bleibt unberührt.

+1

Was ist der Grund für Ihre Zweifel? Wenn es kompiliert und verlinkt wird und die richtige Funktion aufgerufen wird, ist es korrekt - das heißt, der Compiler/Linker wird Ihnen bald sagen, ob das nicht der Fall ist. Wenn Sie einen Stack-Überlauf erhalten, beachten Sie, dass Ihr Code wahrscheinlich so abstürzt, dass diese Funktion nicht aufgerufen wird. Die Prüfung wird nur für einen Kontextwechsel ausgeführt, und der Code wird nach einem Stack-Überlauf möglicherweise nicht so weit kommen. – Clifford

+0

Gibt es einen Grund, warum Sie die unübliche '2' verwenden, die nicht der boolesche Standardwert in C ist? Und wie sollen wir Ihnen sagen, dass es richtig ist? Es ist ** Ihr ** Code schließlich. Beachten Sie, dass es in typischen FreeRTOS-Anwendungen keine Konsole gibt. – Olaf

+0

Sieht gut aus für mich. Aber wie Clifford sagt, wenn dein Stack übergelaufen ist, kann alles passieren! –

Antwort