嵌入式学习小组
直播中

张林锋

7年用户 257经验值
私信 关注

如何切换到有按键扫描的任务中去?

我在学习关于信号量的时候,其中,while(1)中第一句是OSSemPend(&MY_SEM,0,OS_OPT_PEND_BLOCKING,0,&err);没有信号量的话就无法执行下面的语句,一直等待,那么是如何切换到有按键扫描的任务中的呢?
这个函数中有void  OSSched (void);这个函数是可以进行上下文切换的,并且在OSSemPend中 OSSched是没有在if判断语句中的,也就是说,在这个函数就可以执行上下文切换,那怎么执行下一句的num++;啊
另外,我搜索最高优先级的话是除本任务外的最高优先级吧?

回帖(1)

张丽丽

2019-7-31 09:33:11
任务1按键释放信号量
任务2 有信号量的话,输出一次
在没有按键没有释放信号的时候,在任务一中任务切换发生在这句OSTimeDlyHMSM(0,0,0,10,OS_OPT_TIME_HMSM_STRICT,&err); /
任务2 我之前不知道任务切换发生在哪里(如果没有接受到信号量的话)
   OSSemPend(&MY_SEM,0,OS_OPT_PEND_BLOCKING,0,&err);
  F12进去上面的函数是这个(部分)
  OS_CRITICAL_ENTER_CPU_CRITICAL_EXIT();                  /* Lock the scheduler/re-enable interrupts                */
    OS_Pend(&pend_data,                                     /* Block task pending on Semaphore                        */
            (OS_PEND_OBJ *)((void *)p_sem),
            OS_TASK_PEND_ON_SEM,
            timeout);
    OS_CRITICAL_EXIT_NO_SCHED();
    OSSched(); //我理解这个是进行任务切换的函数  点进去的英文注释是这么说的
我理解的两个任务的切换是,没有信号量释放的时候,先执行任务1,在延时的时候切换到任务2(因为只有两个任务除了任务一之外任务2的优先级最高)任务2 只能执行到信号量等待这一句话,然后就进行了任务切换,到任务1,继续循环
这样的话如果有信号量的话,也会在   OSSemPend(&MY_SEM,0,OS_OPT_PEND_BLOCKING,0,&err);的时候进行一次切换了吧
对任务切换不太明白谢谢
举报

更多回帖

发帖
×
20
完善资料,
赚取积分