2016-11-09 7 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関数は、センサパラメータを設定し、各フレーム(フレーム終了割り込み)の端部にコールバック関数をトリガするキャプチャユニットを起動します。

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の初心者です。

答えて

0

問題は解決されました。明らかに、割り込みの中の 'Debug' printf()は問題を引き起こしました。

関連する問題