|
原来的问题有些错误,现在重开一贴。板子是万利199的板子
/*检测按键1*/
static void App_TaskKbd (void *p_arg)
{
INT8U b1,b2;
INT8U err;
(void)p_arg;
while (DEF_TRUE) {
OSSemPend(InfoSem,0,&err);
b1 = BSP_PB_GetStatus(BSP_PB_ID_KEY1);
if (b1 == 1) {
App_DispScr_SignOn();/*按键1按下刷新串口*/
}
OSSemPost(InfoSem);
OSTimeDlyHMSM(0, 0, 0, 10);
}
}
/*检测按键2*/
static void App_TaskJoystick (void *p_arg)
{
INT8U b1,b2;
INT8U err;
(void)p_arg;
while (DEF_TRUE) {
//OSSemPend(InfoSem,0,&err);/*问题出在这(为什么申请信号量后KEY1和KEY2都无法刷新??)*/
b2 = BSP_PB_GetStatus(BSP_PB_ID_KEY2);
if (b2 == 2) {
App_DispScr_SignOn();/*按键2按下刷新串口*/
}
OSSemPost(InfoSem);
OSTimeDlyHMSM(0, 0, 0, 10);
}
}
App_TaskKbd的优先级高,现在的问题是,在App_TaskJoystick 函数中申请信号量OSSemPend(InfoSem,0,&err)后,按下KEY1和KEY2串口都不刷新;而在App_TaskJoystick 去掉OSSemPend(InfoSem,0,&err)后KEY1和KEY 2可以正常刷新??
一:按书上说高优先级任务获得执行权,那么App_TaskKbd申请信号量后应该是KEY 1获得执行权可以进行刷新,但是现在按下KEY 1也无反应;
二:而在KEY 1执行完后,通过OSTimeDlyHMSM(0, 0, 0, 10)使当前任务App_TaskKbd延时进入等待状态,App_TaskJoystick (KEY 2)如若申请执行权应该可以获得才对,但是现在我在KEY 2中申请执行权后KEY 1 KEY 2按键都无法执行刷新;
三:如果App_TaskJoystick (KEY 2)不申请执行权,该任务是不是就一直处于运行状态,所以可以完成串口刷新?但UCOS不是使高优先级任务先运行吗,为什么可以使另一个任务一直在运行??是不是当高优先级需要运行时使高优先级任务先完成,然后再运行剩下的??
问题有些琐碎,麻烦大家不吝指教解答下,看了书但对信号量的理解还是不是很懂,谢谢了 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|