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

📄 c_can_test.c

📁 HMS30C7202下的CAN驱动
💻 C
字号:
#include <stdio.h>#include <string.h>#include <fcntl.h>#include <unistd.h>#include <sys/ioctl.h>#include "../include/can.h"#define MAXL 40int main(int argc, char **argv){        int j, i=0, ret=0, count=0;        long id;        int fds=-1;        int fdr=-1;        char ch, transmission[MAXL+1];        char *can0file/*[]*/="/dev/cana0";        char *can1file/*[]*/="/dev/canb0";        char emptystring[MAXL+1]="", buf[MAXL+1];        char remote[MAXL+1];        struct canmsg_t smessage;        struct canmsg_t rmessage;        struct canstatistics_t sstat;        struct canstatistics_t rstat;        printf("\nThis program sends a message from CAN0 to CAN1.\n\n");        if (argc < 4) {                printf("Error: Call \"c_can_test [senddevice] [receivedevice] [message id]\"\n");                return 1;        } else {                can0file = argv[1];                can1file = argv[2];                id = atol(argv[3]);        }        printf("Try to open ");        printf(can0file);        for (j=0; j<500; j++);        if ((fds=open(can0file,O_RDWR)) < 0) {                printf(" : error\n");                return -1;        }        printf(" : ok  fds=%d\n", fds);        printf("Try to open ");        printf(can1file);        for (j=0; j<500; j++);        if ((fdr=open(can1file,O_RDWR)) < 0) {                printf(" : error\n");                return -1;        }        printf(" : ok  fdr=%d\n", fdr);        smessage.flags = 0;        smessage.id = id;        smessage.length = 2;        smessage.data[0] = 10;        smessage.data[1] = 20;        rmessage.flags = 0;        rmessage.id = id;        rmessage.length = 0;        rmessage.data[0] = 0;        rmessage.data[1] = 0;        printf("Setting arbitration mask of %s to id=%d\n", can1file, rmessage.id);        ioctl( fdr, IOCTL_CAN_SET_READ_MODE, rmessage.id );        printf("\nPress enter to send message through %s\n", can0file);        while (getchar() != '\n');        printf("Id   : %lx\n",smessage.id);        printf("length       : %d\n",smessage.length);        printf("flags        : 0x%02x\n", smessage.flags);        //printf("time       : %ld\n", smessage.timestamp);        for (i=0; i<smessage.length; i++)                printf("data%d     : %02x\n",i,                        smessage.data[i]);        ret=write(fds, &smessage, sizeof(struct canmsg_t));        if (ret<0)                printf("Error sending message from %s\n",can0file);        else                printf("Message successfully sent from %s\n",can0file);        printf("\nPress enter read received message of %s\n", can1file);        while ( getchar() != '\n') ;        ret=read(fdr, &rmessage, sizeof(struct canmsg_t));        if (ret<0)                printf("Error receiving message on %s\n",  can1file);        else {                printf("Id      : %lx\n",rmessage.id);                printf("length  : %d\n",rmessage.length);                printf("flags   : 0x%02x\n", rmessage.flags);                printf("time    : %lds %ldus\n", rmessage.timestamp_sec, rmessage.timestamp_usec);                for (i=0; i<rmessage.length; i++)                printf("data%d        : %02x\n",i,                        rmessage.data[i]);        }        printf("\nPress enter print CANstatistics structures of both message objects\n");        while ( getchar() != '\n') ;        printf("Read message object:\n");        while ( getchar() != '\n') ;        ioctl( fdr, IOCTL_CAN_PRINT_STATISTICS );        printf("\nSend message object:\n");        while ( getchar() != '\n') ;        ioctl( fds, IOCTL_CAN_PRINT_STATISTICS );        //printf("wait for interrupt\n");        //while(1);        sleep( 2 );        if ( close( fds ) ) {                printf("Error closing %s\n",can0file);                return -1;        }        if ( close( fdr ) ) {                printf("Error closing %s\n",can1file);                return -1;        }        return 0;}

⌨️ 快捷键说明

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