OpenEdv-开源电子网

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

ucosiii信号量保护共享资源问题

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2015-10-26
在线时间
1 小时
发表于 2016-3-11 22:51:29 | 显示全部楼层 |阅读模式
原子哥:战舰下载你们官方信号量保护共享资源例程出现如下问题。每次复位时候第一次串口输出的不对,后面都正常。如下图:
C(}{{4AI15A{}5`U}OTH7ZR.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

47

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2016-1-2
在线时间
80 小时
发表于 2016-3-13 11:03:23 | 显示全部楼层
原来你也发现了   

握爪
回复 支持 反对

使用道具 举报

11

主题

99

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5269
金钱
5269
注册时间
2015-11-5
在线时间
681 小时
发表于 2016-3-15 16:14:45 | 显示全部楼层

我的理解:
第一次出错的原因:首先任务1串口打印“任务1”,然后任务1获得了信号量,之后delay300毫秒切换到任务2,所以串口打印出“任务2”,任务2请求信号量,但是此时信号量没被任务1释放,所以一直等待,等任务1的300ms延时结束后,回到任务1,串口打印出"First task Running!",之后任务1释放信号量进入1秒延时,任务2获得信号量,拷贝了数据就进入300ms延时,此时任务1还在1s延时,所以不会切换到任务1,300ms过后,任务2继续运行,打印"Second task Running!"
之后又正常的原因:继续上面,任务2释放信号量,然后开始1s延时,延时700ms时任务1的延时时间到了,任务1打印“任务1”,任务1获得信号量拷贝数据,延时300ms后,任务1和任务2同时就绪,任务1的优先级高,先运行任务1,串口打印"First task Running!"并释放信号量,然后1s延时,运行任务2,任务2打印“任务2”,任务2获得信号量,延时300ms,此时任务1还在等待,任务2继续运行打印"Second task Running!"。然后就循环下去了
回复 支持 反对

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
28
金钱
28
注册时间
2015-10-26
在线时间
1 小时
 楼主| 发表于 2016-3-15 20:21:57 | 显示全部楼层
逍遥叹乄 发表于 2016-3-15 16:14
我的理解:
第一次出错的原因:首先任务1串口打印“任务1”,然后任务1获得了信号量,之后delay300毫秒 ...

谢谢 你理解的非常对
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 16:30

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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