OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7530|回复: 7

在一个任务中能否等待多个不同的信号量吗?

[复制链接]

83

主题

400

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2273
金钱
2273
注册时间
2013-8-26
在线时间
228 小时
发表于 2013-9-4 14:14:13 | 显示全部楼层 |阅读模式
建立一个通讯任务。又建立了多个不同的信号量,来发送不同的数据。现在想在一个通讯任务中能否等待这些信号量,来发送不同的数据?
void RS485_task(void *pdata)
{  
    u8 key=6;
u8 rs485buf1[6];    //发送1
u8 rs485buf2[6]; //发送2
u8 rs485buf3[6]; //发送3
u8 rs485buf4[6]; //发送4
u8 rs485buf5[6];  //发送5
u8 rs485buf6[6]; //发送6
u8 rs485buf7[6];    //发送7
u8 rs485buf8[6];    //发送8
u8 err;
 
while(1)
        OSSemPend(sem_open1,0,&err);             //打开负载1
     for(i=0;i<6;i++)
  rs485buf1=LOAD1OPEN;
      send_command_modbus(rs485buf1,6);                  

OSSemPend(sem_close1,0,&err);     //关闭负载1
     for(i=0;i<6;i++)
  rs485buf2=LOAD1CLOSE;  
      send_command_modbus(rs485buf2,6);  
  
  OSSemPend(sem_open2,0,&err);     //打开负载2
     for(i=0;i<6;i++)
  rs485buf3=LOAD2OPEN;  
      send_command_modbus(rs485buf3,6); 
  
  OSSemPend(sem_close2,0,&err);     //关闭负载2
     for(i=0;i<6;i++)
  rs485buf4=LOAD2CLOSE;  
      send_command_modbus(rs485buf4,6);

............
在这个任务中能这样写吗??

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2013-3-5
在线时间
0 小时
发表于 2013-9-4 14:43:31 | 显示全部楼层
回复 支持 反对

使用道具 举报

5

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2013-3-5
在线时间
0 小时
发表于 2013-9-4 14:45:27 | 显示全部楼层
不过这样写不怎么合理!用消息邮箱会更好吧
回复 支持 反对

使用道具 举报

83

主题

400

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2273
金钱
2273
注册时间
2013-8-26
在线时间
228 小时
 楼主| 发表于 2013-9-4 16:30:13 | 显示全部楼层
回复【3楼】zwj598:

不过这样写不怎么合理!用消息邮箱会更好吧

---------------------------------
在实际的过程当中出现错误,如果其中的一个信号量发生了,导致其他的信号量也发生了。。
回复 支持 反对

使用道具 举报

7

主题

85

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2011-3-3
在线时间
12 小时
发表于 2013-9-5 07:36:43 | 显示全部楼层
你别用阻塞等待,用体检判断啊,accept吧 忘了
回复 支持 反对

使用道具 举报

5

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2013-3-5
在线时间
0 小时
发表于 2013-9-5 11:16:51 | 显示全部楼层
回复【4楼】ws_zdyz:

回复【3楼】zwj598:
不过这样写不怎么合理!用消息邮箱会更好吧

---------------------------------
在实际的过程当中出现错误,如果其中的一个信号量发生了,导致其他的信号量也发生了。。

---------------------------------
  那是因为 后面的信号量了但是前面的信号量没发送 任务处于等待状态  等到前面的信号量一发生  后面的信号量本身就有 所以一起发送了! 用信号邮箱发生以后判断信号邮箱的内容来发不同的指令
回复 支持 反对

使用道具 举报

83

主题

400

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2273
金钱
2273
注册时间
2013-8-26
在线时间
228 小时
 楼主| 发表于 2013-9-10 14:26:51 | 显示全部楼层

  那是因为 后面的信号量了但是前面的信号量没发送 任务处于等待状态  等到前面的信号量一发生  后面的信号量本身就有 所以一起发送了! 用信号邮箱发生以后判断信号邮箱的内容来发不同的指令

---------------------------------
那请教大哥,具体怎么解决啊?
回复 支持 反对

使用道具 举报

13

主题

35

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
318
金钱
318
注册时间
2014-9-15
在线时间
82 小时
发表于 2020-4-1 09:17:35 | 显示全部楼层
分别建几个任务来获取信号量
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-24 06:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表