본문 바로가기

TASK3

stack overflow FreeRTOS의 태스크 내에서 printf를 사용하는 경우 stack 크기를 512이상 정도 크게 잡아줘야 한다. 그렇지 않으면 stack overflow가 발생하여 메모리의 다른 영역에 덮어 써져 프로그램이 오동작 하는 경우가 발생 할 수 있다. printf의 인자가 없는 경우 _puts_r함수를 사용하지만 인자가 있는 경우 _vfprintf_r이 호출 된다. _puts_r은 스택을 많이 사용하지 않지만 _vfprintf_r은 스택을 많이 사용한다. 2010. 8. 18.
Task Run Time Stats FreeRTOS에서 vTaskGetRunTimeState() 함수를 사용하면 각 태스크들의 점유율을 볼 수 있다. 이 함수를 사용하기 위해서는 FreeRTOSConfig.h에 configGENERATE_RUN_TIME_STATS 값을 1로 정의 해야 하며 portCONFIGURE_TIMER_FOR_RUN_TIME_STATS 함수 와 portGET_RUN_TIME_COUNTER_VALUE 함수를 정의 해 주어야 한다. portCONFIGURE_TIMER_FOR_RUN_TIME_STATS함수는 말 그대로 run time states에 사용할 counter를 설정하고 portGET_RUN_TIME_COUNTER_VALUE는 현재 count값을 리턴하면 된다. counter의 클럭 주파수는 시스템 클럭보다 10.. 2010. 7. 22.
Task List FreeRTOS에서 현재 실행되는 Task들의 정보를 볼 수 있는 방법이 있어 구현 하였다. FreeRTOSConfig.h 파일의 configUSE_TRACE_FACILITY 를 1로 정의 하면 vTaskList라는 함수를 사용 할 수 있다. 다음과 같이 커맨드를 추가 하여 Task정보를 볼수 있도록 하였다. void static sys_cmd_task() { char info[1000]; printf("Name State Pr Stack Num n"); printf("--------------------------------------------"); vTaskList(info); } 다음은 출력 내용이다. State는 Task의 현재 상태를 나타내며, Pr은 우선순위를, Stack은 스택의 나머지를 .. 2010. 7. 21.