[uCOS/uCGUI] UCOS任务

常见泽1   2011-4-1 21:55 楼主
void mainTask( void *pData )
{
   pData  =  pData;
   OSTaskCreate(Task1LED,(void *)0,&stkTask1LED[StkSize-1],3);

  
   while(1)
   {
    OSTimeDly(20);
   }
}

void Task1LED(void *pvData)
{
    pvData = pvData;
        OSTaskCreate(Task2LED,(void *)0,&stkTask2LED[StkSize-1],5);
    OSTaskCreate(Task3LED,(void *)0,&stkTask3LED[StkSize-1],6);
        LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 6);
               
    LPC_IOCON ->PIO1_5&= ~0x07;
    LPC_GPIO1 ->DIR  |=  LED2;                           /* 蜂鸣器初始化 */
    LPC_GPIO1 ->DATA |=  LED2;                           /* 蜂鸣器关     */
    while (1)
        {
         LPC_GPIO1->DATA &= ~LED2;                           
         OSTimeDly(OS_TICKS_PER_SEC);                    /* 移除当前任务 */
         }
}

void Task2LED( void *pData)
{
  pData  =  pData;
  LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 6);
   LPC_IOCON ->PIO2_7&= ~0x07;
  LPC_GPIO2 ->DIR  |=  BEEP;                           /* 蜂鸣器初始化 */
    while (1) {
             
         LPC_GPIO2->DATA &= ~BEEP;                           
         OSTimeDly(2*OS_TICKS_PER_SEC);
    }
}
void Task3LED(void *pvData)
{
    pvData = pvData;
        LPC_SYSCON->SYSAHBCLKCTRL |= (1 << 6);
        LPC_IOCON ->PIO0_1 &= ~0x07;
    LPC_GPIO0 ->DIR  |=  LED;                           /* 蜂鸣器初始化 */
    LPC_GPIO0 ->DATA |=  LED;                           /* 蜂鸣器关     */
    while (1)
        {
               LPC_GPIO0->DATA &= ~LED;                           
                  OSTimeDly(4*OS_TICKS_PER_SEC);                    /* 移除当前任务 */
}

}

int main(void)
{
    SystemInit();                                                       /* 初始化目标板,切勿删除       */

    OSInit();                                                                                            
    OSTaskCreate(mainTask, (void *)0, &stkMainTask[StkSize - 1], 2);
        OSStart();
}

请问下 不是开始创建任务时 是按顺序 进行么 为什么任务3的灯一直没亮呢

回复评论 (18)

回复 楼主 常见泽1 的帖子

没看出问题,楼主仿真一下看看 确定任务三不没有运行过吗
处处留心皆学问!
点赞  2011-4-2 10:00

回复 沙发 daicheng 的帖子

我仿真了 本来用2个任务是可以的 后来想多加几个任务看看吧 后来任务3就不运行了
点赞  2011-4-2 12:00
你这个说法很模糊,无法判断是因为你的任务出错还是操作系统没有调用任务,需要详细的报告
点赞  2011-4-2 12:19

回复 4楼 leang521 的帖子

不模糊 就是开始2个任务时 是都可以运行的  所以相加一个任务 第3个任务一直无法运行
点赞  2011-4-2 20:51
OSTimeDly(20); 这个改成OSTimeDly(OS_TICKS_PER_SEC);就可以了 疑问啊??
点赞  2011-4-2 21:33

回复 6楼 常见泽1 的帖子

不会吧。。。。怎么会喃。??没遇到过喃。。
    我试一下看看。。。不会吧,OS_TICKS_PER_SEC这个东西宏定义的20,两上没区别吧。。。。。。LZ再看看是不是哪里有问题哦。。。

[ 本帖最后由 shilaike 于 2011-4-3 10:09 编辑 ]
只有想不到,没有做不到。
点赞  2011-4-3 10:05

回复 7楼 shilaike 的帖子

试了好多次 该成20 TASK3的灯 就不亮 改成SEC那个 任务三的灯就亮  很奇怪
点赞  2011-4-3 11:01

回复 楼主 常见泽1 的帖子

OS_TICKS_PER_SEC在程序中定义的是多少?
系统支持的最大任务数是多少?
还有我看你是使用的NXP的芯片,你的芯片GPIO的驱动是否有问题?
希望从这三个方面检查!
点赞  2011-4-4 21:47

回复 9楼 wstrom 的帖子

BZ说得有理。。
    不过一般移植的OS里面OS_TICKS_PER-SEC都是宏定义的20.
最大任务数要靠LZ看配置文件里面了。。
       但我学得吧,应该不会有错。。
         其它什么都没有修改,就只是不要这个宏定义了,编译的时候不需要将这个宏字符串改成20,只是少了这步。。
  怎么会出错了喃???
    不明白 。。。。期待LZ解决。。。。
只有想不到,没有做不到。
点赞  2011-4-5 09:27

回复 10楼 shilaike 的帖子

实时系统中的时钟节拍应该设置为:10-100HZ那么时钟节拍越快系统的额外开销就会越大
在配置的时候也会用到:
#define OS_TICKS_PER_SEC        100    /* Set the number of ticks in one second
所以这个数据是多少没问题,那要看你的时钟配置了
楼主计算一下这样配置的:
void Timer0Init(void)
{   
    T0IR = 0xffffffff;
    T0TC = 0;
    T0TCR = 0x01;
    T0MCR = 0x03;
    T0MR0 = (Fpclk / OS_TICKS_PER_SEC);   
}
处处留心皆学问!
点赞  2011-4-5 11:00

回复 11楼 daicheng 的帖子

多谢了。。。学习了。。。。。。。。。
只有想不到,没有做不到。
点赞  2011-4-5 12:07
#define OS_MAX_MEM_PART          2    /* Max. number of memory partitions ...                         */
                                       /* ... MUST be > 0                                              */
#define OS_MAX_QS                4    /* Max. number of queue control blocks in your application ...  */
                                       /* ... MUST be > 0                                              */
#define OS_MAX_TASKS             6    /* Max. number of tasks in your application ...                 */
                                       /* ... MUST be >= 2               

#define OS_TICKS_PER_SEC        200    /* Set the number of ticks in one second
点赞  2011-4-5 21:49

回复 11楼 daicheng 的帖子

版主 这个没看懂 我在研究下
点赞  2011-4-5 21:49

回复 13楼 常见泽1 的帖子

你把
#define OS_MAX_TASKS 6 /* Max. number of tasks in your application ... */
改成
#define OS_MAX_TASKS 8 /* Max. number of tasks in your application ... */
试试吧
点赞  2011-4-6 17:27

回复 15楼 wstrom 的帖子

这样改 ? 为什么呢 我任务没有到这么多
点赞  2011-4-7 17:44

回复 楼主 常见泽1 的帖子

您好我是新手,我想问一下任务的第一句赋值语句的作用是什么
点赞  2013-5-6 15:47

回复 17楼 lvwei19900624 的帖子

没什么具体作用  pdata=pdata;
就是为了防止编译出现警告 不然编译提示 xxx not used
希望你能看到回复
点赞  2013-5-6 17:04

回复 18楼 xinjitmzy 的帖子

谢谢了我看到了,刚刚学,对ucos有点迷茫
点赞  2013-5-7 20:43
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复