2016-05-26 34 views
-1

我在使用freertos脂肪期間提出這個問題。 使用iar編譯器和MCU的開發環境使用cortex-m4。 我使用HAL庫和FreeRTOS的FAT的config.h的內容如下:FreeRTOS脂肪循環問題,有沒有可能用50hz寫512bytes?

#define BUS_4BITS   1 
#define SDIO_USES_DMA   1 

我只產生一個任務,SD卡寫入,其寫400byte與50HZ 任務如下:

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

SD卡寫入任務示波器結果確診病例在試驗過程中發生意外的時間長,我將它設置爲50hz寫400byte但是,有時需要200〜250毫秒oftenly

enter image description here

即使我改變問題仍然存在的字節長度

爲什麼會出現此問題?

有什麼機會可以用50hz寫512bytes?

或者SD卡寫入的字節或頻率是否有限制?

回答

0

這是使用FreeRTOS+FAT?還是你的開發環境附帶的東西?無論如何,它看起來像你正在測量的時間與正在執行SD卡實際寫入的驅動程序有關,所以我建議在驅動程序內部進行計時。此外,您是否嘗試過不同的SD卡 - 我們的經驗是,不同製造商之間的性能差異非常大,有些卡幾乎無法使用,而另一些則在經受相同測試時速度非常快。

0

實時寫入任何類型的媒體RELIABLY需要緩衝在你身邊。

卡片中的SD控制器本身會盡其所能地通過對緩衝區等進行奇特的管理來減少延遲,但即使是最好的,在執行垃圾收集時,任何給定的寫入操作都會持續250ms或更長時間。

平均而言,他們將管理他們宣傳的吞吐量,但主機/庫需要管理異步寫入和緩衝以隔離系統的時序關鍵部分。