打印

DSPBIOS任务线程的通信和同步

[复制链接]
816|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jxmzzr|  楼主 | 2014-7-31 17:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面介绍DSP/BIOS 任务线程间的协调,如同步、通信、数据交换等。

      1.MBX邮箱管理模块:使用一组函数通过邮箱对象的句柄管理邮箱的访问。

      通常用MBX_pend函数来等待信箱的信息。该函数可带一超时参数。

      MBX_post用来给信箱发送信息。如果有任务在等待该信箱的信息,该任务变为就绪态,同时MBX_post会根据优先级产生任务切换。如果没有任务在等待状态或邮箱尚有空间,函数MBX_post会简单将信息存储在邮箱中并返回。

      两任务线程可通过邮箱来完成数据的交换。

      MBX邮箱管理API函数:

      MBX_create:动态创建一个邮箱

      MBX_delete:删除一个邮箱

      MBX_pend:等待邮箱的信息

      MBX_post:向邮箱发送信息

      2.SEM管理模块:使用一组函数通过旗语对象的句柄来管理旗语的使用。DSP/BIOS 提供信号量旗语,SEM模块通过对旗语的技术来完成任务线程的同步和相互作用。

      用SEM_pend函数来等待旗语,可带一个超时参数。  

      SEM_post函数用于发送旗语。如果有任务在等待该该旗语,该任务变为就绪态。如果没有任务在等待该旗语,函数SEM_post仅简单的对旗语计数器加1并返回。

      SEM模块的API函数:

      SEM_count:获取旗语计数器的值

      SEM_create:动态创建一个旗语

      SEM_delete:删除一个旗语

      SEM_ipost:发送一次旗语信号(仅用于中断相应)

      SEM_new:初始化一个旗语

      SEM_pend:等待旗语信号

      SEM_post:发送旗语信号

      SEM_reset:复位旗语

      3.QUE模块:通过队列句柄的访问来管理一系列操作函数,每个队列包含0个或多个有序的元素项,其中每个元素项都是一个结构体变量,它的第一个成员类型为QUE_Elem的变量,该结构体成员用作内部指针。

      函数QUE_put和QUE_get是在禁止中断的情况下管理队列的基础函数,因此,这些函数能安全的在任务间或任务与SWI、HWI间共用队列。而其他QUE函数只能在互斥机制协调下,由任务与SWI、HWI调用。

      QUE模块API函数:

     QUE_create:动态创建一个队列

     QUE_delete:删除一个队列

     QUE_dequeue:读取队列前面的元素项

     QUE_empty:测试队列是否为空

     QUE_enqueue:在对列末尾添加元素项

     QUE_get:读取队列最前边的元素项

     QUE_head:读取对列开头的元素项

     QUE_insert:在队列之间插入一个元素项

     QUE_new:将队列设置为空

     QUE_next:返回队列下一个元素项

     QUE_prev:返回队列上一个元素项

     QUE_put:在队列尾添加元素项

     QUE_remove:读取队列中间的元素项

      4.任务间的共享资源与同步

相关帖子

沙发
zhangmangui| | 2014-7-31 23:20 | 只看该作者
谢谢你的分享

使用特权

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

本版积分规则

460

主题

2188

帖子

12

粉丝