SD卡读写实验请教

2019-07-20 13:05发布

本帖最后由 liujinbonpu 于 2017-7-25 21:12 编辑

if(SDIO_GetFlagStatus(SDIO_FLAG_TXFIFOHE) != RESET)   
   {
      if((tlen-bytestransferred)<SD_HALFFIFOBYTES)
      {
       restwords=((tlen-bytestransferred)%4==0)?((tlen-bytestransferred)/4)(tlen-bytestransferred)/4+1);
      
       for(count=0;count<restwords;count++,tempbuff++,bytestransferred+=4)
       {
        SDIO->FIFO=*tempbuff;
       }
      }
      else
      {
       for(count=0;count<8;count++)
       {
        SDIO->FIFO=*(tempbuff+count);
       }
       tempbuff+=8;
       bytestransferred+=32;
      }
    timeout=0X3FFFFFFF; //
   }


这里
       tempbuff+=8;
       bytestransferred+=32;
tempbuff每次加8,而bytestransferred每次加32,这句SDIO->FIFO=*(tempbuff+count);是往FIFO一次写了4个字节吗?

写到后面剩余字节小于32
restwords=((tlen-bytestransferred)%4==0)?((tlen-bytestransferred)/4)(tlen-bytestransferred)/4+1);
       for(count=0;count<restwords;count++,tempbuff++,bytestransferred+=4)
       {
        SDIO->FIFO=*tempbuff;
       }
比如是31,restwords=8,仍循环8次,如果每次写入4个字节,*tempbuff访问会越界,写入多余的数据吧?

刚开始学,很多东西不懂,哪位了解的话,烦请回复我一下。



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