接收中断

[复制链接]
2561|9
 楼主| topshuang 发表于 2007-8-22 13:19 | 显示全部楼层 |阅读模式
void RI_Interrupt() interrupt 4 using 1
{
 if(RI)
 {        
   c=SBUF;  
   RI=0;
   StartFlag=1; 
   OverTimeCount=0;
   if(ReceiveCharcount<MAX_BUFF_SIZE)//MAX_BUFF_SIZE为缓冲区的大小
   {      
     ReceiveCharcount++; //串口缓存区里的字符数    
     *pBufferIn=c;   //指向缓冲区的指针
     pBufferIn++;
     if(pBufferIn==&CommBuffer[MAX_BUFF_SIZE])    
     { pBufferIn=&CommBuffer[0];}    //环形缓冲区 
    }    
  }
}
为什么每到缓冲区从尾到头的过渡中 要丢一个字节,怎么优化一下?
lixun00 发表于 2007-8-22 13:24 | 显示全部楼层

波特率多少?按道理不是处理不过来。

emailli 发表于 2007-8-22 13:32 | 显示全部楼层

MAX_BUFF_SIZE

     if(pBufferIn==&CommBuffer[MAX_BUFF_SIZE])    
     { pBufferIn=&CommBuffer[0];}    //环形缓冲区 
    } 

你这个意味着,CommBuffer[MAX_BUFF_SIZE]永远不会有数据存啊!

++的位置需要该一下。自己用笔计算一下比较好。
 楼主| topshuang 发表于 2007-8-22 13:34 | 显示全部楼层

波特率9600 不是处理不过来,就是在那个地点出错

 楼主| topshuang 发表于 2007-8-22 13:37 | 显示全部楼层

缓冲区有效长度为0-MAX_BUFF_SIZE-1,所以MAX_BUFF_SIZE不会存值

缓冲区有效长度为0-MAX_BUFF_SIZE-1,所以CommBuffer[MAX_BUFF_SIZE]不会有值的   
emailli 发表于 2007-8-22 13:44 | 显示全部楼层

既然你的数组

既然你的数组定义是这样的: CommBuffer[MAX_BUFF_SIZE-1]

那么 CommBuffer[MAX_BUFF_SIZE] 你怎么知道这个地址就是下一个地址呢?

建议去看一下队列的插入和删除的标准用法。
 楼主| topshuang 发表于 2007-8-22 13:50 | 显示全部楼层

我定义的数组是CommBuffer[MAX_BUFF_SIZE]

gjg191 发表于 2007-8-22 13:59 | 显示全部楼层

dd

可能多加了1
lixun00 发表于 2007-8-22 14:12 | 显示全部楼层

呵呵,,没仔细看,ls正解

 楼主| topshuang 发表于 2007-8-22 15:44 | 显示全部楼层

问题还没解决,我看了一些资料都是这样写的

您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

15

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部