我正在制作一个C++类来管理与一个设备(SPI)的通信。这个想法是使用这个C++类在阿杜伊诺和树莓PI。这样我只需要上一次课。你知道吗
我将在Arduino上使用这个类(这没有问题)。 我还想把它和python一起用在我的Raspberry Pi上。(问题来了)
我已经做了一个测试类(矩形)来在这两个类上使用它。这次成功了:)
现在我偶然发现了一个问题,我真正的类。你知道吗
我的想法是制作一个namespace
,里面有两个类(一个public
,一个private
)。管理设备通信的public
设备。用来管理设备所需的SPI总线的private
。你知道吗
现在我想用mikem的bcm2835类创建SPI类,这就是我得到错误的地方。(http://www.airspayce.com/mikem/bcm2835/)。你知道吗
我制作的下一个文件(我知道,它仍然是公开的):设备.h
namespace device {
class Spi {
public:
int speed, modus;
Spi(int speed, int modus);
~Spi();
void openSpi();
void closeSpi();
void writeSpi(int dataToWrite);
int readSpi();
};
}
设备.cpp
#include "Device.h"
#include “bcm2835.h”
#include <iostream>
using namespace device;
//###############################################################################################
//***********************************************************************************************
// Constructors:
// Default constructor: speed = 1MHz, modus = 0
// Specific constructor: speed = var(int), modus = var(int)
//***********************************************************************************************
//Specific
Spi::Spi(int speed, int modus) {
speed = speed;
modus = modus;
}
//Default
Spi::~Spi() {
}
//###############################################################################################
void Spi::openSpi() {
if (!bcm2835_init())
{
std::cout<< "bcm2835_init failed." ;
//return 1;
}
std::cout << "SPI is open.";
}
void Spi::closeSpi()
{
std::cout << "SPI is closed.";
}
void Spi::writeSpi(int dataToWrite) {
std::cout << "SPI write: " << dataToWrite;
}
int Spi::readSpi() {
return 0;
}
开发pyx
cdef extern from "Device.h" namespace "device":
cdef cppclass Spi:
Spi(int, int) except +
int speed, modus
void openSpi()
void closeSpi()
void writeSpi(int)
int readSpi()
cdef class PySpi:
cdef Spi *thisptr
def __cinit__(self, int speed, int modus):
self.thisptr = new Spi(speed, modus)
def __dealloc__(self):
del self.thisptr
def openSpi(self):
self.thisptr.openSpi()
def closeSpi(self):
self.thisptr.closeSpi()
def writeSpi(self, data):
self.thisptr.writeSpi(data)
def readSpi(self):
return self.thisptr.readSpi()
设置.py
from distutils.core import setup, Extension
from Cython.Build import cythonize
setup(ext_modules = cythonize(Extension(
"dev",
sources=["dev.pyx","Device.cpp"],
language="c++",
)))
我在构建时没有出错,但是在python中“import dev”时会出错。我得到一个错误:
undefined symbol: bcm2835_init
有人知道我做错了什么吗?你知道吗
bcm2835_init
大概在“bcm2835.cpp”中,所以您需要将其添加到sources
中设置.py““或者,如果您已经编译了bcm2835库,您可能希望通过添加到设置.py““
你得到这个错误是因为你调用了函数设备.cpp)但从不提供函数的定义。你知道吗
相关问题 更多 >
编程相关推荐