OpenEdv-开源电子网

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

OSTaskSuspend()挂起后,之后的代码为什么还能执行?不是立即挂起的吗?

[复制链接]

2

主题

7

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2016-8-8
在线时间
4 小时
发表于 2018-1-27 17:21:15 | 显示全部楼层 |阅读模式
1金钱
我在开始任务中调用了OSTaskSuspend()挂起开始任务后,之后退出临界区的代码为什么还能执行?不是执行了OSTaskSuspend()之后就立即挂起的吗?

比如这里,后边我再添一句控制LED的语句也能执行

比如这里,后边我再添一句控制LED的语句也能执行

最佳答案

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

因为你的用法有问题,OSTaskSuspend修改就绪表,挂起任务并切换是通过调用OS_TASK_SW()触发OS_CPU_PendSVHandler中断来切换的,你在外面包裹了临界区代码,及时中断标志位置起了,中断也触发不了,只有退出之后才能成功切换,所以后面能够执行,加其它代码只要在OS_CRITICAL_EXIT之前都能执行。临界区一般是用于共享数据的,像这种os内函数基本自带保护,你这种情况就是滥用
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

401

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1769
金钱
1769
注册时间
2015-6-11
在线时间
313 小时
发表于 2018-1-27 17:21:16 | 显示全部楼层
本帖最后由 zc123 于 2018-1-27 22:42 编辑

因为你的用法有问题,OSTaskSuspend修改就绪表,挂起任务并切换是通过调用OS_TASK_SW()触发OS_CPU_PendSVHandler中断来切换的,你在外面包裹了临界区代码,及时中断标志位置起了,中断也触发不了,只有退出之后才能成功切换,所以后面能够执行,加其它代码只要在OS_CRITICAL_EXIT之前都能执行。临界区一般是用于共享数据的,像这种os内函数基本自带保护,你这种情况就是滥用
回复

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2016-8-8
在线时间
4 小时
 楼主| 发表于 2018-1-28 12:33:03 | 显示全部楼层
zc123 发表于 2018-1-27 22:41
因为你的用法有问题,OSTaskSuspend修改就绪表,挂起任务并切换是通过调用OS_TASK_SW()触发OS_CPU_PendSVHa ...

奥奥,这么说明白了,谢谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-10 02:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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