c++ - 无法使用 FreeRTOS+FAT 读取大于 2Kb 的文件
问题描述
我正在使用 FreeRTOS v 10.1.0 ,此外我还从实验室区域下载了 FreeRTOS+FAT(160919 版本)
我正在使用 Altera Cyclone V 评估板,并使用演示项目和我的板的可用端口作为我自己的应用程序的基础,成功地在板上运行了 FreeRTOS 项目。
我还成功地在我的 SD 卡上安装了一个分区并从 SD 卡读取文件并将文件写入 SD 卡。
当我尝试读取大于 2K 的文件时,我的问题就开始了。我正在使用以下 ff_fread 命令从我之前打开的文件中读取,并且我知道它的长度为 5777 字节:
ff_fread( &byteBuffer[0],1,5777, pxSourceFile );
我发现字节缓冲区重复填充相同的 2048 个字节,最多为 5777 个字节。所以 byteBuffer[0] 到 byteBuffer[2047] 是我所期望的,但随后这些数据被重复了。
我还尝试以 512 字节块和 2048 字节块读取数据,以防问题与扇区边界(512 字节扇区)或群集边界(每个群集 4 个扇区)有关。
我怀疑问题出在 FreeRTOS + Fat 而不是用于与 SD 卡接口的 Altera 代码。这是因为当我在以下函数中设置断点时,我看到 FreeRTOS+Fat api 在成功读取 4 个扇区的数据后实际上似乎跳回了第一个扇区。所以看起来 Altera Api 正在返回 FreeRTOS + FAT 请求的数据。
static int32_t prvReadSd( uint8_t pucDestination,
uint32_t ulSectorNumber,
uint32_t ulSectorCount,
FF_Disk_t pxDisk )
{
int32_t errorCode = alt_sdmmc_read(pucDestination,
ulSectorNumber * 512,
ulSectorCount * 512);
return errorCode
}
任何人都可以就我遇到的问题提供任何见解,我们将不胜感激。
解决方案
好的,我已经解决了我的问题。对于指责 FreeRTOS+FAT,我深表歉意,我将在下面解释这个问题,以防其他人也有同样的问题。
我在我认为是 Fat16 的 SD 卡上创建了一个 1MB 的分区。在尝试了各种方法后,我决定在 Linux 中使用以下命令重新格式化我的 sd 卡。
须藤 mkdosfs -F 16 /dev/sdc4
linux给出了以下警告
警告:16 位 FAT 没有足够的簇!文件系统将被误解为没有挂载选项“fat=16”的 12 位 FAT。
这促使我在 FreeRTOS+Fat 配置文件中启用 Fat12 支持,这解决了我的问题。
推荐阅读
- security - 如何避免 webview appcelerator 中的远程代码执行?
- c# - 在单声道游戏中从 PNG 图像中删除背景
- api - 断言失败:url != null 不正确
- python - 如何在python中将总天数除以单个年份,以便总天数不会影响某一特定年份
- c++ - 如何使用类从文件中读取复数以及访问 C++ 中的私有变量的问题?
- r - 基于时间变量的固定连续增加的数据点线性插值函数
- node.js - 无法使用节点 sdk 从私有数据集合中获取人类可读格式的数据
- heroku-cli - 如何解决 Heroku 应用程序显示没有名为“我的项目名称”的模块的错误
- cefsharp - CEF 在运行时设置 authproxy
- ruby-on-rails - Heroku 在尝试发送电子邮件时产生 500 错误