原创 单片机KEIL软件下库函数scanf( ) 与printf( )的“爱”与“恨”

2010-6-8 15:56 2999 4 5 分类: MCU/ 嵌入式

单片机KEIL软件下库函数scanf( ) printf( )的“爱”与“恨”<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


 

最近本人在开发一个设计,单片机用到的是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!!!如果想多接收几个,浪费的时间就是这个数据的倍数,对于想不断的接收数据的系统来说,这个功能函数是不可取的了,用方便是我们喜欢这个函数的地方,但也给系统资源带来了极大的浪费。所以对于通信来说,功能函数是方便,但不一定都可取的。\


原文地址:http://blog.21ic.com/user1/3939/archives/2007/40612.html
PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

tarzanfun 2011-8-20 15:32

呵呵,相当浪费了,但是调试确实很方便,比如我想看单片机内部运行时某float的值,常规方法相当麻烦,但是一个printf帮我省了不少事儿,直接一句话就能从串口调试助手看到了。从这里我们也能看到这个函数还是挺强大的,所以会浪费时间,如果只是做简单的事情,就好比打开电脑等开机两分钟进入windows然后再打开计算器算加减乘除一样不划算。
相关推荐阅读
512826028 2015-09-07 00:32
Discuz论坛插件开发资料留存区
这部分就是我用过的资料网站资源等等的汇总。   第一个插件开发 新手教程 http://www.cnblogs.com/upmyself/archive/2013/01/16/286339...
512826028 2015-09-06 21:39
学习Discuz论坛插件开发二
    使用filezille对指定的config文件修改之后,就在discuz论坛后台的插件里面看到了多了一项,就是我需要的 插件开发一项。点进去之后,系统会自动提示此功能仅限开发者使用。 ...
512826028 2015-09-06 20:53
学习Discuz论坛插件开发一
     接触Discuz论坛有几个月的时间了,最近感觉里面的插件很是让我激动,于是,鼓起勇气,开始学习一下怎么自己开发一下插件。       首先接触插件学习,看的是Discuz论坛提供的插...
512826028 2015-09-06 20:27
正式开始蓝线技术,自己重新写博客
        由于CSDN博客很久没有使用,结果给我封了。就暂时把网络部分写这里了。后期会有单片机和蓝牙部分,以后也发表到这个板块里面了。   给自己打打气,加油!      至于啥...
512826028 2012-08-12 11:03
POV LED(我的新版旋转灯)二
  视频的播放地址 http://v.youku.com/v_show/id_XNDM4MTYyMjIw.html   2.       程序编写         首先,我还是想的...
512826028 2012-08-12 10:46
POV LED(我的新版旋转灯)三
由于我没有画电路图。所以,也没有什么电路图给大家看。电路很简单。LED电路使用共阳接法,串接的是330欧姆的电阻。电阻和LED的型号都是0805. 从最外圈向里数,依次是一个绿色LED灯(接P6口),...
EE直播间
更多
我要评论
1
4
关闭 站长推荐上一条 /3 下一条