初级会员

- 积分
- 135
- 金钱
- 135
- 注册时间
- 2016-5-31
- 在线时间
- 15 小时
|
1金钱
本帖最后由 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访问会越界,写入多余的数据吧?
刚开始学,很多东西不懂,哪位了解的话,烦请回复我一下。
|
最佳答案
查看完整内容[请看2#楼]
1,是写入32位数据。所以4*8是32. 按规则,restwords不应该大于8,应该是0-7之间的数字。所你的前提就不成立。
|