c语言用数组做循环接收队列的问题

来源:百度知道 编辑:UC知道 时间:2024/05/21 07:43:41
void CAN_BUF_init (void) //初始化接受队列
{
uint i;
for(i=0;i<CAN_BUFLEN*3;i+=3)
CAN_recv_queue[i]=0xFF;
CAN_recv_head=0;
CAN_recv_tail=0;
}

for (i=CAN_recv_head,INC3(i);i!=CAN_recv_head;INC3(i))

if(id3==CAN_recv_queue[i]) IRET //收到重复包

CAN_recv_queue[CAN_recv_head++]=id3;
CAN_recv_queue[CAN_recv_head++]=db[1];
CAN_recv_queue[CAN_recv_head++]=db[2];
if (CAN_BUFLEN*3==CAN_recv_head) CAN_recv_head=0;
if (CAN_recv_head==CAN_recv_tail) INC3(CAN_recv_tail);

我不抬明白什么意思
我想编的程序是接收3个数据做为一个组
特别是对那句
for (i=CAN_recv_head,INC3(i);i!=CAN_recv_head;INC3(i))
的理解

因为是实际项目,代码很长无法全部上传
该段主要是对循环队列进行操作

for (i=CAN_recv_head,INC3(i);i!=CAN_recv_head;INC3(i)) 后面有没有;?
或者if(id3==CAN_recv_queue[i]) IRET //收到重复包 后面缺少{}?

如果for (i=CAN_recv_head,INC3(i);i!=CAN_recv_head;INC3(i)) 后面有;,
可能是进行队列遍历,等待外部中断,如果队列遍历一圈都没等到外部中断,就退出for语句,后面估计有延时错误处理,

如果for语句后面没有;,那就是和if语句一起的,则if语句后面可能缺少{},
那么for语句就是防止接收循环队列溢出

拜托,你问问题,把程序补充完整啊
下面的语句关系,是怎么回事?
其它的函数定义、功能?
全部不知道!!!

for (i=CAN_recv_head,INC3(i);i!=CAN_recv_head;INC3(i))

if(id3==CAN_recv_queue[i]) IRET //收到重复包

CAN_recv_queue[CAN_recv_head++]=id3;
CAN_recv_queue[CAN_recv_head++]=db[1];
CAN_recv_queue[CAN_recv_head++]=db[2];
if (CAN_BUFLEN*3==CAN_recv_head) CAN_recv_head=0;
if (CAN_recv_head==CAN_recv_tail) INC3(CAN_recv_tail);

==================
for (i=CAN_recv_head,INC3(i);i!=CAN_recv_head;INC3(i))
分解一下是:
i=CAN_recv_head;
INC3(i);//什么功能?会改变i的值?
for (;i!=CAN_recv_head;INC3(i))
看样子INC(i)不会改变i的值,那么这个循环语