极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9947|回复: 2

求教,关于编写库文件

[复制链接]
发表于 2014-4-13 22:37:15 | 显示全部楼层 |阅读模式
本帖最后由 leetle 于 2014-4-29 13:31 编辑

请教各位,我在使用RC522读卡器模块,在网上拷贝了读写操作代码。为以后使用方便,我想把它做成库,但是遇到个头文件包含问题。
我在RC522.H的头文件里#include <SPI.h>, 在RC522.cpp里包含#include "RC522.h".放到库文件夹下。做了个测试文件,编译的时候要报错:D:\Program Files\Arduino\libraries\RC522\RC522.cpp:35: error: 'SPI' was not declared in this scope。
老是说没有定义SPI,但是SPI是在<SPI.H>的头文件是定义了的。我看了Ethernet 的库文件, 在W5100.H的头文件下#include <SPI.h>.按理说我写的库也应该没问题啊。只有在我的测试文件里也#include <SPI.h>才不会报错。库文件我也传上来,请大家帮忙

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2014-4-14 13:36:54 | 显示全部楼层
本帖最后由 Super169 于 2014-4-14 13:39 编辑

SPI 跟 Wire 一樣, 需要在 測試程式中加入 #include 去建立一個 runtime instance.

或者你可以看到, 正常使用一個 class 時, 都需要建立一個 instance / object.
例如你的 RC522, 你也需要加一個類似  RC522 myRC522(....); 之類的 object, 經由 myRC522 去接觸 RC522.
而 SPI 的真正 CLASS 是 SPIClass 而不是 SPI, SPI 只是在 SPI.cpp 當中創建的 instance.  由於 庫本身不可以直接創建出 runtime instance, 所以需要在 runtime 的程式中 #include 一次, 讓它執行並建立一個 instance 出來.

簡單的說, 在 RC522 中 include 的時候, 只能提供有關的 CLASS 的資料, 但不能在庫中 直接創建出一個 runtime 的 object.  

由於我的語文不太好, 不知我的表達是否清楚.  
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-4-27 14:49:25 | 显示全部楼层
Super169 发表于 2014-4-14 13:36
SPI 跟 Wire 一樣, 需要在 測試程式中加入 #include 去建立一個 runtime instance.

或者你可以看到, 正常 ...

谢谢回复,但是我还是没搞明白这个问题。SPI的实体在头文件SPI.H里声明了的,所以#include<SPI.H> 应该是没问题了的呀。
只有先这样用了,
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-10 14:48 , Processed in 0.037497 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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