thilo
驱动牛犊
驱动牛犊
  • 注册日期2002-05-19
  • 最后登录2005-06-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1421回复:3

底层协议怎样处理数据的收发?

楼主#
更多 发布于:2002-06-15 16:09
大家好:
    我在作一个底层驱动协议,要对物理层的数据接收和发送,然后对上层也要进行数据的接收和发送。

    对于接收数据,我的硬件有给中断,我通过ISR来处理接收数据。
    但是对于发送数据,我有疑问,我认为有两种方法来做:
1) 做一个发送数据的函数,当协议中要发送数据时直接调用这个函数。等发送函数处理完,再回来。这里有一点是硬件发送的时间与CPU指令处理时间相比是很长的。

2) 另外创建一个task(thread/process),将发送数据单独放在这个task里,可以另外创建两个task,一个发送给物理层,一个发送给上层。
    当协议(main task),要发送数据时,它只是将数据写到一个全局结构中,然后继续处理其他的事情。发送task检测到有发送数据时,在来发送数据。

    大家认为两种方法那个好?我现在是用方法2。但是开了多个任务后,系统很不稳定,我是想改为方法1。

    另外,我的RTOS是uiTRON,它对多任务的处理方法是:
对任务开for(;;)永远循环,但是在循环的结尾出让本task sleep,直到被唤醒。所以,它的多任务实际就势任务A执行一下(A sleep and wake up task B),然后任务B执行一下(B sleep and wake up task A),然后就一直轮流交替。

最新喜欢:

fly_flyfly_fl...
James.Ji
驱动老牛
驱动老牛
  • 注册日期2001-09-17
  • 最后登录2006-05-16
  • 粉丝0
  • 关注0
  • 积分-9分
  • 威望-8点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-06-17 10:52
第一种方法比较好。
我们原先作过的课题都是采用这种方法。但是接收作为一个单独的任务。
发送只做一个函数,用信号量活呼哧量什么的进行锁住。这样做的好处是
减少了任务,任务转换的开销减少,速度相应有增加,另外思路清晰。

第二中方法要维护一个共享数据空间,在处理多个任务时,指针的移动处理要非常小心。
车到山前必有路。 虽然有些土,却是我最有感触的一句话。
mithat
驱动牛犊
驱动牛犊
  • 注册日期2001-04-03
  • 最后登录2004-01-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-07-14 21:49
应该第一种方法比较好。
你的itron可不可以改造啊?估计没有源码的说:)不开源就是不爽?
共同切磋:)
lovewith
驱动牛犊
驱动牛犊
  • 注册日期2004-03-26
  • 最后登录2010-08-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-09-23 20:26
itron与rtlinux实时操作系统各自的优点与缺点。我现在有一个项目。想权衡综合考虑用那一个操作系统。
   itron与rtlinux实时操作系统各自的优点与缺点。我现在有一个项目。想权衡综合考虑用那一个操作系统。
能不能问一下itron的优点与缺点如:
支持多少个任务?提供哪些调度算法?
是不是可抢占内核?--不是说可抢占调度
内核可不可配置?
用什么主要算法保证实时?
同步手段有哪些?信号量有没有反priority inversion的方法?
支持哪些平台?
中断处理有哪些特点?
内核有没有可扩展点?
我的QQ:360003831
游客

返回顶部