0

使用 Systick 计算每个函数在从 STM32f411RE 将数据写入 SD 卡(4 位 SDIO + DMA)的过程中花费的时间,我得到 f_write 和 f_close 函数的零星执行时间。

大多数情况下,f_write 大约需要 20 到 30 毫秒才能完成,而 f_close 大约需要 5 到 10 毫秒,但偶尔,在一个只将虚拟数据迭代写入 SD 的应用程序中,这些函数需要 300 多毫秒,然后在下一次立即再次加速写迭代。

我在想可能不需要包含代码,但无论如何这是一个粗略的想法:

if (f_mount(&myFatFS, SDPath, 1) == FR_OK)
   {mountTime = TimingDelay; //TimingDelay is counted using systick

   if (f_open(&myFile, myFileName, FA_WRITE | FA_OPEN_APPEND) == FR_OK)
      {
       fileOpenTime = TimingDelay;

       sprintf(data1,"dummy data 64kB in length"); 

       dataGenTime = TimingDelay;

       f_write(&myFile, data1, 64000, &myBytes); //write dummy data to chip

       writeTime = TimingDelay;

       f_close(&myFile);

       fileCloseTime = TimingDelay;
...etc

我正在使用在每个 systick 中断上递减的“TimingDelay”中的差异来计算每个阶段花费的时间,例如writeTime - fileCloseTime给出关闭文件所花费的时间;f_close.

虚拟数据 char[] 的大小不会改变。

FATFS 只是本质上不稳定,还是有一种我不知道的常见做法来阻止打嗝?

编辑:我应该提到在每个循环中使用f_sync()而不是f_close()在平均速度上产生边际改进,但它仍然会遇到同样的零星犹豫。

4

0 回答 0