任务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);的时候进行一次切换了吧
对任务切换不太明白谢谢
任务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);的时候进行一次切换了吧
对任务切换不太明白谢谢
举报