原子哥,最近在学习您例程中的文件系统,有很多语句花了很长时间钻研还是有疑惑,恳请您给我解答一下,小弟不胜感激!
1、动态内存申请是在堆区,但您的例程中__align(4) u8 memory1[MEM1_TOTAL_SIZE];,怎么判断您定义的这个数组是在堆区?还有,为什么要__align(4) ?如果不用这一个,会有什么后果?
2、__align(4) u8 memory2[MEM2_TOTAL_SIZE] __attribute__((at(0X68000000)));,弄不懂后面的__attribute__((at(0X68000000)))
3、tfileinfo.lfsize=_MAX_LFN*2+1;但#define _MAX_LFN 255,已经超过文件名的最大长度了?_MAX_LFN*2后面为什么还要加1?
4、我发现您例程中W25Q64和SD卡都是使用SPI2,不会相互干扰吗?
5、您在配置SPI的GPIO时,为什么把MISO引脚也配置为推挽输出?,这个引脚不是输入引脚吗?
6、如果一个长文件名是luruichaoshiygezhgoubbdsbs.bmp的话,在f_readdir(&picdir,&picfileinfo);之后,短文件名fname[]是不是=oubbdsbs.bmp?
7、一个文件打开之后要及时关闭,但文件夹为什么不用?(您的例程中,多次打开同一个文件夹,但没有关闭)
8、动态内存申请之后要及时释放,可我发现您的代码中有一段没有
u16 pic_get_tnum(u8 *path)
{
u8 res;
u16 rval=0;
DIR tdir; //临时目录
FILINFO tfileinfo; //临时文件信息
u8 *fn;
res=f_opendir(&tdir,(const TCHAR*)path); //打开目录
tfileinfo.lfsize=_MAX_LFN*2+1; //长文件名最大长度
tfileinfo.lfname=mymalloc(SRAMIN,tfileinfo.lfsize); //为长文件缓存区分配内存
if(res==FR_OK&&tfileinfo.lfname!=NULL)
{
while(1)//查询总的有效文件数
{
res=f_readdir(&tdir,&tfileinfo); //读取目录下的一个文件
if(res!=FR_OK||tfileinfo.fname[0]==0)break; //错误了/到末尾了,退出
fn=(u8*)(*tfileinfo.lfname?tfileinfo.lfname:tfileinfo.fname);
res=f_typetell(fn);
if((res&0XF0)==0X50)//取高四位,看看是不是图片文件
{
rval++;//有效文件数增加1
}
}
}
return rval;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
原子哥,对于问题5:
5、您在配置SPI的GPIO时,为什么把MISO引脚也配置为推挽输出?,这个引脚不是输入引脚吗?
这个脚其实应该配置为输入的。
这是官方的SPI的IO配置,主模式MISO脚应配置成浮空输入或者上拉输入。
我做这个实验时,把这个IO改成了上拉输入,完全没有问题。
当然啦,你的配置为输出,经千千万万的客户验证,也是完全没问题滴~~~~~
---------------------------------
所以我配置成推挽输出也可以用。
---------------------------------
非常感谢原子哥!
一周热门 更多>