卜若的代码笔记-一周搞定树莓派-第二十一章:(QT基础九:条件编译,解决git冲突的问题)

1 为什么要条件编译

因为我们的代码是在windows上开发,并通过git同步到liux上去,所以,为了保证同步后的代码能用,比如,在树莓派系统中需要使用wiribgPi这个库,但是在windows上,并没有这个库,所以,就需要条件编译

我们之前讲过,要使用wiringPi,你需要在.pro文件引用,而在windows,你引用wiringPi,肯定会爆异常,因为你没有这个库,所以,你需要条件编译:

另外,我们其实需要调用wiringPi的函数,但是,在Windows里面,你并没有这个函数,所以,也需要在类头文件和.cpp文件里面调通过条件编译去使用这个库

writetool.h:

#ifndef WRITETOOL_H
#define WRITETOOL_H

#define	INPUT			 0
#define	OUTPUT			 1
#define	LOW              0
#define	HIGH			 1
class WriteTool
{

private:
    static WriteTool * ins;
public:
    WriteTool();

    static WriteTool *Instance();

    void setMode(int port,int value);
    void setGPIO(int port,int value);
};

#endif // WRITETOOL_H

writetool.cpp

#include "writetool.h"
 #include "sx.h"
#include <QtGlobal>

#ifdef Q_OS_LINUX

#include"wiringPi.h"

#endif

WriteTool* WriteTool::ins;

WriteTool::WriteTool()
{
    ins = this;
#ifdef Q_OS_LINUX

  wiringPiSetup();

#endif

#ifdef Q_OS_WIN32
// win


#endif

}

WriteTool* WriteTool::Instance(){

    return ins;
}

void WriteTool::setMode(int port, int value){
#ifdef Q_OS_LINUX

    pinMode(port,value);

#endif
#ifdef Q_OS_WIN32
// win
    Sx::Instance()->debug("hello World");
#endif
}

void WriteTool::setGPIO(int port, int value){

#ifdef Q_OS_LINUX

    digitalWrite(port,value);

#endif
}

 我在windows端调用pinMode和digitalRite时:这是槽函数的实现,也就是点击一个按钮,调用task_01_001()

#include "processer.h"
#include    "sx.h"
#include<QLabel>
#include"writetool.h"
Processer::Processer(QWidget *pt):
     QLabel(pt)
{

}
Processer::Processer()
{

}
void Processer::task_01_001(){


    for(int i =0;i<8;i++){

        if(i%2 == 0){
            WriteTool::Instance()->setMode(i,OUTPUT);

            WriteTool::Instance()->setGPIO(i,HIGH);

        }else{
            WriteTool::Instance()->setMode(i,OUTPUT);

            WriteTool::Instance()->setGPIO(i,LOW);

        }

    }

}

这样,我们就只需要维护windows端的代码就可以了,不用再同时维护liux和windows的代码,这对解决git的冲突有极大作用!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值