OpenEdv-开源电子网

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

ucos2任务调度问题

[复制链接]

7

主题

19

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1309
金钱
1309
注册时间
2015-12-26
在线时间
114 小时
发表于 2018-10-17 15:49:25 | 显示全部楼层 |阅读模式
1金钱
我是一个初学者,现有一个问题有疑问,在一个任务里必需调用延时OSTimeDlyHMSM(0, 0, 0, 1)来进行任务调度吗?
我直接在任务里调用OS_Sched();程序就不能正常运行,请教一下各位老师是怎么回事?
下面的代码不能运行,把OS_Sched();注释掉,换成OSTimeDlyHMSM(0, 0, 0, 1);就能运行了

void led3_task(void *pdata)
{
        CPU_INT08U  os_err;
        while(1)
        {
                OSSemPend(sem_xinhaolian,0,&os_err);
                LED3=!LED3;
                OS_Sched();
        //        OSTimeDlyHMSM(0, 0, 0, 1); //小于5ms切换不成功
        }
}

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165287
金钱
165287
注册时间
2010-12-1
在线时间
2107 小时
发表于 2018-10-18 02:22:10 | 显示全部楼层
一般都是调用delay函数做任务切换,不过也不是必须的。还有中断切换。
回复

使用道具 举报

7

主题

19

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1309
金钱
1309
注册时间
2015-12-26
在线时间
114 小时
 楼主| 发表于 2018-10-18 09:48:51 | 显示全部楼层
正点原子 发表于 2018-10-18 02:22
一般都是调用delay函数做任务切换,不过也不是必须的。还有中断切换。

原子老师您好!我看你视频里讲是可以直接调用OS_Sched()的,我就试了一下,结果就不能正常运行,我上想立马就切换到别的任务,如果用delay()的话那不又要浪费一部分时间么?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165287
金钱
165287
注册时间
2010-12-1
在线时间
2107 小时
发表于 2018-10-19 02:42:26 | 显示全部楼层
cwy0828 发表于 2018-10-18 09:48
原子老师您好!我看你视频里讲是可以直接调用OS_Sched()的,我就试了一下,结果就不能正常运行,我上想立 ...

没这么用过
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
172
金钱
172
注册时间
2018-4-20
在线时间
24 小时
发表于 2018-10-26 18:20:46 | 显示全部楼层
我记得这是涉及到“用户任务”和“系统任务”的关系,一般用户程序不可以直接调用一些内核函数 之类的意思,,
回复

使用道具 举报

19

主题

169

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2018-4-21
在线时间
107 小时
发表于 2018-10-28 11:48:56 | 显示全部楼层
你试试在函数里调用CPU_SR_ALLOC(),看行不行,我也是猜的,一般都是用延时引发任务调度的。。。
回复

使用道具 举报

7

主题

19

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1309
金钱
1309
注册时间
2015-12-26
在线时间
114 小时
 楼主| 发表于 2018-10-30 09:35:48 | 显示全部楼层
phangbob 发表于 2018-10-26 18:20
我记得这是涉及到“用户任务”和“系统任务”的关系,一般用户程序不可以直接调用一些内核函数 之类的意思 ...

谢谢老师了
回复

使用道具 举报

7

主题

19

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1309
金钱
1309
注册时间
2015-12-26
在线时间
114 小时
 楼主| 发表于 2018-10-30 09:36:24 | 显示全部楼层
学习STM32F103 发表于 2018-10-28 11:48
你试试在函数里调用CPU_SR_ALLOC(),看行不行,我也是猜的,一般都是用延时引发任务调度的。。。

谢谢老师的回答
回复

使用道具 举报

19

主题

169

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2018-4-21
在线时间
107 小时
发表于 2018-10-30 15:10:36 | 显示全部楼层

不敢,同是学生
回复

使用道具 举报

1

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
172
金钱
172
注册时间
2018-4-20
在线时间
24 小时
发表于 2018-11-1 09:14:05 | 显示全部楼层

哈哈,是谢谢那些大神老师,我也是学生,互相交流而已
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-2 08:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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