2016-08-16 7 views
2

私はプロジェクトにFreeRTOSを使用していますが、gdbとJLinkGDBServerを使用してFreeRTOSをデバッグしようとしています。 私の問題は、私は実行を停止し、バックトレースを行うとき、私はちょうどの行の後に行を取得することである。これは、スタックオーバーフローか何かの兆候であるFreeRTOSアプリケーションの長いgdbバックトレースにスタックオーバーフローの兆候がありますか?

#192 0x08005a88 in pxPortInitialiseStack (pxTopOfStack=0xa5a5a5a5, pxCode=0xa5a5a5a5, 
    pvParameters=0xa5a5a5a5) 
    at /home/username/storage/repos/project/third_party/freertos/portable/GCC/ARM_CM3/port.c:231 
#193 0x08005a88 in pxPortInitialiseStack (pxTopOfStack=0xa5a5a5a5, pxCode=0xa5a5a5a5, 
    pvParameters=0xa5a5a5a5) 
    at /home/username/storage/repos/project/third_party/freertos/portable/GCC/ARM_CM3/port.c:231 
#194 0x08005a88 in pxPortInitialiseStack (pxTopOfStack=0xa5a5a5a5, pxCode=0xa5a5a5a5, 
    pvParameters=0xa5a5a5a5) 
    at /home/username/storage/repos/project/third_party/freertos/portable/GCC/ARM_CM3/port.c:231 
#195 0x08005a88 in pxPortInitialiseStack (pxTopOfStack=0xa5a5a5a5, pxCode=0xa5a5a5a5, 
    pvParameters=0xa5a5a5a5) 
    at /home/username/storage/repos/project/third_party/freertos/portable/GCC/ARM_CM3/port.c:231 
#196 0x08005a88 in pxPortInitialiseStack (pxTopOfStack=0xa5a5a5a5, pxCode=0xa5a5a5a5, 
    pvParameters=0xa5a5a5a5) 
    at /home/username/storage/repos/project/third_party/freertos/portable/GCC/ARM_CM3/port.c:231 
#197 0x08005a88 in pxPortInitialiseStack (pxTopOfStack=0xa5a5a5a5, pxCode=0xa5a5a5a5, 
    pvParameters=0xa5a5a5a5) 
    at /home/username/storage/repos/project/third_party/freertos/portable/GCC/ARM_CM3/port.c:231 

?私は私のFreeRTOSConfig.hでconfigCHECK_FOR_STACK_OVERFLOW 2を使用して、スタックオーバーフローをチェックしています

答えて

2

はい - これは、GDBが状態の解凍をいつ停止するかを知らないためです。別の言い方をすれば、タスクのスタックフレームの終わりに達した時期はわかりません。

デフォルトでは、スタックフレームの終わりは、タスクを削除せずに戻ることは想定されていないため、エラー関数内にタスクを残しますが、エラー関数自体はどこにも戻りません。ほとんどの場合、ほとんどの場合、大部分のデバッガで問題ありませんが、GDBが少し熱心になることがあり、エラー関数のアドレスを単純なNULLに置き換えるためにconfigTASK_RETURN_ADDRESS定数が提供されています.GDBは、 。今後の参考のために

、あなたはスタックオーバーフローに疑問を抱いている場合は、FreeRTOS.orgのウェブサイト上のスタックオーバーフロー検出ページをお読みください。http://www.freertos.org/Stacks-and-stack-overflow-checking.html

1

それはFreeRTOSConfig.h#define configTASK_RETURN_ADDRESS 0を追加しても問題が解決していることが判明しました。

関連する問題