求教,关于编写库文件
本帖最后由 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>才不会报错。库文件我也传上来,请大家帮忙 本帖最后由 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.
由於我的語文不太好, 不知我的表達是否清楚. Super169 发表于 2014-4-14 13:36 static/image/common/back.gif
SPI 跟 Wire 一樣, 需要在 測試程式中加入 #include 去建立一個 runtime instance.
或者你可以看到, 正常 ...
谢谢回复,但是我还是没搞明白这个问题。SPI的实体在头文件SPI.H里声明了的,所以#include<SPI.H> 应该是没问题了的呀。
只有先这样用了,
页:
[1]