hero57901122 发表于 2010-12-5 14:19:13

UCOSS下的多任务控制,出现点问题,请高手帮忙看看!!

有哪位高手可以帮忙看看这一段程序,就是蜂鸣器这个任务一直调用不到,LED和数码管在板子上都可以正常运行,在2131上运行的,原来是要蜂鸣器,同时与leD流水灯、数码管3个任务同步进行的,现在只是实现了2个任务,蜂鸣器上板子一直没反应。



//在config.h文件中加入包含SPI.H,并定义HC595_CS、SPI_MOD;
**      在IRQ.S、TARGET.C文件中设置SPI向量中断//


#include "config.h"

#define BEEP 1 << 7       
#define LEDS8(0xFF << 18);

#define        TASK_STK_SIZE              64
OS_STK      TaskStartStk;
OS_STK      TaskBeepStk ;
OS_STK      TaskledStk ;
OS_STK      TaskspiStk ;
//OS_STK      TaskKey1Stk ;

voidTaskStart(void *data);
voidTaskBeep(void *data);
voidTaskled(void *data);
voidTaskspi(void *data);
//voidTaskKey1(void *data);

const uint32 LED_TBL[] = {
        0x00, 0xFF,                                                                                // 全部熄灭后,再全部点亮
        0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,        // 依次逐个点亮
        0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF,        // 依次逐个叠加
        0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01,        // 依次逐个递减
        0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81,        // 两个靠拢后分开
        0x81, 0xC3, 0xE7, 0xFF, 0xFF, 0xE7, 0xC3, 0x81        // 从两边叠加后递减
};

void DelayNS (uint32 dly)
{
        uint32 i;
       
        for ( ; dly>0; dly--)
                for (i=0; i<50000; i++);
}

int main (void)
{
    OSInit();

    OSTaskCreate(TaskStart, (void *)0, &TaskStartStk, 0);
    OSStart();
    return 0;
}

uint8 const ShowTable = {
      0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x00};
//   0   1   2    3    4    5    6    7    8    9   


voidTaskStart(void *pdata)
{
pdata = pdata;

        TargetInit ();
   
   

    OSTaskCreate(TaskBeep, (void *)0, &TaskBeepStk, 1);         // 创建任务TaskBeep,优先级为3
    OSTaskCreate(Taskled, (void *)0, &TaskledStk, 4);
    OSTaskCreate(Taskspi, (void *)0, &TaskspiStk, 3);
   
   
        while (1)
        {
                OSTimeDly(10);
        }
}



   voidTaskspi(void *pdata)
{
    uint8 temp,i;

    pdata = pdata;                                                /* 避免编译警告 */

    TargetInit();                                                   /* 目标板初始化 */
    PINSEL1 = (PINSEL1 & 0xf3ffffff);
    IO0DIR = HC595_CS;
    for (;;)
    {
      for (i = 0; i < 10; i++)
      {
            SPIStart();
            IO0CLR = HC595_CS;
            SPIRW(&temp, ~ShowTable);
            IO0SET = HC595_CS;
            SPIEnd();
            OSTimeDly(OS_TICKS_PER_SEC / 5);
      }
      
    }
}


void TaskBeep (void *pdata)
{
        pdata = pdata;
        TargetInit();
        //PINSEL0 = 0x00000000;                // 设置管脚连接GPIO
       PINSEL0 = (PINSEL0 & 0xffff3fff);                                                        // P0.16连接GPIO
   PINSEL1 = (PINSEL1 & 0xfffffffc);
//    IO0DIR &= ~KEY1;                                                                                     // 设置KEY1为输入
    IO0SET= BEEP;
    IO0DIR |= BEEP;       
   IO0DIR   = BEEP;                                                                                // 设置蜂鸣器为输出
   
    for (;;)
    {
      //OSTaskSuspend(OS_PRIO_SELF);
      IO0CLR = BEEP;
      OSTimeDly(OS_TICKS_PER_SEC / 8);
      IO0SET = BEEP;
      OSTimeDly(OS_TICKS_PER_SEC / 4);

      IO0CLR = BEEP;
      OSTimeDly(OS_TICKS_PER_SEC / 8);
      IO0SET = BEEP;
      OSTimeDly(OS_TICKS_PER_SEC / 4);
      //IO0SET = BEEP;                        // BEEP停止蜂鸣
                //DelayNS(50);
                //IO0CLR = BEEP;                        // BEEP        蜂鸣
                //DelayNS(50);
    }
}

void Taskled (void *pdata)
{
   //INT8Uerr;
   //INT16U *pd;
   int i;
   pdata=pdata;
   TargetInit();
   
   PINSEL2 = PINSEL2 & (~0x08);// P1连接GPIO
   IO1DIR= LEDS8;                        // 设置LED1控制口为输出
       
       
        for (;;)
        {
          
             //int i;
                for (i=0; i<42; i++)
                {        /* 流水灯花样显示 */
                        IO1SET = ~((LED_TBL) << 18);
                        DelayNS(20);
                        IO1CLR = ((LED_TBL) << 18);
                        DelayNS(20);
                }
        }
}

AVR_DIY 发表于 2010-12-6 11:15:40

回复【楼主位】hero57901122
有哪位高手可以帮忙看看这一段程序,就是蜂鸣器这个任务一直调用不到,led和数码管在板子上都可以正常运行,在2131上运行的,原来是要蜂鸣器,同时与led流水灯、数码管3个任务同步进行的,现在只是实现了2个任务,蜂鸣器上板子一直没反应。
//在config.h文件中加入包含spi.h,并定义hc595_cs、spi_mod;
**      在irq.s、target.c文件中设置spi向量中断//
#include "config.h"
#define beep 1 &lt;&lt; 7
#define leds8(0xff &lt;&lt; 18);
#define   task_stk_size         64
os_stk      taskstartstk;
os_stk      taskbeepstk [task_st......
-----------------------------------------------------------------------

你的OS_CFG怎么配置的?
还有各可能是你任务堆栈分配的不够,导致任务堆栈溢出!
页: [1]
查看完整版本: UCOSS下的多任务控制,出现点问题,请高手帮忙看看!!