OpenEdv-开源电子网

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

ucosII中断返回,任务要不要切换?

[复制链接]

25

主题

55

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2013-9-9
在线时间
21 小时
发表于 2014-7-24 17:33:46 | 显示全部楼层 |阅读模式
5金钱
ucosII中,想实现Led渐明渐暗的效果.pwm周期是5ms
实现方法:①开定时中断50us,led做100级亮度,刚好50usX100=5ms
定时中断50us处理完后,直接返回被中断的任务.不作任务切换.(如果做任务切换,这么短的时间,频繁做任务切换,肯定出问题)

不知道大家,使用ucos时,除了tick中断切换任务外.其它中断,都要求做任务切换吗?谈谈大家的看法.

最佳答案

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

因为出中断要使用OSIntExit()函数,所以会发起一次中断级任务调度。如果想退出中断后返回以前的那个任务,可以在进中断之前将以前的任务设为最高优先级
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-7-24 17:33:47 | 显示全部楼层
因为出中断要使用OSIntExit()函数,所以会发起一次中断级任务调度。如果想退出中断后返回以前的那个任务,可以在进中断之前将以前的任务设为最高优先级
开往春天的手扶拖拉机
回复

使用道具 举报

170

主题

917

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1824
金钱
1824
注册时间
2013-4-13
在线时间
63 小时
发表于 2014-7-24 23:18:51 | 显示全部楼层
操作系统的核心任务就是不断执行就绪表的就绪任务,中断结束后如果不执行任务切换,那么系统不就停摆了
手艺人要内外兼修。
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-7-25 10:23:05 | 显示全部楼层
1、你那是什么亮度调节的逻辑?
2、中断退出任务调度,切换到高优先级任务,是很合理的;1楼的方法是蹩脚的,我们能预测的中断发生的时刻吗?
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

25

主题

55

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2013-9-9
在线时间
21 小时
 楼主| 发表于 2014-7-25 11:20:09 | 显示全部楼层
所有的中断退出,都要作任务切换啊?像50us那么短的时间中断(一直存在),频繁的做任务切换,这样不好吗?
回复

使用道具 举报

25

主题

55

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2013-9-9
在线时间
21 小时
 楼主| 发表于 2014-7-25 11:29:20 | 显示全部楼层
我是想只要有一个tick定时中断,专业用来切换任务,就可以了.其它中断,短定时中断50us或I2C,UART,SPI等外设的中断,中断返回时,可以不用切换任务.直接返回当作的任务.


如,有一个IO状态变化中断,估计会很快,10us左右,进中断,设置几个标示就退出了.如果退出,还调用任务切换,若任务切换花掉10us,那程序就不用跑了啊?
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-7-25 20:52:46 | 显示全部楼层
回复【5楼】cheky77:
---------------------------------
你的理解不对,因而造成了其他的误解。
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-9-16
在线时间
0 小时
发表于 2014-10-8 17:18:39 | 显示全部楼层
回复【7楼】styleno1:
---------------------------------
他的误解在哪里? 我也没想明白。
如果真需要这么短的定时中断  那么在此中断函数里不调用OSIntEnter和OSIntExit可以吗?就是干完一个简单的事,然后直接退出中断返回,就像裸机里的中断一样,可以吗?  这样既可以频繁进入该中断做点事,同时又不会频繁发生任务切换了。
回复

使用道具 举报

25

主题

55

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
231
金钱
231
注册时间
2013-9-9
在线时间
21 小时
 楼主| 发表于 2014-10-8 17:28:17 | 显示全部楼层
回复【8楼】清风明月逍遥云:
---------------------------------
还是你理解我的意思.不知道,你有没有这样用过.
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-10-9 10:34:14 | 显示全部楼层
回复【8楼】清风明月逍遥云:
---------------------------------
先说前面:任务切换是分支,由OSIntExit()条件触发的。
再说你的建议:在没有系统调用的中断里,可以不调用这俩API,它们不是必须的。
所以性能有限,如果有高频中断,首先应该考虑硬件能不能承受。

编辑说明:红色部分内容修正
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-9-16
在线时间
0 小时
发表于 2014-10-9 11:12:53 | 显示全部楼层
回复【9楼】cheky77:
---------------------------------
我是UCOS新手 还没做过具体东西  只是考虑原理  9楼说得对  高频中断 硬件是个问题
回复

使用道具 举报

3

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
53
金钱
53
注册时间
2014-9-16
在线时间
0 小时
发表于 2014-10-9 11:15:58 | 显示全部楼层
对了  顺便说一句  即使在此高频中断函数里不调用OSIntEnter和OSIntExit  但似乎仍然应该把OSIntNesting加1和减1吧  否则系统不知道已经有一层中断了 可能会出问题
回复

使用道具 举报

8

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2015-11-25
在线时间
26 小时
发表于 2016-3-24 13:40:51 | 显示全部楼层
我的SPI中断接收      就是因为ucos的OSIntEnter();  OSIntExit(); 总是丢字节  把这两条去掉 就要好很多。
斩断自己的退路,才能更好地赢得出路。
回复

使用道具 举报

8

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2015-11-25
在线时间
26 小时
发表于 2016-3-24 13:45:21 | 显示全部楼层
想请教大家一个问题  我STM32 跑ucosii  SPI要接收大量的数据 100K左右  通过SPI中断进行接收   这时候我发现如果在SPI中断里 调用ucos的OSIntEnter();  OSIntExit(); API    SPI接收到的数据 总是会少字节   而不调用两个API 情况会好很多  但是也还是丢  裸机的时候测试没问题    我想问各位 除了DMA的方式  如何保证在ucos下 外设的中断都能及时的处理
斩断自己的退路,才能更好地赢得出路。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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