完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
//任务优先级
#define HIGH_TASK_PRIO 7 //任务堆栈大小 #define HIGH_STK_SIZE 128 //任务控制块 OS_TCB High_TaskTCB; //任务堆栈 CPU_STK HIGH_TASK_STK[HIGH_STK_SIZE]; void high_task(void *p_arg); //任务优先级 #define MIDDLE_TASK_PRIO 8 //任务堆栈大小 #define MIDDLE_STK_SIZE 128 //任务控制块 OS_TCB Middle_TaskTCB; //任务堆栈 CPU_STK MIDDLE_TASK_STK[MIDDLE_STK_SIZE]; void middle_task(void *p_arg); //任务优先级 #define LOW_TASK_PRIO 9 //任务堆栈大小 #define LOW_STK_SIZE 128 //任务控制块 OS_TCB Low_TaskTCB; //任务堆栈 CPU_STK LOW_TASK_STK[LOW_STK_SIZE]; void low_task(void *p_arg); //高优先级任务的任务函数 void high_task(void *p_arg) { u8 num; OS_ERR err; CPU_SR_ALLOC(); POINT_COLOR = BLACK; OS_CRItiCAL_ENTER(); LCD_DrawRectangle(5,110,115,314); //画一个矩形 LCD_DrawLine(5,130,115,130); //画线 POINT_COLOR = BLUE; LCD_ShowString(6,111,110,16,16,"High Task"); OS_CRITICAL_EXIT(); while(1) { OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_PERIODIC,&err); //延时500ms num++; printf("high task Pend Mutexrn"); OSMutexPend (&TEST_MUTEX,0,OS_OPT_PEND_BLOCKING,0,&err); //请求互斥信号量 printf("high task Running!rn"); LCD_Fill(6,131,114,313,lcd_discolor[num%14]); //填充区域 LED1 = ~LED1; OSMutexPost(&TEST_MUTEX,OS_OPT_POST_NONE,&err); //释放互斥信号量 printf("high task Post Mutexrn"); OSTimeDlyHMSM(0,0,0,500,OS_OPT_TIME_PERIODIC,&err); //延时500ms } } //中等优先级任务的任务函数 void middle_task(void *p_arg) { u8 num; OS_ERR err; CPU_SR_ALLOC(); POINT_COLOR = BLACK; OS_CRITICAL_ENTER(); LCD_DrawRectangle(125,110,234,314); //画一个矩形 LCD_DrawLine(125,130,234,130); //画线 POINT_COLOR = BLUE; LCD_ShowString(126,111,110,16,16,"Middle Task"); OS_CRITICAL_EXIT(); while(1) { num++; printf("middle task Running!rn"); LCD_Fill(126,131,233,313,lcd_discolor[13-num%14]); //填充区域 LED0 = ~LED0; OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err); //延时1s } } //低优先级任务的任务函数 void low_task(void *p_arg) { static u32 times; OS_ERR err; while(1) { OSMutexPend (&TEST_MUTEX,0,OS_OPT_PEND_BLOCKING,0,&err);//请求互斥信号量 printf("low task Running!rn"); for(times=0;times<10000000;times++) { OSSched(); //发起任务调度 } OSMutexPost(&TEST_MUTEX,OS_OPT_POST_NONE,&err); //释放互斥信号量 OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err); //延时1s } } 代码在上面,阉割了与问题无关的部分 高优先级获得互斥信号运行后,根据优先级,运行中等优先级,为什么之后运行的又是高优先级任务,不明白! |
|
相关推荐
2个回答
|
|
中等优先级运行完成以后调用延时函数,延时函数会进行任务切换,切换到已经就绪了的优先级最高的任务。
|
|
|
|
谢谢版主大佬,明白点了
|
|
|
|
只有小组成员才能发言,加入小组>>
772 浏览 0 评论
1148 浏览 1 评论
2527 浏览 5 评论
2858 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2709 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1060浏览 3评论
189浏览 2评论
453浏览 2评论
365浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
452浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 12:01 , Processed in 1.311046 second(s), Total 80, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号