打印
[ZLG-ARM]

请教ZLG串口中间件的问题

[复制链接]
1688|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Herowa|  楼主 | 2007-7-12 16:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
Herowa|  楼主 | 2007-7-12 16:55 | 只看该作者

问题描述

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

使用特权

评论回复
板凳
Herowa|  楼主 | 2007-7-12 19:03 | 只看该作者

新发现

我有点理解了,串口发送数据队列不是等所有的数据存完后再一起发送的,而是在串口来不及发送数据时,先把数据存起来,等串口空闲后再发送。不知道我的理解是否正确。

另外,上述的问题是波特率为9600时发生的,我无意间使用了19200的波特率,上述的问题就没有了。给人的感觉是选9600波特率时,用于发送那么多字节的时间不够用,而19200波特率发送数据的速度快,所以能将数据全部发送完。

我觉得理论上不应该有这样的事情,请问各位是什么原因???

谢谢!

使用特权

评论回复
地板
Herowa|  楼主 | 2007-7-15 17:19 | 只看该作者

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

使用特权

评论回复
5
zlgARM| | 2007-7-16 22:27 | 只看该作者

herowa

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

使用特权

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

本版积分规则

24

主题

52

帖子

0

粉丝