免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5772 | 回复: 14
打印 上一主题 下一主题

高手请进:驱动开发中关于心跳机制的问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-14 09:54 |只看该作者 |倒序浏览
大家好:
        我在开发中遇到了心跳机制的问题,端A和端B通过发送心跳桢来维持心跳,证明模块传输正常!
        
        但是出现了一个问题,假如当模块A有大量数据的时候,会传输给端口B,这个时候需要一定的时间,然后再传输心跳桢给B,由于端口B很长时间才接受到心

跳帧,所以他认为模块已经死掉了!

        如果当A有大量数据时,我只处理部分,然后再发心跳帧,可以维持心跳,但是这样会让端口A的数据越来越多!!!
        
              我该怎么办???忘高手指点一二!!!

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
2 [报告]
发表于 2008-11-14 10:29 |只看该作者
原帖由 geniusmen 于 2008-11-14 09:54 发表
大家好:
        我在开发中遇到了心跳机制的问题,端A和端B通过发送心跳桢来维持心跳,证明模块传输正常!
        
        但是出现了一个问题,假如当模块A有大量数据的时候,会传输给端口B,这个时候需 ...


可不可以在传输数据的时候,人为心跳是正常的?

论坛徽章:
0
3 [报告]
发表于 2008-11-14 10:54 |只看该作者
看楼主的意思是心跳会延长你传输数据的时间

看哪一样更重要吧

我觉得心跳比传输数据更重要, 最起码可以保证不死, 控制下心跳时间呗

论坛徽章:
0
4 [报告]
发表于 2008-11-14 12:22 |只看该作者
原帖由 geniusmen 于 2008-11-14 09:54 发表
大家好:
        我在开发中遇到了心跳机制的问题,端A和端B通过发送心跳桢来维持心跳,证明模块传输正常!
        
        但是出现了一个问题,假如当模块A有大量数据的时候,会传输给端口B,这个时候需 ...



在一个timer的回调函数里给B发心跳帧不可以吗?

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
5 [报告]
发表于 2008-11-14 12:26 |只看该作者
原帖由 rocky1972 于 2008-11-14 12:22 发表



在一个timer的回调函数里给B发心跳帧不可以吗?


他这个本身应该就是定时器发的心跳帧

论坛徽章:
0
6 [报告]
发表于 2008-11-14 12:43 |只看该作者
原帖由 dreamice 于 2008-11-14 12:26 发表


他这个本身应该就是定时器发的心跳帧


哦,把发送心跳包的操作放在子进程中,那可以尝试一下提高子进程的优先级啊,看看效果如何。

其实也可以把大块数据分拆成n份发,这样配合进程优先级后,OS就可以更多的调度发送心跳包的进程了。

论坛徽章:
0
7 [报告]
发表于 2008-11-14 13:33 |只看该作者
谢谢各位的建议,我是写的一个modem驱动,当上网的时候,会很多数据写入模块中,等后模块处理,由于链接网络。所以数据会

  一直不断的写,数据量很大,我目前的处理方法是在一定的时间内,如果还在向模块写入网络数据,那我当达到时间阀值的时候,
  
  就写入一个心跳帧,
  
  如果模块处理的数据吐出来一后,如果没有心跳帧,当达到一定的阀值时间后,我也向模块回应一个心跳帧,

  不知道这样解决可以不可以?

  在这个过程中,我运行 curl -o /root/page.html  www.baidu.com

  模块会突然死了,提示:usb-uhci.c : interrupt , status 3, frame# 952

   是不是我模块处理帧的缓存不够呀??呵呵

  杀死该进程提示:smb_get_length: recv error = 512
                              
                              smb_request:  result -512, setting invalid

   谢谢各位的帮助!!谢谢

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
8 [报告]
发表于 2008-11-14 14:59 |只看该作者
心跳协议应该是独立于你数据传输的吧。
如果你设备又要传输大量的数据,又要传心跳信号,我觉得是没有办法保证的。

论坛徽章:
0
9 [报告]
发表于 2008-11-14 15:28 |只看该作者
谢谢各位的建议,我是写的一个modem驱动,当上网的时候,会很多数据写入模块中,等后模块处理,由于链接网络。所以数据会

  一直不断的写,数据量很大,我目前的处理方法是在一定的时间内,如果还在向模块写入网络数据,那我当达到时间阀值的时候,
  
  就写入一个心跳帧,
  
  如果模块处理的数据吐出来一后,如果没有心跳帧,当达到一定的阀值时间后,我也向模块回应一个心跳帧,

  不知道这样解决可以不可以?

  在这个过程中,我运行 curl -o /root/page.html  www.baidu.com

  模块会突然死了,提示:usb-uhci.c : interrupt , status 3, frame# 952

   是不是我模块处理帧的缓存不够呀??呵呵

  杀死该进程提示:smb_get_length: recv error = 512
                              
                              smb_request:  result -512, setting invalid

   谢谢各位的帮助!!谢谢

   这样我才能保证心跳 一直存在呀!!如果当不能写入心跳了,那么这个时候就认为模块已经死了!

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
10 [报告]
发表于 2008-11-14 17:28 |只看该作者

回复 #9 geniusmen 的帖子

我觉得你可以这样想一下:
模块在发送帧的时候,检查一下是不是要发送心跳帧了,如果是,就等一下,等心跳帧发送完了再操作。毕竟,心跳帧优先级可以说是相当高的,关系到你这个工作的声明。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP