接收串口数据+实时绘图疑惑

顫_栗 2014-08-19 08:00:04
遇到的问题:实时动态绘图,导致接收的串口数据部分丢失。

具体情况:每隔1ms接收串口一次数据(4个字节),然后我另外开了一个线程绘图,由于动态切换页面要不断重绘。

为什么开了线程还会丢失数据呢?求大神指导。
...全文
374 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你怎么能用windows来处理实时性如此高的业务呢! 建议你做个前置机来采数据,然后1秒集中上送后台一次 不然你这cpu肯定吃不消 我给你推荐个理念吧,凌华ADLINK的高频采集卡 他就是用了数据双缓冲技术,每当buffer半满就向MFC发一个消息 然后你把这半个buffer的数据取出进行保存和绘图 然后周而复始,这才是正常的策略
SiGoYi 2014-08-22
  • 打赏
  • 举报
回复
引用 9 楼 schlafenhamster 的回复:
结构问题: 串口接受要 用 线程 绘图 在 主线程。 串口波特率 9600 时 ,约 1ms 一个字节, 4个 字节 4ms !
是这样了,我们串口的波特率也是9600,我把这个忽略了。
SiGoYi 2014-08-22
  • 打赏
  • 举报
回复
引用 8 楼 u010412702 的回复:
[quote=引用 7 楼 SiGoYi 的回复:] 我把问题分几点给楼主解答一下。因为这个领域所以有些说法我也不一定准确,还希望有明白的大神来指点。 1、具我所知串口传输的效率是1ms一个字节,不知道有没有办法提高这个效率。楼主所说的1ms 4字节不知道是个什么情况。 2、串口传输数据本来就是会丢失数据,类似于网络协议UDP那样的不可靠的传输。 3、用串口想实现协议恐怕也很难,因为好像是不能回传数据。 以上还希望多指教。
你说了很多不过等于没说....我这个速率已经很低的说,串口传输真不是1ms一个字节。[/quote] 我说了,这方面我也刚刚学习不久,也是在学习的过程中,只是知道一些事情就给楼主分享一下。
principl 2014-08-21
  • 打赏
  • 举报
回复
出现RunTime Error这样的错误,往往是应为指针问题造成的,看看你的指针是否正常! 大概分析:(1)绘图时,GDI指针问题 (2)接收数据的缓冲区指针问题。 个人猜测!
顫_栗 2014-08-21
  • 打赏
  • 举报
回复
引用 14 楼 schlafenhamster 的回复:
"现在很奇怪的是同一个exe文件在不同电脑表现不一样" 你的程序, 不能 依赖 CPU 执行时间 ! 即所谓的 1ms !因为你的程序 , 被 OS 调度 不是 固定的 时间 !
那怎么办呢
赵4老师 2014-08-21
  • 打赏
  • 举报
回复
提醒楼主:就算你能实现每100ms刷新一次绘图,请问又有哪个人能用肉眼注意到100ms前和100ms后图形有变化呢?
赵4老师 2014-08-21
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
schlafenhamster 2014-08-21
  • 打赏
  • 举报
回复
"现在很奇怪的是同一个exe文件在不同电脑表现不一样" 你的程序, 不能 依赖 CPU 执行时间 ! 即所谓的 1ms !因为你的程序 , 被 OS 调度 不是 固定的 时间 !
顫_栗 2014-08-21
  • 打赏
  • 举报
回复
查指针bug比较不擅长...run time erro 已经解决,现在很奇怪的是同一个exe文件在不同电脑表现不一样... 两台电脑接受数据和绘图很正常,另外两台电脑5分钟后数据就不正常了,前两台电脑确实处理器要好一点,难道这个会影响?
schlafenhamster 2014-08-20
  • 打赏
  • 举报
回复
"好像现在不丢数据了,但是运行3分钟之后会出现run time erro " 先 找到 error
顫_栗 2014-08-20
  • 打赏
  • 举报
回复
引用 9 楼 schlafenhamster 的回复:
结构问题: 串口接受要 用 线程 绘图 在 主线程。 串口波特率 9600 时 ,约 1ms 一个字节, 4个 字节 4ms !
我的 绘图是副线程,串口波特率是115200.. 好像现在不丢数据了,但是运行3分钟之后会出现run time erro ,很是苦恼...求指导
schlafenhamster 2014-08-20
  • 打赏
  • 举报
回复
结构问题: 串口接受要 用 线程 绘图 在 主线程。 串口波特率 9600 时 ,约 1ms 一个字节, 4个 字节 4ms !
顫_栗 2014-08-20
  • 打赏
  • 举报
回复
引用 7 楼 SiGoYi 的回复:
我把问题分几点给楼主解答一下。因为这个领域所以有些说法我也不一定准确,还希望有明白的大神来指点。 1、具我所知串口传输的效率是1ms一个字节,不知道有没有办法提高这个效率。楼主所说的1ms 4字节不知道是个什么情况。 2、串口传输数据本来就是会丢失数据,类似于网络协议UDP那样的不可靠的传输。 3、用串口想实现协议恐怕也很难,因为好像是不能回传数据。 以上还希望多指教。
你说了很多不过等于没说....我这个速率已经很低的说,串口传输真不是1ms一个字节。
SiGoYi 2014-08-20
  • 打赏
  • 举报
回复
我把问题分几点给楼主解答一下。因为这个领域所以有些说法我也不一定准确,还希望有明白的大神来指点。 1、具我所知串口传输的效率是1ms一个字节,不知道有没有办法提高这个效率。楼主所说的1ms 4字节不知道是个什么情况。 2、串口传输数据本来就是会丢失数据,类似于网络协议UDP那样的不可靠的传输。 3、用串口想实现协议恐怕也很难,因为好像是不能回传数据。 以上还希望多指教。
顫_栗 2014-08-20
  • 打赏
  • 举报
回复
还有个问题就是,我用vs2008写完的程序,用静态链接库的方式生成的exe文件在我电脑里正常使用,到别到电脑exe文件双击之后没反应。
顫_栗 2014-08-20
  • 打赏
  • 举报
回复
不绘图不会丢失,我的数据是用动态数组存储的,但是要实时绘图啊,不能存完之后再绘。 停止接受数据后,再把数据导出来,然后就会发现会丢一些数据,很少。
feixiangmenghuan 2014-08-19
  • 打赏
  • 举报
回复
Serialize
feixiangmenghuan 2014-08-19
  • 打赏
  • 举报
回复
你先将串口读取的数据存放在一个动态数组里呀,最后可以用CTChart控件加载数据绘图
叶恭介叶恭介 2014-08-19
  • 打赏
  • 举报
回复
你不开线程绘图,看会不会丢失先。
顫_栗 2014-08-19
  • 打赏
  • 举报
回复
自己顶上,没人。。。

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧