[ZLG-ARM] 请教ZLG串口中间件的问题

[复制链接]
2629|4
 楼主| Herowa 发表于 2007-7-12 16:19 | 显示全部楼层 |阅读模式
请问各位ZLG提供的串口中间件示例程序中的数据队列到底可以容纳多少个字节(#define UART0_SEND_QUEUE_LENGTH 60)?
 楼主| Herowa 发表于 2007-7-12 16:55 | 显示全部楼层

问题描述

我遇到的问题是这样的,需要发送50个字节的数据,可是用“UART0Putch(*cp++);”语句发送后,只出来33个。而且最后出来的两个字节数据还经常改变,所以我怀疑是串口发送数据队列的长度不够,而且光改大UART0_SEND_QUEUE_LENGTH的数值也没有用,请大家帮我分析,谢谢!
 楼主| Herowa 发表于 2007-7-12 19:03 | 显示全部楼层

新发现

我有点理解了,串口发送数据队列不是等所有的数据存完后再一起发送的,而是在串口来不及发送数据时,先把数据存起来,等串口空闲后再发送。不知道我的理解是否正确。<br /><br />另外,上述的问题是波特率为9600时发生的,我无意间使用了19200的波特率,上述的问题就没有了。给人的感觉是选9600波特率时,用于发送那么多字节的时间不够用,而19200波特率发送数据的速度快,所以能将数据全部发送完。<br /><br />我觉得理论上不应该有这样的事情,请问各位是什么原因???<br /><br />谢谢!
 楼主| Herowa 发表于 2007-7-15 17:19 | 显示全部楼层

快沉了,自己顶,等待高手解答!

  
zlgARM 发表于 2007-7-16 22:27 | 显示全部楼层

herowa

您好:&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;UART发送部分只管发送。您给它的数据是什么,它就发送什么。所以,为什么只能发送30多个数据,可能是因为您只给了UART30多个数据(数据缓存区的内容被无意篡改);也有可能是因为发生了错误,导致程序中止,无法继续发送。<br />&nbsp;&nbsp;&nbsp;&nbsp;从您给出的描述“当波特率提高时,该现象消失”来看,可能是因为送数据缓存区的数据填充速度要远快于数据缓存区的数据输出速度(随着串口波特率增大而变快),导致数据缓存区满,而缓存区满了后的处理不合适的话,很容易对缓存区的一些参数出错甚至是产生程序中止。<br />&nbsp;&nbsp;&nbsp;&nbsp;以上意见仅供参考。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

52

帖子

0

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