You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Arduino IDE中调用SD库sd_diskio.cpp内部函数遇编译错误求助

调用Arduino SD库内部函数的编译问题解决

问题描述

使用Arduino IDE时,尝试调用SD库中sd_diskio.cpp内的内部函数,编写的代码如下:

#include <sd_diskio.h>
#include <SPI.h>

#define SD_MMC_CLK 7 
#define SD_MMC_CMD 9
#define SD_MMC_D0 8

#define SD_MMC_D3_CS 21


void setup() {
    
    Serial.begin(9600);
    uint8_t ssPin = SD_MMC_D3_CS;
    SPI.begin(SD_MMC_CLK, SD_MMC_D0 ,SD_MMC_CMD, SD_MMC_D3_CS);
    SPIClass spi = SPI;
    
    uint32_t frequency = 4000000;
    uint8_t pdrv = sdcard_init(ssPin, &spi, frequency);
    if (!sdSelectCard(pdrv)) {
      return 0;
    }

    if (!sdCommand(pdrv, SEND_CID, 0, NULL)) {
      char cid[16];
      bool success = sdReadBytes(pdrv, cid, 16);
      sdDeselectCard(pdrv);
      if (success) {
        Serial.println(cid);
      }
    }

}

编译过程中先后遇到两个错误:

  1. 初始错误:

error: 'sdcard_init' was not declared in this scope

  1. 解决第一个错误后出现新错误:

error: 'sdSelectCard' was not declared in this scope

已知sdSelectCard未在sd_diskio.h中定义,尝试通过Sketch->Add File添加sd_diskio.cpp但无效,需要解决如何让Arduino IDE将该文件纳入编译的问题。

解决方案

方法一:复制库文件到项目目录(推荐)

  1. 找到SD库的sd_diskio.cpp和sd_diskio.h文件,通常路径为Arduino/libraries/SD/src/
  2. 将这两个文件复制到你的Arduino项目文件夹中
  3. 修改代码中的头文件引用,把<sd_diskio.h>改为"sd_diskio.h"(双引号表示引用本地项目内的头文件)
  4. 重新打开Arduino IDE,项目面板会显示这两个文件,编译时会自动将它们纳入编译流程

方法二:修改库头文件(不推荐,库更新会失效)

找到SD库的sd_diskio.h文件,在文件末尾添加需要调用的内部函数声明,示例如下:

// 手动添加需要的函数声明
uint8_t sdcard_init(uint8_t ssPin, SPIClass *spi, uint32_t frequency);
bool sdSelectCard(uint8_t pdrv);
bool sdCommand(uint8_t pdrv, uint8_t cmd, uint32_t arg, uint8_t *response);
bool sdReadBytes(uint8_t pdrv, uint8_t *buffer, size_t count);
void sdDeselectCard(uint8_t pdrv);

添加完成后,编译器就能识别这些函数的声明,配合库中sd_diskio.cpp的实现代码,即可正常调用。

关于Sketch->Add File无效的原因

Arduino IDE的Add File功能仅能添加项目目录内的文件,而SD库的sd_diskio.cpp属于系统库文件,直接添加后如果头文件引用还是指向系统库路径,IDE不会将其纳入项目编译。只有将文件复制到项目目录并修改引用路径,才能确保文件被编译。

内容的提问来源于stack exchange,提问作者Dinamo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 11:53:11