2016-05-26 7 views
-1

私はfreertos fatの使用中にこの問題を提起します。 iarコンパイラとMCUを使用する開発環境では、cortex-m4を使用しています。 私はHALライブラリを使用して、次のようにFreeRTOS FAT config.hの内容は次のとおりです。FreeRTOSファットサイクルの問題は、私は50hzで512bytesを書くことができますか?

#define BUS_4BITS   1 
#define SDIO_USES_DMA   1 

私は50Hzので400byteを書く1つのタスクのみ、SDカードの書き込み、 次のようにタスクがある生成:

void SDCARD_WRITE_Task(void * pvParameters) 
{ 
    uint32_t PreviousWakeTime = 0; 

    SDcard_Init(); 
    SDcard_SetFileName("FDR","/FDR"); 

    for(;;) 
    { 
    HAL_GPIO_WritePin(GPIOG, GPIO_PIN_6,GPIO_PIN_SET);  //pin high 
    PreviousWakeTime = osKernelSysTick();      
    SDcard_Write(ucFileName, SDCARD_Buffer, sizeof(SDCARD_Buffer)); 
    HAL_GPIO_WritePin(GPIOG, GPIO_PIN_6,GPIO_PIN_RESET);   // pin low 
    vTaskDelayUntil(&PreviousWakeTime, 20/portTICK_PERIOD_MS); 
    } 
} 

PG6、ピンが関数であるから、以下のようにSDカードの内容を書く処理時間 をチェックするために、サイクルの終了時にロー状態になり、始動時の高い:

enter image description here

SDCARD WRITEタスクオシロスコープの結果は、いつかそれは私が変更してもoftenly 200〜250msの

enter image description here

取り、私は400byteを書くために50Hzのそれを設定し、予想外の時間の長さは、テスト中に発生した例が確認されたが、問題がまだ発生したバイト数

この問題はなぜ発生しますか?

私は50hzで512bytesを書き込むことができますか?

またはSDcard書き込みのバイトまたは周波数に制限がありますか?

答えて

0

これはFreeRTOS+FATを使用していますか?あなたの開発環境に同梱されているものは何ですか?いずれにしても、測定しているタイミングがSDカードへの実際の書き込みを実行しているドライバに関連しているように見えるので、ドライバのタイミングを取ることをお勧めします。また、別のSDカードを試してみましたか?私たちの経験は、異なるメーカー間のパフォーマンスの差が非常に大きいことです。カードがほとんど使用できない場合や、同じテストを受けた場合に非常に高速なカードです。

0

リアルタイムであらゆる種類のメディアに書き込むあなたの側では、バッファリングが必要です。

カード自体のSDコントローラは、バッファなどのファンシー管理によってレイテンシを減らすために最善を尽くしますが、最高のものでもガベージコレクションを実行すると250ms以上の書き込みに遅延が発生する可能性があります。

平均的に、彼らはアドバタイズするスループットを管理しますが、ホスト/ライブラリは非同期書き込みとバッファリングを管理してシステムのタイミングクリティカルな部分を分離する必要があります。

関連する問題