搜索
bottom↓
回复: 1

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

[复制链接]

出0入0汤圆

发表于 2010-12-5 14:19:13 | 显示全部楼层 |阅读模式
有哪位高手可以帮忙看看这一段程序,就是蜂鸣器这个任务一直调用不到,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[TASK_STK_SIZE];
OS_STK      TaskBeepStk [TASK_STK_SIZE];
OS_STK      TaskledStk [TASK_STK_SIZE];
OS_STK      TaskspiStk [TASK_STK_SIZE];
//OS_STK      TaskKey1Stk [TASK_STK_SIZE];

void  TaskStart(void *data);
void  TaskBeep(void *data);
void  Taskled(void *data);
void  Taskspi(void *data);
//void  TaskKey1(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[TASK_STK_SIZE - 1], 0);
    OSStart();
    return 0;
}

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


void  TaskStart(void *pdata)
{
pdata = pdata;

        TargetInit ();
   
   

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



     void  Taskspi(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)
{
   //INT8U  err;
   //INT16U *pd;
   int i;
   pdata=pdata;
   TargetInit();
   
   PINSEL2 = PINSEL2 & (~0x08);// P1[25:16]连接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);
                }
        }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 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[task_stk_size];
os_stk      taskbeepstk [task_st......
-----------------------------------------------------------------------

你的OS_CFG怎么配置的?
还有各可能是你任务堆栈分配的不够,导致任务堆栈溢出!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-19 14:40

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表