打印

接收中断

[复制链接]
1704|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 不是处理不过来,就是在那个地点出错

使用特权

评论回复
5
topshuang|  楼主 | 2007-8-22 13:37 | 只看该作者

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

缓冲区有效长度为0-MAX_BUFF_SIZE-1,所以CommBuffer[MAX_BUFF_SIZE]不会有值的   

使用特权

评论回复
6
emailli| | 2007-8-22 13:44 | 只看该作者

既然你的数组

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

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

建议去看一下队列的插入和删除的标准用法。

使用特权

评论回复
7
topshuang|  楼主 | 2007-8-22 13:50 | 只看该作者

我定义的数组是CommBuffer[MAX_BUFF_SIZE]

使用特权

评论回复
8
gjg191| | 2007-8-22 13:59 | 只看该作者

dd

可能多加了1

使用特权

评论回复
9
lixun00| | 2007-8-22 14:12 | 只看该作者

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

使用特权

评论回复
10
topshuang|  楼主 | 2007-8-22 15:44 | 只看该作者

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

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

15

帖子

0

粉丝