打印
[STM32F1]

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

[复制链接]
1173|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
先上代码:
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\r\n");
if(('\\'==dirpath[0] || '/'==dirpath[0]) && '\0'==dirpath[1]) //Èç¹ûÊÇ"\\"£¬ÔòÖ±½ÓÈ¡Ê×Ŀ¼´Ø£¬¼´µÚ2´Ø
{
         printf("222\r\n");
  return ERR_SUCC;
}
//////////////////////////////
printf("111\r\n");

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

   res=Get_Dir_Start_Cluster(dirname,pCluster);
   if(res)
   {
                 printf("333\r\n");
                        return res;  //·µ»Ø´íÎóÂë  
   }
   *pos=i+1;
  }
  else
  {
   dirname[index]=dirpath;
   index++;
   #ifndef USE_LFN
   if(index>12) //Èç¹û²»Ê¹Óó¤Ãû£¬ÔòĿ¼ÃûÒÔ¼°ÎļþÃû×²»Äܳ¬¹ý8+1+3
   {
                        printf("444\r\n");
        return ERR_SFN_ILL_LEN; //Ŀ¼Ãû³¤ÓÚ8.3£¬Òà·ÀÖ¹dirnameÒç³ö
   }
   #else
   if(index>MAX_LFN_LEN) //Èç¹ûʹÓó¤Ãû£¬ÔòĿ¼ÃûÒÔ¼°ÎļþÃû×²»Äܳ¬¹ýÉ趨µÄ³¤Ãû×³¤¶È
   {
                 printf("555\r\n");
        return ERR_LFN_BUF_OUT; //Ŀ¼Ãû³¤ÓÚMAX_LFN_LEN£¬Òà·ÀÖ¹dirnameÒç³ö
   }   
   #endif
  }
  i++;
}
printf("666\r\n");  
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("´®¿ÚÉèÖÃÍê±Ï\r\n");
       
        znFAT_Device_Init(); //´æ´¢É豸³õʼ»¯
  printf("SD¿¨³õʼ»¯Íê±Ï\r\n");
        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\r\n");
                 
                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\n",Init_Args.Free_nCluster);
         }
         else //Îļþϵͳ³õʼ»¯Ê§°Ü
         {
                printf("Fail to init FS , Err Code: %d",res);
         }
         printf("AAA\r\n");
         //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\n",ncluster);
         }
         else
         {
                 printf("fail.\n");
         }
         printf("BBB\r\n");
        return 0;
//while(1);                                    
}   
定义了一个函数:
UINT8 znFAT_Enter_Dir2(INT8 *dirpath,UINT32 *pCluster,UINT32 *pos)
功能是进入一个目录,获取目录的开始簇。
程序下载进去,用串口助手查看,如下:

只打印到AAA就停止了。
我在znFAT_Enter_Dir2这个函数内部也设置了好多打印语句,可是一句也没打印出来。
貌似进入该函数以后,出不来了,而且好像什么也没执行。
我感到很奇怪,百思不得其解。
还有一个问题,UINT8,UINT32明明定义了,可是双击找定义的地方,提示:

求高手解惑,谢谢!


使用特权

评论回复
沙发
mmuuss586| | 2020-2-25 09:36 | 只看该作者
没弄过这个,支持下

使用特权

评论回复
板凳
一路向北lm| | 2020-2-25 18:59 | 只看该作者
什么现象?没看懂啊

使用特权

评论回复
地板
Cjy_JDxy|  楼主 | 2020-2-25 19:38 | 只看该作者
一路向北lm 发表于 2020-2-25 18:59
什么现象?没看懂啊

我贴了图片啦。现在知道问题了,用了野指针,*p

使用特权

评论回复
5
一路向北lm| | 2020-2-26 13:12 | 只看该作者
Cjy_JDxy 发表于 2020-2-25 19:38
我贴了图片啦。现在知道问题了,用了野指针,*p

敢不分配地址,哈哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:绿水本无忧因风皱面,青山原不老为雪白头。

553

主题

3530

帖子

19

粉丝