OpenEdv-开源电子网

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

使用信号量共享资源之后的问题

[复制链接]

3

主题

8

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-4-23
在线时间
4 小时
发表于 2016-4-25 10:10:55 | 显示全部楼层 |阅读模式
2金钱
原子UCOSIII例程,例10-2 UCOSIII使用信号量访问共享资源区中,task1串口输出“任务1”之后,有成功请求到信号量,将“First task Running”拷贝到共享内存中,之后通过延时delay_ms切换到task2。那么问题来了,我认为程序进入task2之后应该从头开始先串口输出“任务2”,填充区域颜色之后再请求信号量,发现没有请求到,再切换回任务1,任务1再输出“First task Running”给串口啊。那为什么串口助手的运行结果是

任务1
First task Running
任务2
Second task Running


而不是我刚才分析的结果,串口助手输出如下:

任务1
任务2
First task Running
Second task Running
为什么我的分析是错误的,感谢各位大神。



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

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-4-25 10:21:23 | 显示全部楼层
本帖最后由 zuozhongkai 于 2016-4-25 10:32 编辑

这个东西比较绕,从任务的第一次运行开始分析吧
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-4-23
在线时间
4 小时
 楼主| 发表于 2016-4-25 10:23:40 | 显示全部楼层
zuozhongkai 发表于 2016-4-25 10:21
直接下载例程到板子上?

嗯,下载后的结果为第一个结果。我想问的是为什么不是我分析的第二个结果,非常感谢
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-4-25 10:33:22 | 显示全部楼层
mc的腰牌 发表于 2016-4-25 10:23
嗯,下载后的结果为第一个结果。我想问的是为什么不是我分析的第二个结果,非常感谢

这个东西比较绕,从第一次进入任务开始分析吧,这个麻烦一句一句的给你讲。
开往春天的手扶拖拉机
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-4-25 10:38:04 | 显示全部楼层
只能提醒你注意一下task1和task2中的OSTimeDlyHMSM()这个延时函数

开往春天的手扶拖拉机
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2016-4-23
在线时间
4 小时
 楼主| 发表于 2016-4-25 13:54:24 | 显示全部楼层
非常感谢。我就是这里不懂,第一次运行到task1的delay_ms函数时,不是会先切换到task2吗。所以说,不是应该输出“任务2”字符了吗,那这里为什么没有输出,谢谢谢谢
回复

使用道具 举报

10

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
192
金钱
192
注册时间
2016-5-11
在线时间
16 小时
发表于 2016-5-11 15:39:01 | 显示全部楼层
我遇到和你一样的问题,楼主。我仿真出来的结果就是你说的
任务1:
任务2:
First task Runnig
Second task Running
但是从第二次输出开始就按照正常的开始输出了。我不知道为什么!我单步执行的话,发现在第一次执行task1任务的时候delay_ms(300)这个函数会进行任务切换,切换一次之后delay函数就不进行切换了。这就是我不明白的地方了。为什么第二次就不进行任务切换了?原子哥及各位高手请回答!
回复

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2016-6-13
在线时间
31 小时
发表于 2016-7-8 17:35:51 | 显示全部楼层
我也遇到同样的疑问,求大神教。
回复

使用道具 举报

4

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2016-6-13
在线时间
31 小时
发表于 2016-7-14 17:23:46 | 显示全部楼层
用延时函数进行任务切换并不只是单纯的切换,还要考虑延时的时间,你们把任务一的delay_ms(300)改为delay_ms(350)自然得到你们预料的结果。如果是delay_ms(300)或是低一点自然是原子哥说的那个结果。你们可以改改试试。:
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-1 20:17

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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