OpenEdv-开源电子网

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

UCOSIII时间片轮转调度时时间片分配无效问题

[复制链接]

4

主题

10

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-5-15
在线时间
18 小时
发表于 2020-5-19 02:25:39 | 显示全部楼层 |阅读模式
5金钱
在做UCOSSIII时间片轮转调度问题时,在创建任务时改变OS_TICK          参数的值,设置两个任务的时间片长度不一样,但是串口打印出来的信息依然是task1和task2任务各执行5次打印进行轮转。改变时间片长度后不应该是每个任务执行的时间长度也不一样,打印的信息也不应该次数完全一样啊。


OS_CRITICAL_ENTER();        //进入临界区
        //创建TASK1任务
        OSTaskCreate((OS_TCB         * )&Task1_TaskTCB,               
                                 (CPU_CHAR        * )"Task1 task",                
                 (OS_TASK_PTR )task1_task,                        
                 (void                * )0,                                       
                 (OS_PRIO          )TASK1_TASK_PRIO,     
                 (CPU_STK   * )&TASK1_TASK_STK[0],       
                 (CPU_STK_SIZE)TASK1_STK_SIZE/10,       
                 (CPU_STK_SIZE)TASK1_STK_SIZE,               
                 (OS_MSG_QTY  )0,                                       
                 (OS_TICK          )10,  //时间片长度10ms                                       
                 (void           * )0,                                       
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR|OS_OPT_TASK_SAVE_FP,
                 (OS_ERR         * )&err);                               
                                 
        //创建TASK2任务
        OSTaskCreate((OS_TCB         * )&Task2_TaskTCB,               
                                 (CPU_CHAR        * )"task2 task",                
                 (OS_TASK_PTR )task2_task,                        
                 (void                * )0,                                       
                 (OS_PRIO          )TASK2_TASK_PRIO,            
                 (CPU_STK   * )&TASK2_TASK_STK[0],       
                 (CPU_STK_SIZE)TASK2_STK_SIZE/10,       
                 (CPU_STK_SIZE)TASK2_STK_SIZE,               
                 (OS_MSG_QTY  )0,                                       
                 (OS_TICK          )60,        //时间片长度60ms                                               
                 (void           * )0,                               
                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR|OS_OPT_TASK_SAVE_FP,
                 (OS_ERR         * )&err);                         
        OS_CRITICAL_EXIT();        //退出临界区


时间片.png

最佳答案

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

问题已解决,两个任务都只能打印五次是因为打印5次后都在延时1s那里进行延时,而没有返回去再次执行
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

10

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-5-15
在线时间
18 小时
 楼主| 发表于 2020-5-19 02:25:40 | 显示全部楼层
问题已解决,两个任务都只能打印五次是因为打印5次后都在延时1s那里进行延时,而没有返回去再次执行
回复

使用道具 举报

0

主题

58

帖子

0

精华

初级会员

Rank: 2

积分
59
金钱
59
注册时间
2018-12-27
在线时间
0 小时
发表于 2020-5-19 02:25:41 | 显示全部楼层
默默的路过,帮顶
回复

使用道具 举报

4

主题

10

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-5-15
在线时间
18 小时
 楼主| 发表于 2020-5-19 02:35:26 | 显示全部楼层
OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1s
我知道了,就是这个延时函数影响的,10个时间片大概可以打印7次,但是打印5次后就处于延时期了,15个时间片大概可以打印11次,打印5次后依然处于延时期。10Ms和15毫秒相对1秒来说还是有点微不足道。
回复

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2016-5-4
在线时间
20 小时
发表于 2021-5-6 10:44:45 | 显示全部楼层
帮顶!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-28 00:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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