完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
问下,当使用API 函数 OSSemPost()会引发任务调度吗?在原子哥的同时等待多个内核对象的实验中发现当发送信号量时并没有立即引发任务调度,而是在延时函数发生调度的,记得刚开始的时候原子哥讲过 OSSemPost()是会引发任务调度,请问这个怎么解释?
void task1_task(void *p_arg) { u8 key; OS_ERR err; u8 num; u8 *pbuf; static u8 msg_num; pbuf=mymalloc(SRAMIN,10); //申请内存 while(1) { key = KEY_Scan(0); //扫描按键 switch(key) { case KEY1_PRES: OSSemPost(&Test_Sem1,OS_OPT_POST_1,&err);//发送信号量1 break; case KEY0_PRES: OSSemPost(&Test_Sem2,OS_OPT_POST_1,&err);//发送信号量2 //break ; case WKUP_PRES: msg_num++; sprintf((char*)pbuf,"ALIENTEK %d",msg_num); //发送消息 OSQPost((OS_Q* )&Test_Q, (void* )pbuf, (OS_MSG_SIZE)10, (OS_OPT )OS_OPT_POST_FIFO, (OS_ERR* )&err); break; } num++; if(num==50) { num=0; LED0=~LED0; } OSTimeDlyHMSM(0,0,0,10,OS_OPT_TIME_PERIODIC,&err); //延时10ms } } //等待多个内核对象的任务函数 void multi_task(void *p_arg) { u8 num; OS_ERR err; OS_OBJ_QTY index; OS_PEND_DATA pend_multi_tbl[CORE_OBJ_NUM]; pend_multi_tbl[0].PendObjPtr=(OS_PEND_OBJ*)&Test_Sem1; pend_multi_tbl[1].PendObjPtr=(OS_PEND_OBJ*)&Test_Sem2; pend_multi_tbl[2].PendObjPtr=(OS_PEND_OBJ*)&Test_Q; while(1) { index=OSPendMulti((OS_PEND_DATA* )pend_multi_tbl, (OS_OBJ_QTY )CORE_OBJ_NUM, //内核数量 (OS_TICK )0, (OS_OPT )OS_OPT_PEND_BLOCKING, (OS_ERR* )&err); LCD_ShowNum(147,111,index,1,16); //显示当前有几个内核对象准备好了 num++; LCD_Fill(6,131,233,313,lcd_discolor[num%14]); //刷屏 LED1 = ~LED1; OSTimeDlyHMSM(0,0,1,0,OS_OPT_TIME_PERIODIC,&err); //延时1s } } |
|
相关推荐
3个回答
|
|
有任务调度的,只是等待信号量任务的优先级没有发送信号量的任务优先级高。
|
|
|
|
进入函数 OSSemPost里面看一下有没有调用任务切换函数,如果没有的话就不会引起任务调度
|
|
|
|
谢谢!,明白了
|
|
|
|
只有小组成员才能发言,加入小组>>
793 浏览 0 评论
1152 浏览 1 评论
2528 浏览 5 评论
2861 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2711 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1073浏览 3评论
195浏览 2评论
457浏览 2评论
370浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
455浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 04:39 , Processed in 1.233030 second(s), Total 52, Slave 43 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号