-1

我在使用freertos fat时提出了这个问题。使用iar编译器和MCU的开发环境使用的是cortex-m4。我使用的是 hal 库,FreeRTOS FAT Config.h 的内容如下:

#define BUS_4BITS           1
#define SDIO_USES_DMA           1

我只生成了一个任务,SDcard write,它以 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 写入函数内容如下:

在此处输入图像描述

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

在此处输入图像描述

即使我更改字节长度,问题仍然存在

为什么会出现这个问题?

我有机会用 50hz 写 512bytes 吗?

或者 SD 卡写入的字节或频率是否有任何限制?

4

2 回答 2

0

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

于 2016-05-26T08:16:25.937 回答
0

可靠地实时写入任何类型的媒体都需要在您身边进行缓冲。

卡中的 SD 控制器本身尽最大努力通过对缓冲区等的精美管理来减少延迟,但即使是最好的,在执行垃圾收集时,任何给定的写入也会有持续 250 毫秒或更长时间的延迟。

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

于 2016-05-26T12:38:30.043 回答