5636|13

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教大家串口"死掉"的问题 [复制链接]

Tornador 2.2 Vxworks+S3C2440+摄像头


串口0:和模块通讯
串口1:控制台

遇到的问题是:
摄像头一直拍照的情况下,同时发送大量数据到模块,
非常容易出现串口0死掉的情况就是,接收还能正常接收,发送根本无法发送数据(接示波器无信号)


串口发送的原理是要发送数据的时候调用TxStart,写数据到串口FIFO,FIFO数据发完后产生中断后再写数据到FIFO
如此循环。

我加了写trace发现,TxtStart没有被调用,所以发送的动作根本无法启动。



请教各位这可能是什么原因?谢谢大家了

最新回复

谢谢这位,没多给你分数,见谅。确实是出现了overrun的错误。overrun的时候fifo满,但是因为我判断错误,在fifo满的时候就不去取数据,导致串口死的状态  详情 回复 发表于 2009-10-26 09:54
点赞 关注

回复
举报

1

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
引用 11 楼 yourtse 的回复:
以前调试串口的时候也遇到类似的问题,大致是因为发生了溢出错误后导致 不能接受到数据了。

你可以试试把串口的中断优先级设置为最高,或者把波特率设置的小一点。

最好使用硬件协议通讯,或者软件协议XON/XOFF协议

谢谢。关于流控这点我会注意

我现在遇到的主要问题是不能发送,接收目前还没有问题
 
 

回复

1

帖子

0

TA的资源

禁止访问

板凳
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

4
 
可以采用:接收数据时发现有数据等待发送,就立即启用发送!
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
谢谢回复.
这个建议不错,不过不能治本
如果错误出现了,但是这时候又没有接收到数据,同样还是发送不了
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
引用 3 楼 flashzyx 的回复:
谢谢回复.
这个建议不错,不过不能治本
如果错误出现了,但是这时候又没有接收到数据,同样还是发送不了


不明白你的意思。我说的那个貌似应该做在驱动层吧。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 4 楼 morris88 的回复:
引用 3 楼 flashzyx 的回复:
谢谢回复.
这个建议不错,不过不能治本
如果错误出现了,但是这时候又没有接收到数据,同样还是发送不了


不明白你的意思。我说的那个貌似应该做在驱动层吧。


哦,接收数据不是接收到数据,我可以理解为只要有人read,让驱动自动调用TxStart启动发送。
如果还是没有找到其他的原因,我会尝试这个方法,不过还想就此请教下
1.如果某次通讯只是单纯地发出去,不要求回复,还是有可能造成数据的没发或者晚发
2.修改驱动问题,正常情况串口驱动让我们实现的部分是如下结构中的函数。如果要做
  到有人read,让驱动自动调用TxStart启动发送,就需要修改ttyDrv.c,ttylib.c文件,
  这两个文件一般不去修改的?
struct sio_drv_funcs                                /* driver functions */
    {
    int                (*ioctl)
                        (
                        SIO_CHAN *        pSioChan,
                        int                cmd,
                        void *                arg
                        );

    int                (*txStartup)
                        (
                        SIO_CHAN *        pSioChan
                        );

    int                (*callbackInstall)
                        (
                        SIO_CHAN *        pSioChan,
                        int                callbackType,
                        STATUS                (*callback)(void *, ...),
                        void *                callbackArg
                        );

    int                (*pollInput)
                        (
                        SIO_CHAN *        pSioChan,
                        char *                inChar
                        );

    int                (*pollOutput)
                        (
                        SIO_CHAN *        pSioChan,
                        char                 outChar
                        );
    };

 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 5 楼 flashzyx 的回复:
哦,接收数据不是接收到数据,我可以理解为只要有人read,让驱动自动调用TxStart启动发送。


是驱动从硬件 read 数据。
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(中级)

9
 
有没有可能由于某种原因FIFO的数据一直发送不完,导致循环退不出,所以驱动不会再去调用Txstart ?
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 
另外的原因就是你的任务优先级设的不合理!
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

11
 
引用 8 楼 morris88 的回复:
另外的原因就是你的任务优先级设的不合理!

morris大,这个问题我也很好奇,你能不能再解释一下?
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

12
 
引用 8 楼 morris88 的回复:
另外的原因就是你的任务优先级设的不合理!

谢谢!
我先把不必要的任务先关闭,调整下任务优先级试验下,
有结果上报,没结果只能继续骚扰大家了
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

13
 
以前调试串口的时候也遇到类似的问题,大致是因为发生了溢出错误后导致 不能接受到数据了。

你可以试试把串口的中断优先级设置为最高,或者把波特率设置的小一点。

最好使用硬件协议通讯,或者软件协议XON/XOFF协议
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 11 楼 yourtse 的回复:
以前调试串口的时候也遇到类似的问题,大致是因为发生了溢出错误后导致 不能接受到数据了。

你可以试试把串口的中断优先级设置为最高,或者把波特率设置的小一点。

最好使用硬件协议通讯,或者软件协议XON/XOFF协议


谢谢这位,没多给你分数,见谅。确实是出现了overrun的错误。overrun的时候fifo满,但是因为我判断错误,在fifo满的时候就不去取数据,导致串口死的状态
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表