私は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
関数は、センサパラメータを設定し、各フレーム(フレーム終了割り込み)の端部にコールバック関数をトリガするキャプチャユニットを起動します。
Smpl_NT99141_HD_SNAP
関数はコールバック関数を設定し、capture.The ISRは、フレームの終了を通知を開始し、順番に
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;
}
以下に示すようcapture_startSNAP定義はVideo_SNAPThread
タスクにコンテキストスイッチを行う必要がありますさらなるデータ処理のために使用される。私は、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の初心者です。