打印

uC/os 问题

[复制链接]
1788|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sujinxiu|  楼主 | 2007-5-10 14:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
请问在uc/OS 中该如何应用函数OSTimeDly ()。
下面是我的源程序,在运行的过程中,运行到OSTimeDly (1)中就在OS_TaskIdle (void *pdata)函数中式循环,不能返回 ,请问是怎么回事啊?
#define LED0_ON   WrPortI(PDB0R, NULL, 0);
#define LED0_OFF  WrPortI(PDB0R, NULL,1);
#define LED3_ON   WrPortI(PDB2R, NULL, 0);
#define LED3_OFF  WrPortI(PDB2R, NULL, 1<<2);
void task0(void *data) ;
void task1(void *data) ;
void         msDelay(unsigned int delay)  ;

OS_STK TaskStk1[100];
OS_STK TaskStk0[100];
main()
{
   WrPortI(PDDDR, &PDDDRShadow, 0x07);
   WrPortI(PDDR, &PDDRShadow, 0x07);
     OSInit();

       OSTaskCreate (task1,(void*)0,&TaskStk1[99],4);
       OSTaskCreate (task0,(void*)0,&TaskStk0[99],5);
     OSStart();
}

void task0(void*data)
{
INT16U i;
BOOLEAN LED0_state;
i=0;
data=data;
LED0_state=TRUE;
//LED3_ON;
while(1)
    {
    if(LED0_state==FALSE)
       {
        LED0_state=TRUE;
        LED0_OFF;
        printf("LCALL TASK0 %d ",i++);
       }
    else
       {
       LED0_state=FALSE;
       LED0_ON;
       printf("LCALL TASK0 %d ",i++);
       }
     //msDelay(500);
     OSTimeDly (1);
    }
}

void task1(void*data)
{
INT16U j;
BOOLEAN LED3_state;
j=0;
data=data;
LED3_state=TRUE;
//LED3_ON;
while(1)
    {
    if(LED3_state==FALSE)
       {
        LED3_state=TRUE;
        LED3_OFF;
        printf("LCALL TASK1 %d ",j++);
       }
    else
       {
       LED3_state=FALSE;
       LED3_ON;
       printf("LCALL TASK1 %d ",j++);
       }
     //msDelay(500);
     OSTimeDly (1);
    } 

相关帖子

沙发
nanpia| | 2007-5-10 17:04 | 只看该作者

re

可能是你的系统时钟中断部分出问题了,你这个任务在延时的时候,系统切换到了idle 任务里面,由于时钟部分的中断不能产生,所以系统认为延时时间没到,所以就在此循环。。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝