OpenEdv-开源电子网

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

信号量访问共享资源(10-2)的串口现象不对,求解

[复制链接]

47

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2016-1-2
在线时间
80 小时
发表于 2016-3-13 09:49:31 | 显示全部楼层 |阅读模式
5金钱
开始自己编程,发现现象不对,参考教程修改,结果现象还是不对。后来烧录学习版自带的10-2实验程序,发现第一组数据不对,其他的数据对。和解?

11111.png

最佳答案

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

我的理解: 第一次出错的原因:首先任务1串口打印“任务1”,然后任务1获得了信号量,之后delay300毫秒切换到任务2,所以串口打印出“任务2”,任务2请求信号量,但是此时信号量没被任务1释放,所以一直等待,等任务1的300ms延时结束后,回到任务1,串口打印出"First task Running!",之后任务1释放信号量进入1秒延时,任务2获得信号量,拷贝了数据就进入300ms延时,此时任务1还在1s延时,所以不会切换到任务1,300ms过后,任务2 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

99

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5233
金钱
5233
注册时间
2015-11-5
在线时间
678 小时
发表于 2016-3-13 09:49:32 | 显示全部楼层
我的理解:
第一次出错的原因:首先任务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!"。然后就循环下去了
回复

使用道具 举报

47

主题

212

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

非常感谢,我刚才测试下,吧delay注释后,现象就对了。。
谢谢,晚安 好梦
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-1 18:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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