导 航┆主 站┆文 章┆资 料┆下 载┆美 食┆读 书┆笑 话┆博 客┆论 坛
>> Tony嵌入式开发论坛静态版首页
查看完全版本:Tony嵌入式开发论坛

 

    [求助]在2104上调试UCOSII时出现的问题
    作者:tsjd20829 时间:2006-5-30 17:14:42

    我在EasyARM2104上调试UCOSII时发现了个问题。
       单个任务在该系统下都能正常运行。一旦同时运行多个任务就不行了。
    请高手分析一下是什么原因?
    附原代码

    #include "config.h"

    #define  TASK_STK_SIZE  128     

    #define SPI_CS   0x00000100 //P0.8
    #define SPI_DATA  0x00000040 //P0.6
    #define SPI_CLK  0x00000010 //P0.4
    #define BEEP  0x00000080 //P0.7
    #define SPI_IOCON 0x00003dd0 

    OS_STK        Task1Stk[TASK_STK_SIZE];   
    OS_STK        Task2Stk[TASK_STK_SIZE];      
    OS_STK        Task3Stk[TASK_STK_SIZE];      
    OS_STK        TaskStartStk[TASK_STK_SIZE]; 

    void  Task1(void *data);            
    void  Task2(void *data);      
    void  Task3(void *data);      
    void  TaskStart(void *data);   

    int main (void)
    {
        OSInit(); 
        OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);
        OSStart(); 
        return 0;                                         
    }

    void  TaskStart (void *pdata)
    {
    #if OS_CRITICAL_METHOD == 3      
        OS_CPU_SR  cpu_sr;
    #endif
          pdata = pdata;              
     PINSEL0 =0x00000000;
     PINSEL1 =0x00000000;
     IODIR = SPI_IOCON;
       
         TargetInit();       
       
      OSTaskCreate(Task1, (void *)0, &Task1Stk[TASK_STK_SIZE - 1], 1);
      OSTaskCreate(Task2, (void *)0, &Task2Stk[TASK_STK_SIZE - 1], 2);
      OSTaskCreate(Task3, (void *)0, &Task2Stk[TASK_STK_SIZE - 1], 3);  
     OSTaskDel(0);  
    }

    void  Task1 (void *pdata)
    { 
     uint8 i;
     pdata = pdata; 

        for (;;) {
     for(i=0;i<16;i++)
     {   
     IOSET = 0x00003c00;
     IOCLR = i<<10;
     OSTimeDlyHMSM(0, 0, 1, 0);         
            }
         }
    }

    void  Task2 (void *pdata)
    { 
     pdata = pdata; 
        for (;;) {
       
     IOSET =BEEP;
            OSTimeDlyHMSM(0, 0, 0, 200);    
     IOCLR =BEEP;
            OSTimeDlyHMSM(0, 0, 0, 200);   
        }
    }

    ///以下为Task3:数码管显示数字0~9//
    void HC595_SendDat(uint8 dat)
    {
     uint8 i;
     
     IOCLR = SPI_CS;
     for(i=0;i<8;i++)
     {
     IOCLR = SPI_CLK;
     if((dat& 0x80)!=0) IOSET=SPI_DATA;
     else IOCLR = SPI_DATA;
     dat<<=1;
     IOSET = SPI_CLK; 
     }
     IOSET = SPI_CS;
    }

    void  Task3 (void *pdata)
    { 
    const uint8 DISP_TAB[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; 
    uint8 i;
    pdata = pdata; 
       for (;;)
        {
     for(i=0;i<10;i++)
     {
     HC595_SendDat(DISP_TAB[i]);
     OSTimeDlyHMSM(0, 0, 1, 0);
     }
        }
    }

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------


    作者:wangsu502 时间:2007-4-23 20:33:08

    OSStart();开始的时候其他三个任务创建了吗?:)

    -------------------------------------------------------------------------------------------------------------------------------------------------------------------



查看完全版本:Tony嵌入式开发论坛
Copyright 2006-2008 Cevx.Com Cevx.Net 制作 版权所有
网友发帖仅代表个人观点,与本论坛立场无关