2016-05-26 42 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或更长时间。

平均而言,他们将管理他们宣传的吞吐量,但主机/库需要管理异步写入和缓冲以隔离系统的时序关键部分。