完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在使用UcosIII时,想使任务1工作时间比任务2的时间长
现有疑问如下: 1、我对OSTaskCreate()函数中的参数 (OS_tiCK ) 20, 理解是,控制任务1工作的时间是200个时间片 2,我对OSSchedRoundRobinCfg(DEF_ENABLED,1,&err)中的参数"1"的理解是,设置一个时间片长度(比如5ms) 我这样理解应该是正确的吧? ,我在OSTaskCreate()函数里把任务1与任务2分别设置为20 4 但是发现运行结果和都是3 3的结果一样,都是分别打印5次 我认为,结果应该是:任务1打印次数应该远远多于任务2 请问,这该怎么解释? //创建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, //任务内部消息队列能够接收 //的最大消息数目,为0时禁止接收消息 (OS_TICK ) 20, //当使能时间片轮转时的时间片长度,为0时为默认长度 (void * ) 0, //用户补充的存储区 (OS_OPT ) OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任务选项 (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, //任务内部消息队列能够接收 //的最大消息数目,为0时禁止接收消息 (OS_TICK ) 4, //当使能时间片轮转时的时间片长度,为0时为默认长度 (void * ) 0, //用户补充的存储区 (OS_OPT ) OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任务选项 (OS_ERR* ) &err ); //存放该函数错误时的返回值 //task1任务函数 void task1_task(void *p_arg) { u8 i,task1_num=0; OS_ERR err; p_arg = p_arg; POINT_COLOR = RED; LCD_ShowString(30,130,110,16,16,"Task1 Run:000"); POINT_COLOR = BLUE; while(1) { task1_num++; //任务1执行次数加1 注意task1_num1加到255的时候会清零!! LCD_ShowxNum(110,130,task1_num,3,16,0x80); //显示任务执行次数 for(i=0;i<5;i++) printf("Task1:01234rn"); LED0 = ~LED0; OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1s } } //task2任务函数 void task2_task(void *p_arg) { u8 i,task2_num=0; OS_ERR err; p_arg = p_arg; POINT_COLOR = RED; LCD_ShowString(30,150,110,16,16,"Task2 Run:000"); POINT_COLOR = BLUE; while(1) { task2_num++; //任务2执行次数加1 注意task1_num2加到255的时候会清零!! LCD_ShowxNum(110,150,task2_num,3,16,0x80); //显示任务执行次数 for(i=0;i<5;i++) printf("Task2:56789rn"); LED1 = ~LED1; OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1s } } |
|
相关推荐
6个回答
|
|
你没理解时间片的意思。时间片主要是给两个相同优先级的任务设计的,当一个任务要执行的内容多,超过了时间片设定的时间,则会切换到另一个任务执行。如果一个任务执行完主动放弃 CPU(并且没有超过时间片),则与时间片没什么关系。
|
|
|
|
两个任务里面都有打印五次的语句呀。。。
for(i=0;i<5;i++) printf("Task1:01234rn"); for(i=0;i<5;i++) printf("Task2:56789rn"); |
|
|
|
在while(1)里面不是应该无限循环的吗?
|
|
|
|
把任务1里的OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_HMSM_STRICT,&err); //延时1s 延时时间改小,比如改成50ms
|
|
|
|
谢谢a! 改变 函数OSTaskCreate( ) 中 时间片数大小,或时间片大小 怎么不行呢?
|
|
|
|
哦 谢谢
|
|
|
|
只有小组成员才能发言,加入小组>>
818 浏览 0 评论
1162 浏览 1 评论
2536 浏览 5 评论
2871 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2720 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1114浏览 3评论
198浏览 2评论
465浏览 2评论
382浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
463浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 07:08 , Processed in 1.062698 second(s), Total 87, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号