不错的**!!!

[复制链接]
18974|94
BitFu 发表于 2009-12-16 15:43 | 显示全部楼层
NO,NO
要用FIFO
要用CRC
zhy433 发表于 2009-12-16 16:11 | 显示全部楼层
小顶一下
xfgood3872 发表于 2010-4-7 20:41 | 显示全部楼层
michaelpan 发表于 2010-6-7 21:29 | 显示全部楼层
不错,挺好的
刘前辈 发表于 2010-6-8 13:17 | 显示全部楼层
本帖最后由 刘前辈 于 2010-6-8 13:47 编辑
static void UartInterruptService(void) interrupt 4
{
    ES = 0;
    RI = 0;
    uart_process(SBUF);
    ES=1;
}


LZ的开篇确实值得质疑,上面66楼网友讲的正根:“ES不可能自己抢占自己。”串口中断硬件内部已经设计好了这种关系:(Intel硬件设计师是干什么的?如果我是硬件设计师,我怎么会把这种关系留给软件设计员?)——首次ES中断发生并进入ISR之后,必然阻断后面的同级中断(如若有的话)并使其进入中断队列排序等待,只有当前ISR完成,RETI 退出串口中断程序之后,此前纪录的、位于队列中的ES=1才会再次触发串口中断。所以,LZ的开篇程序是不是一开始就没写好?后面.....

static void UartInterruptService(void) interrupt 4
{
  //ES = 0;  
    RI = 0;
    uart_process(SBUF);
  // ES=1;
}

其实我最近一直不好处理的问题是:你在一帧数据接收过程中,如果半中间突然应该来的数据中止不来了,怎么办?你的while(RI !=1) ; RI=0;该如何处理才不至于死等?才可能尽快退出当前状态?——你如何尽快感知到通信失效?我知道是利用T0超时,可是怎么写才简单?接收100字节一帧,就要设置100次T0初值?太呆板了吧。(当然可以用宏指令)如若每接收到第50字节时就发生中止或错误接收现象,只好一帧重新来过,以前的都白干!
如何才能提高通信系统可靠性?
andloani 发表于 2010-9-28 20:46 | 显示全部楼层
mark下串口通信,最近正在搞这个。
haolaishi 发表于 2011-9-10 21:14 | 显示全部楼层
dqyubsh 发表于 2011-9-10 23:01 | 显示全部楼层
占位,标记。
DownCloud 发表于 2011-9-11 10:42 | 显示全部楼层
不怎样。
afei9527 发表于 2011-9-12 09:20 | 显示全部楼层
加裤,置顶一周
TRUE_ARM 发表于 2011-9-12 15:11 | 显示全部楼层
这是一个非常糟糕的程序:
1,关中断时间太长,
2,中断解析协议?学生的功课。
hf5542 发表于 2011-9-13 22:41 | 显示全部楼层
顶串口!!!
baiyunfei.k.f 发表于 2011-12-27 10:32 | 显示全部楼层
学习了
abtc1130 发表于 2012-11-20 21:27 | 显示全部楼层
我最近做的程序里也在用串口!我是把数据的接收判断全放在中断中完成的!用状态机,完成一个菜执行下一个数据的接收!用SWTITH语句不是很好!被LZ 的程序搞糊涂了
半日浮生 发表于 2012-11-21 09:53 | 显示全部楼层
好,学习下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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