arm_linux_c can口编程 结构体赋值问题

黑鹰007 嵌入式开发工程师  2015-11-18 03:15:31
//## The CAN message structure.
typedef struct {
//flags, indicating or controlling special message properties
int flags;
int cob; //CAN object number, used in Full CAN
unsigned long id; //CAN message ID, 4 bytes
struct timeval timestamp; //time stamp for received messages
short int length; //number of bytes in the CAN message
unsigned char data[CAN_MSG_LENGTH]; //data, 0...8 bytes
} canmsg_t;

typedef struct {
canmsg_t mmsg[83];
int mnum;
}canmsgs_t;
int i = 0;
for (i = 0; i < msgs.mnum; ++i)//循环msgs中有can数据的帧数
{
rx = msgs.mmsg[i]; //将一帧数据赋值给rx
}



rx = msgs.mmsg[i];
这样赋值时把什么数据给他了呢?

...全文
393 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
黑鹰007 2015-11-30
清楚了,can的缓冲区是根据板子的型号来的,我用的是盛博的3221的板卡,can缓冲区大小是400帧,read能够读取所欲整个缓冲区,除非传感器采集速率太慢没有存满,如果很快的话理论上是能读到接近400的
回复
黑鹰007 2015-11-28
rx 是这个类型的canmsg_t 我现在明白了 结构体里面嵌套结构体数组 有个疑问的地方是用ssize_t read (int fd, void *buf, size_t count); 如果fd参数是打开一个结构体(can通信的数据包),那count就不算一个字节了吧,我打印read的返回值就是等于count,如果其他设备通过can发数据给我,通过read能不能实时读取发送过来的全部数据呢? 我也是第一次弄,好多不明白,还请各位不吝赐教,谢谢!!!
回复
worldy 2015-11-27
将结构体的canmsgs_t的canmsg_t数组的最后一个成员赋值给rx 话说,这是个多蛋疼的代码片段,那个循环简直是多此一举
回复
happy小文字 2015-11-20
rx这里具体的定义是啥??建议你用si跟进去看下,你这贴的只是一部分不清不楚的
回复
fly 100% 2015-11-19
代码不全吧 msgs在哪》
回复
黑鹰007 2015-11-19
是从can1接口读取的数据
回复
黑鹰007 2015-11-19

 if((msgs.mnum = read(fd_CAN, msgs.mmsg, 83))>0 ) 	// 从CAN1读取数据  
	    {	
			int i = 0;
    for (i = 0; i < msgs.mnum; ++i)//循环msgs中有can数据的帧数
    {
        rx = msgs.mmsg[i];    //将一帧数据赋值给rx
         }	
        }
回复
相关推荐
发帖
驱动开发/核心开发
创建于2007-09-28

2.1w+

社区成员

硬件/嵌入开发 驱动开发/核心开发
申请成为版主
帖子事件
创建了帖子
2015-11-18 03:15
社区公告
暂无公告