szpapas 发表于 2013-9-26 00:21:51

pcDuino with RF24L01 问题求教

我想用pcDuino 与 RF24GL01 的模块通讯。发现一个问题,编译的时候出现SPI的库不兼容的情况。

标准的SPI 库:

class SPIClass {
public:
inline static byte transfer(byte _data);

// SPI Configuration methods

inline static void attachInterrupt();
inline static void detachInterrupt(); // Default

static void begin(); // Default
static void end();

static void setBitOrder(uint8_t);
static void setDataMode(uint8_t);
static void setClockDivider(uint8_t);
};


pcDuino 上的SPI 库
class SPIClass {
public:
        SPIClass();
        ~SPIClass();
void begin();
void end();

void setBitOrder(int);
void setDataMode(int);
void setClockDivider(int);
char transfer(char val, int transferMode);

private:
        int _fd;
        int _speed;
};


Mirf的库调用的transfer(byte _data); 是一个参数,而pcDuino上的是 char transfer(char val, int transferMode); 两个参数。

并且其它的函数也不相同。

编译的时候出现:
root@ubuntu:/home/ubuntu/arduino# make
g++-I/home/ubuntu/arduino -I/home/ubuntu/arduino/hardware -I/home/ubuntu/arduino/hardware/arduino -I/home/ubuntu/arduino/hardware/arduino/cores -I/home/ubuntu/arduino/hardware/arduino/cores/arduino -I/home/ubuntu/arduino/hardware/arduino/variants -I/home/ubuntu/arduino/hardware/arduino/variants/sunxi -I/home/ubuntu/arduino/libraries -I/home/ubuntu/arduino/libraries/Serial -I/home/ubuntu/arduino/libraries/SPI -I/home/ubuntu/arduino/libraries/Mirf -I/home/ubuntu/arduino/libraries/Wire-c libraries/Mirf/MirfHardwareSpiDriver.cpp -o libraries/Mirf/MirfHardwareSpiDriver.o -Wno-deprecated-declarations
libraries/Mirf/MirfHardwareSpiDriver.cpp: In member function irtual uint8_t MirfHardwareSpiDriver::transfer(uint8_t)
                                                                                                                     libraries/Mirf/MirfHardwareSpiDriver.cpp:3:26: error: no matching function for call to PIClass::transfer(uint8_t&)
libraries/Mirf/MirfHardwareSpiDriver.cpp:3:26: note: candidate is:
/home/ubuntu/arduino/libraries/SPI/SPI.h:41:8: note: char SPIClass::transfer(char, int)
/home/ubuntu/arduino/libraries/SPI/SPI.h:41:8: note:   candidate expects 2 arguments, 1 provided
libraries/Mirf/MirfHardwareSpiDriver.cpp: In member function irtual void MirfHardwareSpiDriver::begin()
                                                                                                      libraries/Mirf/MirfHardwareSpiDriver.cpp:9:22: error: PI_2XCLOCK_MASKwas not declared in this scope
make: *** Error 1
iver.cpp -o libraries/Mirf/MirfHardwareSpiDriver.o -Wno-deprecated-declarationsr
libraries/Mirf/MirfHardwareSpiDriver.cpp: In member function irtual uint8_t MirfHardwareSpiDriver::transfer(uint8_t)
                                                                                                                     libraries/Mirf/MirfHardwareSpiDriver.cpp:3:26: error: no matching function for call to PIClass::transfer(uint8_t&)
libraries/Mirf/MirfHardwareSpiDriver.cpp:3:26: note: candidate is:
/home/ubuntu/arduino/libraries/SPI/SPI.h:41:8: note: char SPIClass::transfer(char, int)
/home/ubuntu/arduino/libraries/SPI/SPI.h:41:8: note:   candidate expects 2 arguments, 1 provided
libraries/Mirf/MirfHardwareSpiDriver.cpp: In member function irtual void MirfHardwareSpiDriver::begin()
                                                                                                      libraries/Mirf/MirfHardwareSpiDriver.cpp:9:22: error: PI_2XCLOCK_MASKwas not declared in this scope


求高手指点一下,多谢。


szpapas 发表于 2013-9-26 00:39:50

MirfHardwareSpiDriver.cpp.1duino/libraries/Mirf# diff MirfHardwareSpiDriver.cpp
3c3
<       return SPI.transfer(data, SPI_CONTINUE);
---
>       return SPI.transfer(data);
9c9
<       SPI.setClockDivider(SPI_CLOCK_DIV2);// SPI_2XCLOCK_MASK   eqSPI_CLOCK_DIV20x01
---
>       SPI.setClockDivider(SPI_2XCLOCK_MASK);
16d15
<

做这两个修改后,编译通过。但不知道能不能用。

szpapas 发表于 2013-9-26 01:10:53

搞定了,截图为证。

wing 发表于 2013-9-26 10:26:04

{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}{:soso_e179:}
很强大

szpapas 发表于 2013-11-19 21:42:26

今天又看了一下,和用Arduino的做了对比,完全一样。
页: [1]
查看完整版本: pcDuino with RF24L01 问题求教