这个压缩包包含了在Linux环境下使用Qt框架进行CAN(Controller Area Network)通信开发的相关文件和示例代码。
在Linux环境下使用QT编写Can通信程序有许多现成的例子可以参考,但很多例子都是互相复制的。为了满足项目的特殊需求,我通过直接利用Socket函数从源代码入手开发了一个完整的示例,并包含两个案例分享给大家。
本项目主要涉及以下几个步骤:
1. 绑定Socket;
2. 设置can/can1接口;
3. 配置波特率(发送和接收时的波特率必须一致);
4. 发送数据;
5. 接收处理;
以下是部分代码实现:
```cpp
void MyWindow::startcan(int number) {
int ret = 0;
// 关闭CAN,设置好波特率后重新开启
if (number == 0) { // 对于can0接口
system(ifconfig can0 down);
system(ip link set can0 up type can bitrate 50000 triple-sampling on);
system(ifconfig can0 up);
} else { // 对于can1接口
system(ifconfig can1 down);
system(ip link set can1 up type can bitrate 50000 triple-sampling on);
system(ifconfig can1 up);
}
socket = ::socket(PF_CAN, SOCK_RAW, CAN_RAW);
struct ifreq ifr;
strcpy((char *)(ifr.ifr_name), number == 0 ? can0 : can1);
ioctl(socket, SIOCGIFINDEX, &ifr);
addr.can_family = AF_CAN;
addr.can_ifindex = ifr.ifr_ifindex;
ret = bind(socket, (struct sockaddr*)&addr, sizeof(addr));
if(ret < 0) {
QMessageBox::about(this,error,绑定失败);
exit(1);
}
zyhapi->OpenCan(50000);
ArmCan = new Thread(zyhapi, socket,port);
ArmCan->start();
}
void MyWindow::stopcan(int number){
if(ArmCan) {
ArmCan->stop();
ArmCan->terminate();
ArmCan->wait();
}
zyhapi->CloseCan(number);
}
// 发送数据
void MyWindow::on_sendbtn_clicked(){
struct can_frame frame;
memset(&frame,0,sizeof(struct can_frame));
char buf[8] = {0X20, 0XFF, 0X01, 0X02, 0X03, 0X04, 0XFF, 0XFF};
frame.can_id = 0x20; // 发送的帧ID
frame.can_dlc = sizeof(buf); // 帧数据长度
for(int i=0;i
优质
Graphics.c 是一个用于Linux操作系统的C语言图形编程库,它为开发者提供了便捷的功能来创建和操控图像及窗口系统。
这是一个强大的库,但由于graphics.c非常古老,并且是为DOS环境设计的图形库,在Turbo C中自带。因此,如果想在Linux下使用它进行绘图,则需要手动安装这个库。安装过程相当简单:解压文件后依次执行./configure, make和make install命令,之后就可以开始绘制图形了。
优质
本文章主要介绍在Linux操作系统环境下安装和配置Oracle 11g数据库的相关步骤与技巧。
Linux-Oracle-11g安装包在百度网盘提供下载,欢迎有需要的用户前来获取。