当前位置: 首页 > news >正文

做海外市场什么网站推广/淘宝店铺运营

做海外市场什么网站推广,淘宝店铺运营,国内著名设计公司,深圳有名的建筑公司Linux CAN通信实现了Linux下的CAN通信——初始化,发两个送和接收(采用队列形式),使用两个线程,还有一个超时响应目前未写。接收部分使用select实现。#ifndef _CAN_H_#define _CAN_H_#include #include #include #include #include #include #…

Linux CAN通信

实现了Linux下的CAN通信——初始化,发两个送和接收(采用队列形式),使用两个线程,还有一个超时响应目前未写。接收部分使用select实现。

#ifndef _CAN_H_

#define _CAN_H_

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include "can_queue.h"

#include "type.h"

#ifndef AF_CAN

#define AF_CAN 29

#endif

#ifndef PF_CAN

#define PF_CAN AF_CAN

#endif

typedef enum

{

CAN_PORT_0 = 0, // can0

CAN_PORT_1, // can1

}can_port_t ;

typedef struct

{

char *name;

int fd;

fd_set fdsr;

pthread_t send_thread;

pthread_t recv_thread;

pthread_t time_thread;

can_queue_t *send_queue; // 接受和发送的队列

can_queue_t *recv_queue;

} can_t;

void *CanInit(int arg);

#endif /* _CAN_H_ */

#include "can.h"

static can_t *can_init(int name)

{

int ret;

struct sockaddr_can addr;

struct ifreq ifr;

struct can_filter rfilter[1];

can_t *current = (can_t *)malloc(sizeof(can_t));

current->fd = Socket(PF_CAN, SOCK_RAW, CAN_RAW);

sprintf(ifr.ifr_name, "can%d", name);

current->name = (char *)malloc(6);

memset(current->name, 0, 6);

sprintf(current->name, "can%d", name);

ret = ioctl(current->fd, SIOCGIFINDEX, &ifr);

if(ret < 0)

{

exit(0);

}

addr.can_family = AF_CAN;

addr.can_ifindex = ifr.ifr_ifindex;

Bind(current->fd, (struct sockaddr *)&addr, sizeof(addr));

rfilter[0].can_id = 0x2;

rfilter[0].can_mask = 0;

Setsockopt(current->fd, SOL_CAN_RAW, CAN_RAW_FILTER, &rfilter, sizeof(rfilter));

return current;

}

static void *can_send_thread(void *arg)

{

int ret;

can_t *current = arg;

can_frame_t frame;

uint8_t read_ret = 0;

while(1)

{

Write(current->fd, &frame, sizeof(frame));

read_ret = current->send_queue->can_read(current->send_queue, &frame);

if(CAN_OK == read_ret)

{

ret = Write(current->fd, &frame, sizeof(frame));

usleep(1200);

}

usleep(100);

}

return NULL;

}

static void *can_recv_thread(void *arg)

{

int ret, i;

can_frame_t frame;

struct timeval tv;

fd_set rset;

can_t *current = arg;

while (1)

{

tv.tv_sec = 0;

tv.tv_usec = 200;

FD_ZERO(&rset);

FD_SET(current->fd, &rset);

ret = select(current->fd + 1, &rset, NULL, NULL, NULL);

if (0 == ret)

{

return NULL;

}

ret = read(current->fd, &frame, sizeof(frame));

if (ret < sizeof(frame))

{

return NULL;

}

if (current->recv_queue->can_write(current->recv_queue, &frame) == CAN_ERROR)

{

}

}

return NULL;

}

void *CanInit(int arg)

{

can_t *current = can_init(arg);

current->recv_queue = CanQueueInit(CAN_RECV_QUEUE_SIZE);

current->send_queue = CanQueueInit(CAN_SEND_QUEUE_SIZE);

pthread_create(&current->send_thread, NULL, can_send_thread, (void *)current);

pthread_create(&current->recv_thread, NULL, can_recv_thread, (void *)current);

}

http://www.lbrq.cn/news/815113.html

相关文章:

  • 中山创海软件网站建设/最新中国新闻
  • xx网站开发建设方案/seo长沙
  • 传承网页设计公司/西安网络推广优化培训
  • 自己的网站怎么做seo/网络推广营销方法
  • 单页网站做cpa/发布软文广告
  • 浙江非标电动车/徐州关键词优化排名
  • 工艺品商城网站建设/信息流广告优秀案例
  • 发表评论的wordpress网站模板/无锡网站优化公司
  • 南城网站仿做/怎么做网络推广
  • 国外用tornado做的网站/学生个人网页制作
  • 百度推广引流/百度seo优化分析
  • 一个网站绑定2个域名/地推公司
  • 有没有教做网站实例视频/武汉seo霸屏
  • 做外文翻译的网站/seo如何优化网站
  • 怀柔区住房和城乡建设委员会网站/如何让百度搜索到自己的网站
  • 有关网站建设的视频/抖音运营推广策划方案
  • 免费学习做网站/竞价托管代运营公司
  • wordpress a 登录/网站页面优化包括
  • 徐州网站建设公司哪个好/网络营销的基本职能
  • 网站建站的流程/平面设计培训
  • 区政府网站建设方案/seo积分优化
  • 论文 网站建设可行性/网络平台销售
  • 免费永久个人网站注册/职业技能培训中心
  • 山西建设厅网站2016年3号文件/网络营销的发展历程
  • SEO网站布局优化/个人网站制作软件
  • 建站策划设计公司/推广之家官网
  • jeecms官网/武汉seo公司排名
  • 网站开发西安/学校网站建设哪家好
  • 给大家科普一下b站推广网站/网络广告形式
  • dreamweaver网站建设教程视频/西安百度竞价外包
  • 1.安装anaconda详细步骤(含安装截图)
  • ARM SMMUv3控制器注册过程分析(八)
  • 零基础学后端-PHP语言(第二期-PHP基础语法)(通过php内置服务器运行php文件)
  • AI 编程工具 Trae 重要的升级。。。
  • Java研学-RabbitMQ(三)
  • Oracle MCP本地部署测试