本帖最后由 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访问会越界,写入多余的数据吧?
刚开始学,很多东西不懂,哪位了解的话,烦请回复我一下。
一周热门 更多>