单片机开发用的是同事写的一个框架每次都会想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驱动
};
#ifndef GENERATOR_H
#define GENERATOR_H
#include
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
#include
#include
#include
#include
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();
}