2016-08-18 6 views
0

저는 FreeRTOS로 응용 프로그램을 개발하기 위해 ARM Cortex-M4 마이크로 컨트롤러를 사용하고 있습니다.FreeRTOS 작업이 다시 시작되지 않습니다.

정확한 타이밍을 위해 인터럽트 기반 타이머를 사용하고 싶습니다. 인터럽트는 적절한 우선 순위를 가지므로 FreeRTOS API를 호출 할 수 있어야합니다. ISR이 주기적으로 호출되고 주어진 코드와 같이 작업을 깨워해야

/* This function is executed by the task I'd like to resume */ 
void hello_task() { 
    while (1) { 
     vTaskSuspend(task); 
     printf("Tick\n"); 
    } 
} 

/* The ISR is called by an interrupt about 200 times per second */ 
void Timer_IRQHandler() { 
    CLEAR_INTERRUPT_FLAG(); 
    xTaskResumeFromISR(task); 
} 

ISR이 제대로 실행되지만 작업은 나중에 다시 시작되지 않습니다. 누구든지이 동작에 대한 설명이 있습니까?

감사합니다.

+0

설명서에 따르면 'xTaskResumeFromISR'은 실제로 문맥 전환을 직접 수행하지 않지만 ISR의 끝에는 portYIELD_FROM_ISR()이 필요합니다. – tofro

+0

필자가 보는 한, [링크] (http://www.freertos.org/taskresumefromisr.html)의 예제는 xTaskResumeFromISR이 pdTRUE를 반환 할 때만 나타납니다. 필자의 경우 pdfALSE가 반환되므로 문제가되지 않습니다. – eeucalyptus

+0

글쎄 정확하게 문제가 될 수 있습니다 - 나는 당신이 * 그것을 산출하기를 원합니까? – tofro

답변

관련 문제