下面介绍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.任务间的共享资源与同步
|