野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12272|回复: 1

SD卡FatFs,disk_read函数编译问题

[复制链接]
发表于 2017-5-7 11:29:43 | 显示全部楼层 |阅读模式
今天在移植SD卡Fatfs文件系统时发现这个编译问题:在编译时报错..\..\Libraries\FATFS\diskio.c(99): error:  #167: argument of type "void *" is incompatible with parameter of type "BYTE *" res = disk_read(TA,(void *)scratch, sector++, 1);
应该是空指针的问题。
DRESULT disk_read (
        BYTE pdrv,                /* é豸Îïàí±àoÅ(0..) */
        BYTE *buff,                /* êy¾Y»o′æÇø */
        DWORD sector,        /* éèÇøê×μØÖ· */
        UINT count                /* éèÇø¸öêy(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,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;
}

采用的是--c99    --cpp 进行编译。下面贴上编译设置图以及编译结果图,如果将(void*)改为(BYTE*)编译通过但是无法正常读取SD卡。写函数同样问题。

编译设置

编译设置

编译结果

编译结果
回复

使用道具 举报

 楼主| 发表于 2017-5-7 12:36:31 | 显示全部楼层
哈哈,问题得到了解决。改为BYTE后,基本上就没问题了 ,切记编译中断服务函数时要采用C编译器。#ifdef __cplusplus  extern "C"{ #endif  
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 03:18 , Processed in 0.048750 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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