1.你使用过16字节的串口缓冲区吗?那么应该在什么情况下使用?设置多少字节为触发为好?
一般很少有人使用缓冲区,可能是愿意51单片机的使用习惯。在采用中断接收时,常常采用1字节中断。其实使用好串口自带的缓冲区可以使接收效率更高。如我们设置8字节触发中断,那么只要接收到8字节后才触发中断。而不用每接收一字节都去中断,减少了中断后,大大节约了CPU进入中断处理的时间,为其他程序代码的及时处理赢得了宝贵的时间。那么如果一次接收的数据达不到8的整数陪是不是就会丢掉后面的多余的数据呢?答应是否定的,对于这种情况,设计者已经想到,专门配备了一个叫做超时中断的中断标志,在大约4字节接收的时间内没有收到数据,硬件将自动产生超时中断。所以在使用缓冲接收时必须配备超时中断进行处理,从而保证数据的完整性。
那么一般设置多少字节触发为好?
这个问题可能不好回答,不同情况一般可以不同。不过比较常见的是8字节,这样设计的好处是:如果串口已经接收到8字节了,但是由于有比串口中断高的优先级中断产生,可能会导致CPU不能及时处理串口中断,那么我们还有足够(8字节)的缓冲去继续接收其他数据,从而保证了串口接收不丢数据。如果缓冲设置过大(14字节),那么可能会导致数据丢包的情况产生。如果设计过小,会减小CPU的工作效率。特别是在使用操作系统的情况下,串口缓冲的重要性就体现出来了。因为为了保证数据不被破坏,很多情况下都会使用关中断。如果没有缓冲,而又被关了中断,特别容易丢数据。这一点,使用过操作系统的人应该深有感住。
2.你使用过发送中断吗?应该什么情况下使用?
我们在通过串口发送数据时,往往使用查询方式。这种方式虽然简单明了,但是如果串口数据特别多的情况下,会导致整个系统的反应特别迟钝。而且在使用操作系统的情况下,更能体现这一点。由于发送过程特别漫长,将浪费大量宝贵的CUP时间。如果这是配合发送中断,把数据发送让中断函数自动实现,将大大提高系统工作效率。
总结:
很多情况下,大家的使用都非常保守。例如使用I2C,SPI等总线时,总是喜欢使用模拟方式(就是硬件本身支持硬件总线),而不采用硬件方式。其实芯片设计者在设计芯片时已经充分为我们的使用设计好了,在什么情况下使用哪些资源,哪些是必要的。但是由于我们的保守,实际使用的资源非常有限。特别是你使用操作系统的情况下,你将知道采取硬件自身的功能实现,比使用软件实现的好处要多得多。
[ 本帖最后由 zhaojun_xf 于 2012-5-24 07:54 编辑 ] |