OpenEdv-开源电子网

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

关于任务间通信 信号量问题

[复制链接]

6

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2014-7-18
在线时间
4 小时
发表于 2015-1-23 13:31:26 | 显示全部楼层 |阅读模式
5金钱
当一个任务执行完毕后没有释放信号量  那么下次执行的时候还需要请求信号量吗
初始化信号量为0,由B任务发送一个信号量。然后A请求信号量。

最佳答案

查看完整内容[请看2#楼]

这种用法是叫任务间同步, MyTask一直在不停地OSSemPend, YouTask则一直在不停地OSSemPost 比如YouTask每隔500ms执行一次OSSemPost, 那么MyTask也会每隔500ms从OSSemPend恢复运行 信号量就是一个计数器,OSSemPend就是执行--操作,如果信号量是0,就减不下去了,MyTask就死在这个点上, OSSemPost就是执行++操作而已
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2013-6-8
在线时间
2 小时
发表于 2015-1-23 13:31:27 | 显示全部楼层
这种用法是叫任务间同步,
MyTask一直在不停地OSSemPend, YouTask则一直在不停地OSSemPost

比如YouTask每隔500ms执行一次OSSemPost, 那么MyTask也会每隔500ms从OSSemPend恢复运行

信号量就是一个计数器,OSSemPend就是执行--操作,如果信号量是0,就减不下去了,MyTask就死在这个点上,
OSSemPost就是执行++操作而已
即使爬到最高的山上,一次也只能脚踏实地地迈一步。
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-1-23 16:05:40 | 显示全部楼层
1、问题描述不清晰
2、请求和释放信号量是由你程序来决定的,究竟要不要请求也要看你的程序,至于能不能请求到那就另说了。
开往春天的手扶拖拉机
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2015-1-23 16:10:09 | 显示全部楼层
信号量对应的资源是消耗型的还是分时复用型的?
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

6

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2014-7-18
在线时间
4 小时
 楼主| 发表于 2015-1-23 16:13:15 | 显示全部楼层
回复【3楼】styleno1:
---------------------------------
复用的
回复

使用道具 举报

6

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2014-7-18
在线时间
4 小时
 楼主| 发表于 2015-1-23 16:15:33 | 显示全部楼层
[mw_shl_code=c,true]void MyTask(void *pdata) { pdata=pdata; while(1) { OSSemPend(Fun_Semp,0,&err); //请求信号量,请求信号量以后如果没有成功任务必须等待 PC_DispStr(0,++y,s1,DISP_BGND_BLACK+DISP_FGND_WHITE); Fun(7,y); // OSSemPost(Fun_Semp); OSTimeDlyHMSM(0,0,1,0); } } void YouTask(void *pdata) { pdata=pdata; while(1) { PC_DispStr(0,++y,s2,DISP_BGND_BLACK+DISP_FGND_WHITE); if(YouTaskRun==5)OSSemPost(Fun_Semp); YouTaskRun++; OSTimeDlyHMSM(0,0,2,0); //发射信号量 } }[/mw_shl_code]

回复

使用道具 举报

6

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2014-7-18
在线时间
4 小时
 楼主| 发表于 2015-1-23 16:16:09 | 显示全部楼层
初始化创建的是 Fun_Semp=OSSemCreate(0);  //创建信号量
回复

使用道具 举报

6

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2014-7-18
在线时间
4 小时
 楼主| 发表于 2015-1-23 16:18:48 | 显示全部楼层
回复【2楼】zuozhongkai:
---------------------------------
就相当于mytask 和youtask 这两个任务一样  信号一直被占用 mytask一直得不到执行
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2015-1-23 17:35:08 | 显示全部楼层
回复【7楼】最美最美:
---------------------------------
最好把运行结果截图或拍照发上来,方便根据结果分析问题。
开往春天的手扶拖拉机
回复

使用道具 举报

5

主题

154

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
205
金钱
205
注册时间
2013-6-8
在线时间
2 小时
发表于 2015-1-23 22:21:59 | 显示全部楼层
还有一种就是用来访问互斥资源,在同一个任务中OSSemPend和OSSemPost成对出现

比如读写SD卡时,
OSSemPend
...//执行SD卡的读写操作
OSSemPost
即使爬到最高的山上,一次也只能脚踏实地地迈一步。
回复

使用道具 举报

6

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2014-7-18
在线时间
4 小时
 楼主| 发表于 2015-1-24 19:45:01 | 显示全部楼层
回复【10楼】倒拔萝卜:
---------------------------------
就是因为mytask信号没有释放, 刚开始看脑子没转过弯来。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-26 13:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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