于振南书上一个实验诡异的问题

2020-03-01 11:53发布

先上代码:
UINT8 znFAT_Enter_Dir2(INT8 *dirpath,UINT32 *pCluster,UINT32 *pos)
{
UINT8 index=0,res=0;
UINT32 i=1;
       
// #ifndef USE_LFN
INT8 dirname[13];
// #else
// INT8 dirname[MAX_LFN_LEN+1];
// #endif

*pos=1;
*pCluster=2;
        printf("000 ");
if(('\'==dirpath[0] || '/'==dirpath[0]) && ''==dirpath[1]) //Èç¹ûÊÇ"\"£¬ÔòÖ±½ÓÈ¡Ê×Ŀ¼´Ø£¬¼´µÚ2´Ø
{
         printf("222 ");
  return ERR_SUCC;
}
//////////////////////////////
printf("111 ");

while(''!=dirpath)
{
  if('\'==dirpath || '/'==dirpath)
  {
   dirname[index]='';
   index=0;

   res=Get_Dir_Start_Cluster(dirname,pCluster);
   if(res)
   {
                 printf("333 ");
                        return res;  //·µ»Ø´íÎóÂë  
   }
   *pos=i+1;
  }
  else
  {
   dirname[index]=dirpath;
   index++;
   #ifndef USE_LFN
   if(index>12) //Èç¹û²»Ê¹Óó¤Ãû£¬ÔòĿ¼ÃûÒÔ¼°ÎļþÃû×²»Äܳ¬¹ý8+1+3
   {
                        printf("444 ");
        return ERR_SFN_ILL_LEN; //Ŀ¼Ãû³¤ÓÚ8.3£¬Òà·ÀÖ¹dirnameÒç³ö
   }
   #else
   if(index>MAX_LFN_LEN) //Èç¹ûʹÓó¤Ãû£¬ÔòĿ¼ÃûÒÔ¼°ÎļþÃû×²»Äܳ¬¹ýÉ趨µÄ³¤Ãû×³¤¶È
   {
                 printf("555 ");
        return ERR_LFN_BUF_OUT; //Ŀ¼Ãû³¤ÓÚMAX_LFN_LEN£¬Òà·ÀÖ¹dirnameÒç³ö
   }   
   #endif
  }
  i++;
}
printf("666 ");  
return ERR_SUCC; //³É¹¦
}

int main(void)
{         
        UINT32 res=0,len=0;
        UINT32 i,j,n,x,y;
        UINT8 temp;
        UINT32 ncluster=0;                                                                                //Ö¸¶¨Ä¿Â¼ÎªÊ×Ŀ¼
        UINT32 *p;
       
        delay_init();
        uart_init(115200); //´®¿Ú³õʼ»¯Îª115200
        printf("´®¿ÚÉèÖÃÍê±Ï ");
       
        znFAT_Device_Init(); //´æ´¢É豸³õʼ»¯
  printf("SD¿¨³õʼ»¯Íê±Ï ");
        TFT_init2();
        TFT_clear(0x001f);
        TFT_GPIO_DeInit();
        znFAT_Select_Device(0,&Init_Args); //Ñ¡ÔñÉ豸
        TFT_init1();
        TFT_clear(0x0000);
       
        res=znFAT_Init(); //Îļþϵͳ³õʼ»¯         
       
         if(!res) //Îļþϵͳ³õʼ»¯³É¹¦
         {
                printf("Suc. to init FS ");
                 
                printf("BPB_Sector_No: %d",Init_Args.BPB_Sector_No);   
                printf("Total_SizeKB: %d",Init_Args.Total_SizeKB);
                printf("BytesPerSector: %d",Init_Args.BytesPerSector);
                printf("FATsectors: %d",Init_Args.FATsectors);  
                printf("SectorsPerClust: %d",Init_Args.SectorsPerClust);
                printf("FirstFATSector: %d",Init_Args.FirstFATSector);
                printf("FirstDirSector: %d",Init_Args.FirstDirSector);
                printf("FSsec: %d",Init_Args.FSINFO_Sec);
                printf("Next_Free_Cluster: %d",Init_Args.Next_Free_Cluster);
                printf("FreenCluster: %d ",Init_Args.Free_nCluster);
         }
         else //Îļþϵͳ³õʼ»¯Ê§°Ü
         {
                printf("Fail to init FS , Err Code: %d",res);
         }
         printf("AAA ");
         //if(!znFAT_Enter_Dir("\ABC\A\B\C\D\E\F\G\H\I\J\",&ncluster,p))
         if(!znFAT_Enter_Dir2("\ABC\",&ncluster,p))
         {
                 printf("start cluster is %d ",ncluster);
         }
         else
         {
                 printf("fail. ");
         }
         printf("BBB ");
        return 0;
//while(1);                                    
}   
定义了一个函数:
UINT8 znFAT_Enter_Dir2(INT8 *dirpath,UINT32 *pCluster,UINT32 *pos)
功能是进入一个目录,获取目录的开始簇。
程序下载进去,用串口助手查看,如下:
1.jpg
只打印到AAA就停止了。
我在znFAT_Enter_Dir2这个函数内部也设置了好多打印语句,可是一句也没打印出来。
貌似进入该函数以后,出不来了,而且好像什么也没执行。
我感到很奇怪,百思不得其解。
还有一个问题,UINT8,UINT32明明定义了,可是双击找定义的地方,提示:
2.jpg
求高手解惑,谢谢!


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
mmuuss586
1楼-- · 2020-03-01 14:40
 精彩回答 2  元偷偷看……
一路向北lm
2楼-- · 2020-03-01 16:51
什么现象?没看懂啊
Cjy_JDxy
3楼-- · 2020-03-01 22:19
一路向北lm 发表于 2020-2-25 18:59
什么现象?没看懂啊

我贴了图片啦。现在知道问题了,用了野指针,*p
一路向北lm
4楼-- · 2020-03-02 02:05
Cjy_JDxy 发表于 2020-2-25 19:38
我贴了图片啦。现在知道问题了,用了野指针,*p

敢不分配地址,哈哈

一周热门 更多>