t200017 发表于 2010-3-1 16:11:37

重开一贴:UCOS中关于信号量的问题!!!

原来的问题有些错误,现在重开一贴。板子是万利199的板子
/*检测按键1*/
staticvoidApp_TaskKbd (void *p_arg)
{
    INT8Ub1,b2;
INT8Uerr;
    (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*/
staticvoidApp_TaskJoystick (void *p_arg)
{
INT8Ub1,b2;
INT8Uerr;
    (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不是使高优先级任务先运行吗,为什么可以使另一个任务一直在运行??是不是当高优先级需要运行时使高优先级任务先完成,然后再运行剩下的??

问题有些琐碎,麻烦大家不吝指教解答下,看了书但对信号量的理解还是不是很懂,谢谢了

ba_wang_mao 发表于 2010-3-2 15:28:09

在操作系统开始运行前使用下面的语句建立一个信号量。

    RandomSem = OSSemCreate(1);            /* 建立随机数信号量 */

这样,我们就建好了一个叫RandomSem的信号量,可以使用它对共享资源进行管理。假设有两个任务Task1和Task2都需要产生随机数,则必须按照下面的格式进行代码编写。

任务一:

voidTask1(void *pdata)

{

    INT8Ux;

    INT8U err;

    for (;;)

    {

       OSSemPend(RandomSem, 0, &err);/*请求信号量*/

      x = random(80);                  /* 获取80以内的一个随机数*/

       OSSemPost(RandomSem);         /*释放信号量*/

       /* 其他代码 */

    }

}

任务二:

voidTask2(void *pdata)

{

    INT8Ux;

    INT8U err;

    for (;;)

    {

       OSSemPend(RandomSem, 0, &err);/*请求信号量*/

      x = random(20);                  /* 获取20以内的一个随机数*/

       OSSemPost(RandomSem);         /*释放信号量*/

       /* 其他代码 */

    }

}
页: [1]
查看完整版本: 重开一贴:UCOS中关于信号量的问题!!!