搜索
bottom↓
回复: 8

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

[复制链接]

出0入0汤圆

发表于 2008-3-31 17:11:36 | 显示全部楼层 |阅读模式
今天写了第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 [TaskStkLengh];        // 定义用户任务0的堆栈
OS_STK        TaskLED1Stk [TaskStkLengh];        // 定义任务TaskLED1的堆栈
OS_STK        TaskLED2Stk [TaskStkLengh];        // 定义任务TaskLED2的堆栈
OS_STK        TaskLED3Stk [TaskStkLengh];
OS_STK        TaskLED4Stk [TaskStkLengh];       
OS_STK        TaskLED5Stk [TaskStkLengh];       
OS_STK        TaskLED6Stk [TaskStkLengh];       
OS_STK        TaskLED7Stk [TaskStkLengh];       
OS_STK        TaskLED8Stk [TaskStkLengh];       
       

void  Task0(void *pdata);                                // Task0 任务0
void  TaskLED1(void *data);                                // 任务TaskLED1
void  TaskLED2(void *data);                                // 任务TaskLED2
void  TaskLED3(void *data);       
void  TaskLED4(void *data);       
void  TaskLED5(void *data);       
void  TaskLED6(void *data);       
void  TaskLED7(void *data);       
void  TaskLED8(void *data);       

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

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

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

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

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

        PINSEL2 = PINSEL2 & (~0x08);                                    // P1[25:16]选择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任务
********************************************************************************************************
*/
void  TaskLED2(void *pdata)
{
    pdata = pdata;                                           // 避免编译警告

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

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

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

        PINSEL2 = PINSEL2 & (~0x08);                                    // P1[25:16]选择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任务
********************************************************************************************************
*/
void  TaskLED5(void *pdata)
{
    pdata = pdata;                                           // 避免编译警告

        PINSEL2 = PINSEL2 & (~0x08);                                    // P1[25:16]选择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任务
********************************************************************************************************
*/
void  TaskLED6(void *pdata)
{
    pdata = pdata;                                           // 避免编译警告

        PINSEL2 = PINSEL2 & (~0x08);                                    // P1[25:16]选择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任务
********************************************************************************************************
*/
void  TaskLED7(void *pdata)
{
    pdata = pdata;                                           // 避免编译警告

        PINSEL2 = PINSEL2 & (~0x08);                                    // P1[25:16]选择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任务
********************************************************************************************************
*/
void  TaskLED8(void *pdata)
{
    pdata = pdata;                                           // 避免编译警告

        PINSEL2 = PINSEL2 & (~0x08);                                    // P1[25:16]选择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
********************************************************************************************************/

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

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

出0入0汤圆

发表于 2008-4-10 23:29:43 | 显示全部楼层
顶起来啊。什么编译环境?config.h头文件呢?谢谢!

出0入0汤圆

发表于 2008-5-9 17:11:57 | 显示全部楼层
请问楼主可以发uC/os for lpc2131工程模板给我吗?是已经加入源代码的工程模板。谢谢拉......245143520@qq.com

出0入0汤圆

发表于 2008-5-9 18:47:29 | 显示全部楼层
顶你

出0入0汤圆

发表于 2009-7-17 14:53:46 | 显示全部楼层
学习!!!!

出0入0汤圆

发表于 2009-9-23 18:55:19 | 显示全部楼层
顶,顶,顶!!!

出0入0汤圆

发表于 2009-10-24 09:20:29 | 显示全部楼层
dddddddd

出0入0汤圆

发表于 2009-12-16 22:35:34 | 显示全部楼层
我也在学~~~  学习学习~

出0入0汤圆

发表于 2009-12-18 08:05:54 | 显示全部楼层
为什么每次等待的时间都不一样?

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

~~~~

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

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

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

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

本版积分规则

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

GMT+8, 2024-5-20 16:43

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

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