我用QT写了个单片机框架代码生成器

单片机开发用的是同事写的一个框架每次都会想Linux一样注册驱动,这个过程是重复的过程,学了几天QT写了一个框架代码生成器,直接生成驱动名称带.C文件.并且知道放到指定位置.
在这里插入图片描述

这是我的工程目录在这里插入图片描述

在这里插入图片描述### 需要往工程里添加新的驱动,
在这里插入图片描述
点击确认生成就可以生成驱动框架文件
在这里插入图片描述

生成的框架代码 就名称不同,在固定框架内添加或者修改代码.

/**************头文件引用******************/
#include "inc.h"
//模块名称
//管脚定义
//模块功能

//功能模块初始化
void DEV_KEY_Init(void)
{
    
    
	
}
//读一个字节
int DEV_KEY_r1(int fd)
{
    
    
	return 0;
}
//写一个字节
int DEV_KEY_w1(int fd,int buf)
{
    
    
	return 0;
}
//读数据
int DEV_KEY_r(int fd,void *buf,int len)
{
    
    
	return 0;	
}
//写数据
int DEV_KEY_w(int fd,void *buf,int len)
{
    
    
	return 0;
}
//IO驱动
int DEV_KEY_io(int fd,int mode,int value)
{
    
    
	return 0;
}
//参数为无意义初始变量名称,不要重复
DRV(DEV_KEY){
    
    

	DEV_KEY_Init();
	rxm_reg_r1(DEV_KEY,&DEV_KEY_r1);	//注册读一个字节驱动
	rxm_reg_w1(DEV_KEY,&DEV_KEY_w1);	//注册写一个字节驱动
	rxm_reg_r(DEV_KEY,&DEV_KEY_r);	//注册读数据
	rxm_reg_w(DEV_KEY,&DEV_KEY_w);	//注册写数据
	rxm_reg_io(DEV_KEY,&DEV_KEY_io);	//注册IO驱动
};

QT工程

在这里插入图片描述

#ifndef GENERATOR_H
#define GENERATOR_H

#include <QWidget>


QT_BEGIN_NAMESPACE
namespace Ui {
    
     class Generator; }
QT_END_NAMESPACE

class Generator : public QWidget
{
    
    
    Q_OBJECT

public:
    Generator(QWidget *parent = nullptr);
    ~Generator();

    void newFile();
private slots:
    void on_pushButton_clicked();

    void on_btn_checkAll_clicked();

    void on_btn_cancel_clicked();

    void on_btn_OKcc_clicked();

private:
    Ui::Generator *ui;
    //为真表示文件没有保存过,为假表示文件已经被保存过了
    bool isUntitled;
    //保存当前文件的路径
    QString curFile;
};
#endif // GENERATOR_H

#include "generator.h"
#include "ui_generator.h"
#include <QClipboard>
#include <QMessageBox>
#include <QFile>
#include <QDir>
#include <QDebug>
Generator::Generator(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Generator)
{
    
    
    ui->setupUi(this);
    isUntitled =true;
}

Generator::~Generator()
{
    
    
    delete ui;
}

//文件新建
void Generator::newFile()
{
    
    

}

//获取剪切板内容
void Generator::on_pushButton_clicked()
{
    
    
    const QClipboard *clipboard = QApplication::clipboard(); //获取剪切版内容
          QString text=clipboard->text();
          ui->le_drv->setText(text);
}



//全选
void Generator::on_btn_checkAll_clicked()
{
    
    
    ui->reg_r1_box->setChecked(true);
    ui->reg_w1_box->setChecked(true);
    ui->reg_r_box->setChecked(true);
    ui->reg_w_box->setChecked(true);
    ui->reg_io_box->setChecked(true);
    ui->reg_ls_box->setChecked(true);
    ui->reg_wr_box->setChecked(true);
}
//取消
void Generator::on_btn_cancel_clicked()
{
    
    
    ui->reg_r1_box->setChecked(false);
    ui->reg_w1_box->setChecked(false);
    ui->reg_r_box->setChecked(false);
    ui->reg_w_box->setChecked(false);
    ui->reg_io_box->setChecked(false);
    ui->reg_ls_box->setChecked(false);
    ui->reg_wr_box->setChecked(false);
}


//生成代码
void Generator::on_btn_OKcc_clicked()
{
    
    
    QString ljdev = ui->lj_drv->text();
    QString path= QDir::toNativeSeparators(ljdev);
    qDebug() << "currentPath=" << path;
    QString ledev = ui->le_drv->text();//生成文件名称
    QFile file(path + "\\"+ledev+".c");
    file.open(QIODevice::WriteOnly);
    //头文件
    file.write("/**************头文件引用******************/\n#include \"inc.h\"\n//模块名称\n//管脚定义\n//模块功能\n\n//功能模块初始化\n");
    //设置初始化文件
    file.write("void "+ledev.toUtf8() + "_Init(void)\n{\n\t\n}\n");

    //驱动函数
    if(ui->reg_r1_box->isChecked())
    {
    
    
        file.write("//读一个字节\nint "+ledev.toUtf8()+"_r1(int fd)\n{\n\treturn 0;\n}\n");
    }
    if(ui->reg_w1_box->isChecked())
    {
    
    
        file.write("//写一个字节\nint "+ledev.toUtf8()+"_w1(int fd,int buf)\n{\n\treturn 0;\n}\n");
    }
    if(ui->reg_r_box->isChecked())
    {
    
    
        file.write("//读数据\nint "+ledev.toUtf8()+"_r(int fd,void *buf,int len)\n{\n\treturn 0;\t\n}\n");
    }
    if(ui->reg_w_box->isChecked())
    {
    
    
        file.write("//写数据\nint "+ledev.toUtf8()+"_w(int fd,void *buf,int len)\n{\n\treturn 0;\n}\n");
    }
    if( ui->reg_io_box->isChecked())
    {
    
    
        file.write("//IO驱动\nint "+ledev.toUtf8()+"_io(int fd,int mode,int value)\n{\n\treturn 0;\n}\n");
    }
    if(ui->reg_ls_box->isChecked())
    {
    
    

    }
    if(ui->reg_wr_box->isChecked())
    {
    
    

    }
    //初始化函数
    file.write("//参数为无意义初始变量名称,不要重复\nDRV("+ledev.toUtf8()+"){\n\n");
    //硬件初始化
    file.write("\t" + ledev.toUtf8() + "_Init();\n");
    if(ui->reg_r1_box->isChecked())//注册读一个字节驱动
    {
    
    
        file.write("\trxm_reg_r1("+ledev.toUtf8()+",&"+ledev.toUtf8()+"_r1);\t//注册读一个字节驱动\n");
    }
    if(ui->reg_w1_box->isChecked())//注册写一个字节
    {
    
    
        file.write("\trxm_reg_w1("+ledev.toUtf8()+",&"+ledev.toUtf8()+"_w1);\t//注册写一个字节驱动\n");
    }
    if(ui->reg_r_box->isChecked())//注册读数据
    {
    
    
        file.write("\trxm_reg_r("+ledev.toUtf8()+",&"+ledev.toUtf8()+"_r);\t//注册读数据\n");
    }
    if(ui->reg_w_box->isChecked())
    {
    
    
        file.write("\trxm_reg_w("+ledev.toUtf8()+",&"+ledev.toUtf8()+"_w);\t//注册写数据\n");
    }
    if( ui->reg_io_box->isChecked())//注册IO驱动
    {
    
    
        file.write("\trxm_reg_io("+ledev.toUtf8()+",&"+ledev.toUtf8()+"_io);\t//注册IO驱动\n");
    }
    file.write("};\n");
    file.close();
}

总结:

以实战为练习的学习,效率最高.加油

猜你喜欢

转载自blog.csdn.net/weixin_42839808/article/details/124425619