首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > VxWorks >

一个信号量的有关问题

2012-03-18 
求助一个信号量的问题程序中有两个任务,分别是收和发,收的优先级高。在接收到特写的数据后,用msgQSend()转

求助一个信号量的问题
程序中有两个任务,分别是收和发,收的优先级高。在接收到特写的数据后,用msgQSend()转向发任务进行相关处理。但是在发任务中又需要收任务提供一些支持,比如发了一定的数据包后需要对方回应,而这个回应是收任务处理的,收到回应后发任务才能继续。
  本来想给msgQSend()那里加信号量的,但是这样似乎会造成死锁,因为发任务需要收任务的支持,加了信号量就卡住了。但是不加信号量的话,发任务的执行似乎就没有保障了。
  有两个问题不明白。1、如果不加信号量,那么发任务什么时候开始执行,是msgQSend()后立即转向发任务,还是等收任务走完之后?2、如果加信号量,能否把semTake()放在msgQSend()前(这时在收任务里),然后把semGive()放到发任务中需要收任务支持的地方,也就是信号量的取得和释放分别在两个任务里?

[解决办法]
觉得LZ这个问题可以通过信号量控制,而无须用msgQ的。采用环形数据缓冲区处理似乎也可以做到。
收任务收完数据之后写入环形缓冲区,然后释放信号量,发现场获取信号量之后到数据缓冲区中取数据发送。
这样只有收任务可以放信号量,发现程可以取信号量,就不会死锁了。
[解决办法]
接收数据(收任务)——回复确认(收任务,为了较快发送)——需要发送数据(发任务)——向收站请求发送(发任务)——收站允许发送(收任务)——发送数据(发任务)——收到确认(收任务)。

在收过程中,是不是“接收数据(收任务)” 发生后,以后的过程都是顺序执行的?

热点排行