野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8256|回复: 0

SD卡移植文件系统时字节对齐的问题

[复制链接]
发表于 2022-3-13 18:42:42 | 显示全部楼层 |阅读模式
*-----------------------------------------------------------------------*/
DRESULT disk_read (
        BYTE pdrv,                /* 设备物理编号(0..) */
        BYTE *buff,                /* 数据缓存区 */
        DWORD sector,        /* 扇区首地址 */
        UINT count                /* 扇区个数(1..128) */
)
{
        DRESULT status = RES_PARERR;
        SD_Error SD_state = SD_OK;
       
        switch (pdrv) {
                case ATA:        /* SD CARD */                                               
                  if((DWORD)buff&3)
                        {
                                DRESULT res = RES_OK;
                                DWORD scratch[SD_BLOCKSIZE / 4];

                                while (count--)
                                {
                                        res = disk_read(ATA,(void *)scratch, sector++, 1);

                                        if (res != RES_OK)
                                        {
                                                break;
                                        }
                                        memcpy(buff, scratch, SD_BLOCKSIZE);
                                        buff += SD_BLOCKSIZE;
                    }
                    return res;
                        }
                       
                        SD_state=SD_ReadMultiBlocks(buff,(uint64_t)sector*SD_BLOCKSIZE,SD_BLOCKSIZE,count);
                  if(SD_state==SD_OK)
                        {
                                /* Check if the Transfer is finished */
                                SD_state=SD_WaitReadOperation();
                                while(SD_GetStatus() != SD_TRANSFER_OK);
                        }
                        if(SD_state!=SD_OK)
                                status = RES_PARERR;
                  else
                          status = RES_OK;       
                        break;   
                       
                case SPI_FLASH:
                break;

                default:
                        status = RES_PARERR;
        }
        return status;
}
     上面是书籍配套例程,是SD卡移植文件系统中的函数,老师讲课时说如果字节不对齐可能会出错,
我想问下为什么用  DWORD scratch[SD_BLOCKSIZE / 4];  定义的数组就一定是四字节对齐的呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-28 00:19 , Processed in 0.026470 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表