2016-08-16 4 views
2

프로젝트에 FreeRTOS를 사용하고 있으며 gdb 및 JLinkGDBServer를 사용하여 디버깅하려고합니다. 내 문제는 내가 실행을 중지하고 역 추적을 수행 할 때 난 그냥 라인 뒤에 라인을 얻을 수 있습니다 :이 스택 오버 플로우 또는 무언가의 표시가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가 약간 열정적이고 configTASK_RETURN_ADDRESS 상수가 제공되어 오류 함수의 주소를 단순한 NULL로 바꿀 수 있습니다. GDB는 더 이상 시도하지 않으며 더 이상 풀지 않습니다. . http://www.freertos.org/Stacks-and-stack-overflow-checking.html

: 당신이 스택 오버 플로우에 대해 궁금해하는 경우 나중에 참조 할 수 있도록

은의 FreeRTOS.org 웹 사이트의 스택 오버 플로우 감지 페이지를 읽어

1

FreeRTOSConfig.h#define configTASK_RETURN_ADDRESS 0를 추가하는 문제를 해결 것으로 나타났다.

관련 문제