[ZLG-ARM] ARM系统设计时的使用打印函数的设计技巧-转

[复制链接]
 楼主| xamic 发表于 2009-6-3 13:45 | 显示全部楼层 |阅读模式
在ARM的设计过程中,通常我们要完成一个(或者一些列)功能的时候有最常用的三种方式:轮询,中断以及轮询+中断。<br />以最简单的无操作系统的设计为例子,<br />主函数模型如下:<br />main()<br />{<br />。。。。。//系统配置<br />。。。。。//初始化端口,寄存器,中断等等。<br /><br />while(1)<br />&nbsp;&nbsp;&nbsp;{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;..............//功能实现<br /><br />&nbsp;&nbsp;&nbsp;}<br />}<br /><br />通常如果以中断触发功能的话,比如说定时器,计数器,串口等等,一般都会在中断处理函数里面避免使用<br />打印函数,因为打印函数是一个慢速的功能函数(通常指串口打印,9600K和115200K的传输速度和系统<br />几十兆上百兆的速度相比),因此很多设计者都会尽量避免使用打印函数。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在调试过程中为了调试的需要,我们常常需要观察一些数据,特别是中断里面的数据,因此需要考虑到<br />上述问题,比如在轮询里面,如果打印信息很快,串口就有可能出现打印不全的现象,还有些数据不需要打印<br />,如果全部打印,势必会造成主函数的执行效率降低,因此注意一下技巧。<br /><br />1.&nbsp;如果打印放在主函数里面,为了得到完整大打印信息,必要考虑使用延时函数,确保程序的运行。<br />2.&nbsp;如果不是有每次都打印信息,而打印函数又放在主函数里面,比如,打印串口收到的数据,可以设置<br />&nbsp;&nbsp;&nbsp;一个全局变量,串口接收到数据的时候,全局变量值“1”打印完成后全局变量清零,这样使用时有<br />&nbsp;&nbsp;两点需要注意,打印函数必须要先判断全局变量的真假,其次打印函数要放在功能函数之后。这样减<br />&nbsp;&nbsp;少了打印的次数,增加了函数的执行效率。<br />3.&nbsp;如果有外部或者内部中断使能,打印的时候必须充分考虑中断对打印函数的影响。比如,主函数里面<br />&nbsp;&nbsp;&nbsp;&nbsp;执行打印的时候有可能发生中断,因此会中断打印的操作(打印函数不是中断处理),这时候打印数<br />&nbsp;&nbsp;&nbsp;&nbsp;据有可能被中断修改,因此造成打印信息不准确。这时简单的处理就是在打印的时候先关闭中断,打印<br />&nbsp;&nbsp;&nbsp;&nbsp;完成后打开中断,但是这样会降低系统的执行效率。当然这不是最好的执行方式,如果全面考虑的话,<br />&nbsp;&nbsp;&nbsp;可以在内存里面建立缓冲区,存储临时数据,或者使用DMA,因此在执行打印函数的时候要根据自己关<br />&nbsp;&nbsp;&nbsp;注的数据进行合理的操作。<br />
lpczcy 发表于 2009-6-3 14:03 | 显示全部楼层

顶!

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

本版积分规则

36

主题

38

帖子

0

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