|
今天写了第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周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|