原子例程之文件系统学习困惑求解

2019-07-20 16:38发布

原子哥,最近在学习您例程中的文件系统,有很多语句花了很长时间钻研还是有疑惑,恳请您给我解答一下,小弟不胜感激!
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;
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。