⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 《嵌入式系统设计与实例开发实验教材II:基于ARM9微处理器与Linux操作系统》——CAN总线通信实验
💻 C
字号:
/************************************************\*	by threewater<threewater@up-tech.com>	**		2003.12.18			**						*\***********************************************/#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <time.h>//#include <sys/types.h>//#include <sys/ipc.h>#include <sys/ioctl.h>#include <pthread.h>//#include "hardware.h"#include "up-can.h"#define CAN_DEV		"/dev/can/0"static int can_fd = -1;#define DEBUG#ifdef DEBUG#define DPRINTF(x...)	printf("Debug:"##x)#else#define DPRINTF(x...)#endifstatic void* canRev(void* t){	CanData	data;	int i;		DPRINTF("can recieve thread begin.\n");	for(;;){		read(can_fd, &data, sizeof(CanData));		for(i=0;i<data.dlc;i++)			putchar(data.data[i]);		fflush(stdout);			}	return NULL;}#define MAX_CANDATALEN		8static void CanSendString(char *pstr){	CanData data;	int len=strlen(pstr);	memset(&data,0,sizeof(CanData));	data.id=0x123;	data.dlc=8;	for(;len>MAX_CANDATALEN;len-=MAX_CANDATALEN){		memcpy(data.data, pstr, 8);		//write(can_fd, pstr, MAX_CANDATALEN);		write(can_fd, &data, sizeof(data));		pstr+=8;	}	data.dlc=len;	memcpy(data.data, pstr, len);	//write(can_fd, pstr, len);	write(can_fd, &data, sizeof(CanData));}int main(int argc, char** argv){	int i;	pthread_t th_can;	static char str[256];	static const char quitcmd[]="\\q!";	void * retval;	int id=0x123;	char usrname[100]={0,};        if((can_fd=open(CAN_DEV, O_RDWR))<0){                printf("Error opening %s can device\n", CAN_DEV);                return 1;        }	ioctl(can_fd, UPCAN_IOCTRL_PRINTRIGISTER, 1);	ioctl(can_fd, UPCAN_IOCTRL_SETID, id);	#ifdef DEBUG	ioctl(can_fd, UPCAN_IOCTRL_SETLPBK, 1);#endif	/* Create the threads */	pthread_create(&th_can, NULL, canRev, 0);	printf("\nPress \"%s\" to quit!\n", quitcmd);	printf("\nPress Enter to send!\n");	if(argc==2){	//Send user name		sprintf(usrname, "%s: ", argv[1]);	}			for(;;){		int len;		scanf("%s", str);				if(strcmp(quitcmd, str)==0){			break;		}				if(argc==2)	//Send user name			CanSendString(usrname);				len=strlen(str);		str[len]='\n';		str[len+1]=0;		CanSendString(str);	}	/* Wait until producer and consumer finish. */	//pthread_join(th_com, &retval);	printf("\n");	close(can_fd);	return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -