打印
[技术问题解答]

USB CAN报文接收卡死问题

[复制链接]
2101|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
LuoR|  楼主 | 2016-1-29 11:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下位机是飞思卡尔的K22,用的CDC类虚拟串口,上位机用VC6做的一个CAN报文虚拟串口的收发和滤波软件,在自收发模式下,单次发送一点问题没有,且速度可以50ms自收发,但是发送不同的帧,比如发送标准帧给MCU,然后上位进行滤波,只接受扩展帧,自收发,发送下去,前几条还可以收到,在发送几条程序就会卡死~
这个问题会处在哪里?有做过类似的吗?帮忙分析一下?
问题2:下位机通过串口向PC发报文,自动发送,上位机接收,但是总是接收到第9条的时候就终止了?

相关帖子

沙发
LuoR|  楼主 | 2016-1-29 11:35 | 只看该作者

使用特权

评论回复
板凳
LuoR|  楼主 | 2016-1-29 11:47 | 只看该作者
顶一下

使用特权

评论回复
地板
月光疾風| | 2016-1-30 09:30 | 只看该作者
串口什么的监控看一下

使用特权

评论回复
5
杨爱林林| | 2016-2-3 14:42 | 只看该作者
是上位机卡死吗

使用特权

评论回复
6
LuoR|  楼主 | 2016-2-17 08:51 | 只看该作者

对的  是上位机卡死  未响应

使用特权

评论回复
7
杨爱林林| | 2016-2-17 09:11 | 只看该作者
LuoR 发表于 2016-2-17 08:51
对的  是上位机卡死  未响应

这个一般都是上位机程序问题,我遇到过datagridview数据量大卡死,最后是用invoke方法弄得。用的是C#,
你到C++或C#论坛问问

使用特权

评论回复
8
LuoR|  楼主 | 2016-2-17 09:39 | 只看该作者
杨爱林林 发表于 2016-2-17 09:11
这个一般都是上位机程序问题,我遇到过datagridview数据量大卡死,最后是用invoke方法弄得。用的是C#,
...

我用VC6做的上位,有的模式运行很顺畅,有的便不行,很困惑,数据量很小的

使用特权

评论回复
9
杨爱林林| | 2016-2-17 10:01 | 只看该作者
LuoR 发表于 2016-2-17 09:39
我用VC6做的上位,有的模式运行很顺畅,有的便不行,很困惑,数据量很小的 ...

数据量很小都能卡死  实在理解不了
先让上位机能读到数据再看  读到了再讨论卡不卡

使用特权

评论回复
10
LuoR|  楼主 | 2016-2-17 10:14 | 只看该作者
杨爱林林 发表于 2016-2-17 10:01
数据量很小都能卡死  实在理解不了
先让上位机能读到数据再看  读到了再讨论卡不卡 ...

可以读到数据,就是收发个CAN报文,单条发送  时间间隔可以在30-50ms内,如果一次发送多条则会卡

使用特权

评论回复
11
杨爱林林| | 2016-2-17 10:28 | 只看该作者
你用的是什么控件显示报文的listview还是datagridview
百度一下invoke方法

使用特权

评论回复
12
LuoR|  楼主 | 2016-2-17 10:46 | 只看该作者
杨爱林林 发表于 2016-2-17 10:28
你用的是什么控件显示报文的listview还是datagridview
百度一下invoke方法

是这个吗?我把程序贴一下,你那有VC的环境吗?帮忙看下

在多线程编程中,我们经常要在工作线程中去更新界面显示,而在多线程中直接调用界面控件的方法是错误的做法,Invoke 和 BeginInvoke 就是为了解决这个问题而出现的,使你在多线程中安全的更新界面显示。

正确的做法是将工作线程中涉及更新界面的代码封装为一个方法,通过 Invoke 或者 BeginInvoke 去调用,两者的区别就是一个导致工作线程等待,而另外一个则不会。

使用特权

评论回复
13
LuoR|  楼主 | 2016-2-17 10:52 | 只看该作者
杨爱林林 发表于 2016-2-17 10:28
你用的是什么控件显示报文的listview还是datagridview
百度一下invoke方法

用的list

使用特权

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

本版积分规则

14

主题

105

帖子

1

粉丝