2016-11-09 8 views
0

freeRTOS 위에 Jpeg 인코딩 설정을 구현하려고합니다. 주요 작업은 캡처 장치를 초기화합니다.FreeRTOS가 ISR에서 컨텍스트 스위칭을 수행하지 않습니다 - ARM926EJ-S 코어

void Video_SNAPThread(void* pvParameters) 
{ 
    while (1) 
    { 
     capture_startSNAP();   /* SNAPSHOT Capture - Encode API*/ 
     vTaskSuspend(xHandleSNAP); /* Task Suspend - within context*/ 

    } 
} 

capture_start 기능은 센서 파라미터들을 구성하고, 각각의 프레임 (프레임 종료 인터럽트)의 단부에 콜백 함수를 트리거 캡쳐 유닛을 개시한다.

capture_startSNAP 정의는 Smpl_NT99141_HD_SNAP 함수는 함수 호출을 다시 설정하고 capture.The ISR이 Video_SNAPThread 태스크로 문맥 전환을 수행한다 프레임의 종료를 통지하고 다시 시작

int capture_startSNAP() 
{ 
    TickType_t xMaxBlockTime; 
    xMaxBlockTime = pdMS_TO_TICKS(4000); 
#if defined(__1ST_PORT__) && !defined(__2ND_PORT__) 
     sysprintf("Plug in sensor to port 0\n"); 
#endif 
#if !defined(__1ST_PORT__) && defined(__2ND_PORT__) 
     sysprintf("Plug in sensor to port 1\n"); 
#endif 
#if defined(__1ST_PORT__) && defined(__2ND_PORT__) 
     sysprintf("Plug in sensor to port 1 and port 2\n"); 
#endif 
     sysSetInterruptPriorityLevel(IRQ_VIN, 2); 
     sysSetInterruptPriorityLevel(IRQ_VIN1, 1); 
     configASSERT(xTask_Notify == NULL); 
     xTask_Notify = xTaskGetCurrentTaskHandle(); 
     Smpl_NT99141_HD_SNAP(); 

     while((ulTaskNotifyTake(Task_Woken , xMaxBlockTime) == 0));    
     jpegmain(); 
     return 0; 
} 

아래에 주어진대로 추가 데이터 처리를 위해. 작업 알림 방법을 사용하여 ISR에서 인코딩을 위해 Video_snapthread으로 다시 전환했으나 작동하지 않습니다.

void VideoIn_InterruptHandler_SNAP(void) 
{ 
     pVin1->Close(); 
     printf("Interrupt"); 
     Task_Woken = pdFALSE; 
     configASSERT(xTask_Notify != NULL); 
     vTaskNotifyGiveFromISR(xTask_Notify, &Task_Woken); 
     xTask_Notify = NULL; 
     portYIELD_FROM_ISR(Task_Woken);  
} 

내가 어딘가 잘못 됐으면 저를 시정하십시오. 아직 freeRTOS에 초보자.

답변

0

문제가 해결되었습니다. 분명히 인터럽트 내의 'Debug'printf()가 문제를 일으켰습니다.