找回密码
 立即注册
查看: 72|回复: 5

提个建议,Flash下载时,头上的FAT最好同时也形成一个结构数组

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-04-17 09:50:59

17

主题

91

回帖

755

积分

高级会员

积分
755
发表于 2025-4-2 11:09:02 | 显示全部楼层 |阅读模式

提个建议,Flash下载时,头上的FAT最好同时也形成一个结构数组,类似字库对汉字的定义,因为有时候图片比较多,flash读出太浪费内存

另外,发现视频级播放例程里有一个错误:

W25Q_FastRead_6B(0, (BYTE *)&fatData, sizeof(fatData)); //从FLASH第一页读取FAT

应该是:

W25Q_FastRead_6B(0, (BYTE *)fatData, sizeof(fatData)); //从FLASH第一页读取FAT

W25Q_FastRead_6B(0, (BYTE *)&fatData[0], sizeof(fatData)); //从FLASH第一页读取FAT

回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-4-2 11:12:00 | 显示全部楼层
关于Flash下载时FAT结构数组的建议

在Flash下载过程中,FAT(文件分配表)的管理和优化对于系统性能和内存使用效率至关重要。您提出的建议,即将FAT形成一个结构数组,类似于字库对汉字的定义,是一个非常有价值的优化思路。以下是对该建议的详细分析和实现建议:

1. FAT结构数组的优势
内存优化:通过将FAT组织成结构数组,可以显著减少内存占用,特别是在处理大量图片或其他资源时。结构数组允许更高效的数据访问和管理,避免了频繁的内存分配和释放。
数据访问效率:结构数组的连续存储特性使得数据访问更加高效,减少了Flash读取的次数和时间,从而提升了整体系统性能。
代码可维护性:结构数组的使用使得代码更加模块化和易于维护,便于后续的扩展和修改。

2. 实现建议
定义结构体:首先,定义一个结构体来表示FAT的每个条目。例如:
  1. c
  2.   typedef struct {
  3.       uint32t startAddress;
  4.       uint32t fileSize;
  5.       uint8t fileType;
  6.   } FATEntry;
复制代码
创建结构数组:在Flash下载过程中,将FAT条目存储在一个结构数组中。例如:
  1. c
  2.   FATEntry fatData[MAXFILES];
复制代码
读取和写入操作:在读取和写入Flash时,直接操作结构数组。例如:
  1. c
  2.   W25QFastRead6B(0, (BYTE )fatData, sizeof(fatData));  // 从FLASH读取FAT
  3.   W25QFastWrite6B(0, (BYTE )fatData, sizeof(fatData)); // 写入FAT到FLASH
复制代码

关于视频级播放例程中的错误

在您提到的视频级播放例程中,存在一个关于W25QFastRead6B函数调用的错误。以下是正确的调用方式:

1. 错误分析
错误调用:
  1. c
  2.   W25QFastRead6B(0, (BYTE )&fatData, sizeof(fatData));
复制代码
  这里使用了&fatData,这实际上是对fatData取地址,而不是直接传递数组指针。

2. 正确调用
正确调用1:
  1. c
  2.   W25QFastRead6B(0, (BYTE )fatData, sizeof(fatData));
复制代码
  这里直接传递fatData数组的指针,符合函数参数要求。
正确调用2:
  1. c
  2.   W25QFastRead6B(0, (BYTE )&fatData, sizeof(fatData));
复制代码
  如果fatData是一个结构体变量而不是数组,这种调用方式也是正确的。

总结

通过将FAT组织成结构数组,可以显著优化Flash下载过程中的内存使用和数据访问效率。同时,修正视频级播放例程中的函数调用错误,确保代码的正确性和稳定性。希望这些建议和修正能够对您的项目有所帮助。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-29 08:28:25
已绑定手机

17

主题

446

回帖

1173

积分

金牌会员

积分
1173
发表于 2025-4-2 13:02:41 | 显示全部楼层
没有错误,那种写法也是可以的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-04-17 09:50:59

17

主题

91

回帖

755

积分

高级会员

积分
755
发表于 2025-4-2 14:35:55 | 显示全部楼层
FAT结构数组 可以直接定义在 Code 里,而不用利用 RAM 来读取了
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2025-04-17 09:50:59

17

主题

91

回帖

755

积分

高级会员

积分
755
发表于 2025-4-2 14:37:45 | 显示全部楼层
Ayb_*** 发表于 2025-4-2 13:02
没有错误,那种写法也是可以的

fatData 是数组,这样不行,我就是调试中发现不行的.
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-29 08:28:25
已绑定手机

17

主题

446

回帖

1173

积分

金牌会员

积分
1173
发表于 2025-4-2 16:04:21 | 显示全部楼层
zh*** 发表于 2025-4-2 14:37
fatData 是数组,这样不行,我就是调试中发现不行的.

数组确实不行,要么直接fatData,要么&fatData[0]
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 04:20 , Processed in 0.289132 second(s), 79 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表