작성
·
65
1
ARM에서 C언어로 FreeRTOS를 구동시키고 있습니다.
목표: Timer를 필요할 때만 생성하여 사용한 뒤, 필요 없는 경우 삭제
TimerHandle_t xRTOSTimerA;
BaseType_t xStatus = xGetStatus();
if(xStatus == pdTRUE)
{
xRTOSTimerA = xTimerCreate("TIMER A", pdMS_TO_TICKS(300), pdTRUE, (void *)0, prvRTOSTimerACallback);
}
else
{
vTimerDelete(xRTOSTimerA, 0);
}
질문 1. xTimerCreate를 통해 Timer를 생성한 뒤 vTimerDelete 함수를 사용해 삭제해도 TimerHandle은 여전히 메모리가 할당된 채 살아있는 거같습니다. vTimerDelete의 동작 이해를 잘못하고있는건가요?
질문 2. 위와 같이 소스코드를 작성하여도 메모리 반환이 제대로 이루어지지않는것 같습니다. TimerHandle의 경우 메모리 해제가 불가능한것인가요?
답변 1
0
안녕하세요. WNTH2014님!
질문하신 내용을 찾아본 결과,
xTimerCreate 함수에서 타이머객체가 동적으로 생성되고, xTimerDelete 함수에서 메모리 해제를 하는 것이 아래 소스(timers.h, timers.c)를 보면 확인됩니다.
추가 질문 사항이 있으시면 다시 글 남겨주세요. ^^
답변 감사합니다. xTimerDelete 함수를 사용해서 메모리 해제를 시도해보았는데
TimerHandle_t은 여전히 메모리에서 해제가 안된것처럼 보입니다.
찍어주신 소스코드에서 vPortFree를 수행하긴하는데 다른 문제가 있는걸까요?
심지어 삭제 된 후에도 xTimerStart 를 사용하면 타이머가 정상 동작까지합니다.
▲ 타이머 삭제 전 TimerHandle_t 상태 및 Tmr Svc Task 스택 상황
▲ 타이머 삭제 후 TimerHandle_t 상태 및 Tmr Svc Task 스택 상황