FreeRTOS脂肪循环问题,我有没有机会用50hz写512字节?

时间:2016-05-26 05:41:50

标签: freertos cortex-m fat fatwire stm32f4

我在使用自由脂肪期间提出这个问题。 使用iar编译器和MCU的开发环境使用cortex-m4。 我使用hal库,FreeRTOS FAT Config.h的内容如下:

#define BUS_4BITS           1
#define SDIO_USES_DMA           1

我只生成了一个SDcard写入任务,用50hz写入400byte 任务如下:

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,引脚在启动时为高电平,在周期结束时为低电平状态,以检查处理时间 SDcard写的功能内容如下:

enter image description here

SDCARD WRITE任务示波器结果确认在测试过程中出现意外时间长度,我将其设置为50hz写入400byte但有时需要200~250ms

enter image description here

即使我更改了仍然出现问题的字节长度

为什么会出现这个问题?

我有没有机会用50hz写512字节?

或SDcard写入的字节或频率是否有限制?

2 个答案:

答案 0 :(得分:0)

这是使用FreeRTOS+FAT吗?或者您的开发环境附带的东西?在任何情况下,看起来您测量的时间与执行SD卡实际写入的驱动程序有关,因此我建议在驱动程序内部进行计时。此外,你尝试过不同的SD卡 - 我们的经验是不同制造商之间的性能差异非常大,有些卡几乎无法使用,而其他卡在进行相同测试时非常快。

答案 1 :(得分:0)

实时写入任何类型的媒体RELIABLY需要您的缓冲。

卡中的SD控制器本身尽可能通过缓冲区等的花哨管理来减少延迟,但即使是最好的也可以在执行垃圾收集时持续250ms或更长的任何给定写入时具有延迟。

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