wjyspring 发表于 2008-3-31 17:11:36

移植uCOS-II到LPC2131上写的第1个程序---菜鸟上路

今天写了第1个基于uCOS操作系统的应用程序,功能很简单,就是实现8个LED的独立
的亮灭.LED1亮灭周期为1秒,同时LED2的亮灭周期为2秒......同时LED8的亮灭周期
为8秒.在实验板上已调试成功.
高手绕道.菜鸟可以看一看...
/****************************************Copyright (c)**************************************************
** Modified by:        wujunyong
** Modified date:        2008-03-31
** Descriptions:          EasyARM2131 基于uCOS-II的led控制实验。
**                      LED1的亮灭周期为1秒,LED2的亮灭周期为2秒...LED8的亮灭周期为8秒。
**                      这个实验说明了一个问题,在操作系统下,多个任务可以独立的执行,而不上操作系统的话
**                      较难实现这一点。
********************************************************************************************************/
#include "config.h"

#define          LED1        (1 << 18)                // P1.18控制LED1
#define          LED2        (1 << 19)                // P1.19控制LED2
#define   LED3(1 << 20)                // P1.20控制LED3
#define   LED4(1 << 21)                // P1.21控制LED4
#define   LED5(1 << 22)                // P1.22控制LED5
#define   LED6(1 << 23)                // P1.23控制LED6
#define   LED7(1 << 24)                // P1.24控制LED7
#define   LED8(1 << 25)                // P1.25控制LED8

#define        TaskStkLengh        32                // 定义用户任务0的堆栈长度


OS_STK        Task0Stk ;        // 定义用户任务0的堆栈
OS_STK        TaskLED1Stk ;        // 定义任务TaskLED1的堆栈
OS_STK        TaskLED2Stk ;        // 定义任务TaskLED2的堆栈
OS_STK        TaskLED3Stk ;
OS_STK        TaskLED4Stk ;       
OS_STK        TaskLED5Stk ;       
OS_STK        TaskLED6Stk ;       
OS_STK        TaskLED7Stk ;       
OS_STK        TaskLED8Stk ;       
       

voidTask0(void *pdata);                                // Task0 任务0
voidTaskLED1(void *data);                                // 任务TaskLED1
voidTaskLED2(void *data);                                // 任务TaskLED2
voidTaskLED3(void *data);       
voidTaskLED4(void *data);       
voidTaskLED5(void *data);       
voidTaskLED6(void *data);       
voidTaskLED7(void *data);       
voidTaskLED8(void *data);       

/*
*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :c语言的主函数,由它启动多任务环境
*********************************************************************************************************
*/
int main (void)
{
        OSInit ();                                                                                                                                                       
        OSTaskCreate (Task0,(void *)0, &Task0Stk, 1);               
        OSStart ();
        return 0;                                                                                               
}

/*
********************************************************************************************************
** Task0 任务0
** 完成目标板初始化和创建TaskLED1-8任务
********************************************************************************************************
*/

void Task0        (void *pdata)
{
        pdata = pdata;
        TargetInit ();
        OSTaskCreate (TaskLED1,(void *)0, &TaskLED1Stk, 2);               
        OSTaskCreate (TaskLED2,(void *)0, &TaskLED2Stk, 3);               
        OSTaskCreate (TaskLED3,(void *)0, &TaskLED3Stk, 4);               
        OSTaskCreate (TaskLED4,(void *)0, &TaskLED4Stk, 5);               
        OSTaskCreate (TaskLED5,(void *)0, &TaskLED5Stk, 6);               
        OSTaskCreate (TaskLED6,(void *)0, &TaskLED6Stk, 7);
        OSTaskCreate (TaskLED7,(void *)0, &TaskLED7Stk, 8);               
        OSTaskCreate (TaskLED8,(void *)0, &TaskLED8Stk, 9);               

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

/*
********************************************************************************************************
** TaskLED1
** LED1任务
********************************************************************************************************
*/
voidTaskLED1(void *pdata)
{
    pdata = pdata;                                       // 避免编译警告

        PINSEL2 = PINSEL2 & (~0x08);                                  // P1选择GPIO
                               
    IO1DIR |= LED1;                                                    // 设置LED1控制口输出
    IO1SET= LED1;
   
    for (;;)
    {
      IO1CLR = LED1;
      OSTimeDly(OS_TICKS_PER_SEC / 2);
      IO1SET = LED1;
      OSTimeDly(OS_TICKS_PER_SEC / 2);
    }
}

/*
********************************************************************************************************
** TaskLED2
**LED2任务
********************************************************************************************************
*/
voidTaskLED2(void *pdata)
{
    pdata = pdata;                                       // 避免编译警告

        PINSEL2 = PINSEL2 & (~0x08);                                  // P1选择GPIO                       
    IO1DIR |= LED2;                                                    // 设置LED2控制口输出
    IO1SET= LED2;
   
    for (;;)
    {
      IO1CLR = LED2;
      OSTimeDly(OS_TICKS_PER_SEC);
      IO1SET = LED2;
      OSTimeDly(OS_TICKS_PER_SEC);
    }
}

/*
********************************************************************************************************
**TaskLED3
** LED3任务
********************************************************************************************************
*/
voidTaskLED3(void *pdata)
{
    pdata = pdata;                                       // 避免编译警告

        PINSEL2 = PINSEL2 & (~0x08);                                  // P1选择GPIO
                               
    IO1DIR |= LED3;                                                    // 设置LED1控制口输出
    IO1SET= LED3;
   
    for (;;)
    {
      IO1CLR = LED3;
      OSTimeDly(OS_TICKS_PER_SEC);
      IO1SET = LED3;
      OSTimeDly(OS_TICKS_PER_SEC*2);
    }
}   
/*
********************************************************************************************************
** TaskLED4
** LED4任务
********************************************************************************************************
*/
voidTaskLED4(void *pdata)
{
    pdata = pdata;                                       // 避免编译警告

        PINSEL2 = PINSEL2 & (~0x08);                                  // P1选择GPIO
                               
    IO1DIR |= LED4;                                                    // 设置LED1控制口输出
    IO1SET= LED4;
   
    for (;;)
    {
      IO1CLR = LED4;
      OSTimeDly(OS_TICKS_PER_SEC*2);
      IO1SET = LED4;
      OSTimeDly(OS_TICKS_PER_SEC*2);
    }
}   
/*
********************************************************************************************************
**TaskLED5
** LED5任务
********************************************************************************************************
*/
voidTaskLED5(void *pdata)
{
    pdata = pdata;                                       // 避免编译警告

        PINSEL2 = PINSEL2 & (~0x08);                                  // P1选择GPIO
                               
    IO1DIR |= LED5;                                                    // 设置LED1控制口输出
    IO1SET= LED5;
   
    for (;;)
    {
      IO1CLR = LED5;
      OSTimeDly(OS_TICKS_PER_SEC*2);
      IO1SET = LED5;
      OSTimeDly(OS_TICKS_PER_SEC*3);
    }
}   
/*
********************************************************************************************************
**TaskLED6
** LED6任务
********************************************************************************************************
*/
voidTaskLED6(void *pdata)
{
    pdata = pdata;                                       // 避免编译警告

        PINSEL2 = PINSEL2 & (~0x08);                                  // P1选择GPIO
                               
    IO1DIR |= LED6;                                                    // 设置LED1控制口输出
    IO1SET= LED6;
   
    for (;;)
    {
      IO1CLR = LED6;
      OSTimeDly(OS_TICKS_PER_SEC*3);
      IO1SET = LED6;
      OSTimeDly(OS_TICKS_PER_SEC*3);
    }
}   
/*
********************************************************************************************************
** TaskLED7
** LED7任务
********************************************************************************************************
*/
voidTaskLED7(void *pdata)
{
    pdata = pdata;                                       // 避免编译警告

        PINSEL2 = PINSEL2 & (~0x08);                                  // P1选择GPIO
                               
    IO1DIR |= LED7;                                                    // 设置LED1控制口输出
    IO1SET= LED7;
   
    for (;;)
    {
      IO1CLR = LED7;
      OSTimeDly(OS_TICKS_PER_SEC*3);
      IO1SET = LED7;
      OSTimeDly(OS_TICKS_PER_SEC*4);
    }
}   
/*
********************************************************************************************************
** TaskLED8
**LED8任务
********************************************************************************************************
*/
voidTaskLED8(void *pdata)
{
    pdata = pdata;                                       // 避免编译警告

        PINSEL2 = PINSEL2 & (~0x08);                                  // P1选择GPIO
                               
    IO1DIR |= LED8;                                                    // 设置LED1控制口输出
    IO1SET= LED8;
   
    for (;;)
    {
      IO1CLR = LED8;
      OSTimeDly(OS_TICKS_PER_SEC*4);
      IO1SET = LED8;
      OSTimeDly(OS_TICKS_PER_SEC*4);
    }
}   

/*********************************************************************************************************
**                            End Of File
********************************************************************************************************/

capron 发表于 2008-4-10 23:29:43

顶起来啊。什么编译环境?config.h头文件呢?谢谢!

laohuzi3338266 发表于 2008-5-9 17:11:57

请问楼主可以发uC/os for lpc2131工程模板给我吗?是已经加入源代码的工程模板。谢谢拉......245143520@qq.com

aysyjgw 发表于 2008-5-9 18:47:29

顶你

js001sdx 发表于 2009-7-17 14:53:46

学习!!!!

sssls2008 发表于 2009-9-23 18:55:19

顶,顶,顶!!!

0620223 发表于 2009-10-24 09:20:29

dddddddd

deep_55 发表于 2009-12-16 22:35:34

我也在学~~~学习学习~

csformat 发表于 2009-12-18 08:05:54

为什么每次等待的时间都不一样?

这个程序里没有中断,系统会根据你设定的优先级逐个执行

~~~~

还请楼主赐教,我也新学,

http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3775599&bbs_id=3004

有个问题还请楼主顺便给我指点下

多谢
页: [1]
查看完整版本: 移植uCOS-II到LPC2131上写的第1个程序---菜鸟上路