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에 초보자.