Chinaunix首页 | 论坛 | 博客
  • 博客访问: 269301
  • 博文数量: 55
  • 博客积分: 3030
  • 博客等级: 中校
  • 技术积分: 682
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-30 11:33
文章分类

全部博文(55)

文章存档

2011年(1)

2010年(12)

2009年(42)

我的朋友

分类: C/C++

2009-11-26 20:52:01

最近本人在开发一个设计,单片机用到的是LPC936,主要的功能是要刷新LCD与扫描键盘,在必要的时候还要不断的接收COM口通过RS485发送过来的数据。开始做的时候,也没有考虑太多,直接用到这两个库函数来接收数据与发送数据,调试时出现了让人难受的问题,键盘灵敏度极低,按好几下还是没有反应,这是作为产品所不能容许的,没办法,我抽了点时间仔细分析了这两个库函数。现把分析结果给大家作参考,在开发通信项目时少走弯路。

库函数printf( )的发送原理:首先在初始化时要把TI1,如果不这样做,你的程序是会一直在JNB TI$这条指令上跑,可能还不理解,以下是这个printf( ) 库函数发送流程图:

系统参数:晶振:11.0592,单片机:LPC936,BAND:9600bps

从以上流程图我想大家明白了它的发送原理,KEIL的模拟发送字节结果来看,发送一个字节用了1042.39us,此波特率发送一位的时间为130.30us,936单片机执行一条单周期指令的时间为180.8ns361.7ns。如果发送多个字节,可以算一下,在顺序执行时,浪费的时间是相当大的,在发送一个字节如果用中断,那么发送一个字节的1042.39us时间可以用来做主程序里面的事,如扫描键盘与刷新LCD,如果转换成可以执行的指令的条数大约为:28825765条!!!

    库函数scanf( )的接收原理:

对这个函数,从模拟结果来看,当接收完到接收下一个数据用时为34.18us,对于9600bpsUART接收一个字节用时833.3us,在这个时间内如果转换成可以执行的指令条数大约为:23044608!!!如果想多接收几个,浪费的时间就是这个数据的倍数,对于想不断的接收数据的系统来说,这个功能函数是不可取的了,用方便是我们喜欢这个函数的地方,但也给系统资源带来了极大的浪费。所以对于通信来说,功能函数是方便,但不一定都可取的。

阅读(3548) | 评论(0) | 转发(0) |
0

上一篇:linux用NFS连接ARM9

下一篇:CRAMFS 与 YAFFS

给主人留下些什么吧!~~