打印
[ZLG-ARM]

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

[复制链接]
1453|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xamic|  楼主 | 2009-6-3 13:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在ARM的设计过程中,通常我们要完成一个(或者一些列)功能的时候有最常用的三种方式:轮询,中断以及轮询+中断。
以最简单的无操作系统的设计为例子,
主函数模型如下:
main()
{
。。。。。//系统配置
。。。。。//初始化端口,寄存器,中断等等。

while(1)
   {

      ..............//功能实现

   }
}

通常如果以中断触发功能的话,比如说定时器,计数器,串口等等,一般都会在中断处理函数里面避免使用
打印函数,因为打印函数是一个慢速的功能函数(通常指串口打印,9600K和115200K的传输速度和系统
几十兆上百兆的速度相比),因此很多设计者都会尽量避免使用打印函数。
      在调试过程中为了调试的需要,我们常常需要观察一些数据,特别是中断里面的数据,因此需要考虑到
上述问题,比如在轮询里面,如果打印信息很快,串口就有可能出现打印不全的现象,还有些数据不需要打印
,如果全部打印,势必会造成主函数的执行效率降低,因此注意一下技巧。

1. 如果打印放在主函数里面,为了得到完整大打印信息,必要考虑使用延时函数,确保程序的运行。
2. 如果不是有每次都打印信息,而打印函数又放在主函数里面,比如,打印串口收到的数据,可以设置
   一个全局变量,串口接收到数据的时候,全局变量值“1”打印完成后全局变量清零,这样使用时有
  两点需要注意,打印函数必须要先判断全局变量的真假,其次打印函数要放在功能函数之后。这样减
  少了打印的次数,增加了函数的执行效率。
3. 如果有外部或者内部中断使能,打印的时候必须充分考虑中断对打印函数的影响。比如,主函数里面
    执行打印的时候有可能发生中断,因此会中断打印的操作(打印函数不是中断处理),这时候打印数
    据有可能被中断修改,因此造成打印信息不准确。这时简单的处理就是在打印的时候先关闭中断,打印
    完成后打开中断,但是这样会降低系统的执行效率。当然这不是最好的执行方式,如果全面考虑的话,
   可以在内存里面建立缓冲区,存储临时数据,或者使用DMA,因此在执行打印函数的时候要根据自己关
   注的数据进行合理的操作。

相关帖子

沙发
lpczcy| | 2009-6-3 14:03 | 只看该作者

顶!

使用特权

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

本版积分规则

36

主题

38

帖子

0

粉丝