📄 main.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by: Chenmingji
** Created date: 2004-09-16
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by: Chenxibing
** Modified date: 2005-03-10
** Version:
** Descriptions: EasyARM2131 基于uCOS-II的GPIO输出实验2。
**
********************************************************************************************************/
#define TASK_STK_SIZE 64
#define TASK_STK_LARGE_SIZE 128
#include "config.h"
OS_STK TaskStartStk[TASK_STK_LARGE_SIZE];
OS_STK Task1Stk[TASK_STK_SIZE];
OS_STK Task2Stk[TASK_STK_SIZE];
OS_STK Task3Stk[TASK_STK_SIZE];
OS_STK Task4Stk[TASK_STK_SIZE];
//OS_STK Task5Stk[TASK_STK_LARGE_SIZE];
OS_STK Task6Stk[TASK_STK_SIZE];
OS_STK Task7Stk[TASK_STK_SIZE];
/* 函数声明 */
void TaskStart(void *pdata);
void Task1(void *pdata);
void Task2(void *pdata);
void Task3(void *pdata);
void Task4(void *pdata);
//void Task5(void *pdata);
void Task6(void *pdata);
void Task7(void *pdata);
void UART0_SendByte(uint8 dat);
void UART0_SendStr(uint8 const *str);
void BeepMoo(void);
void BeepNoMoo(void);
uint32 GetKey(void);
OS_EVENT *LEDBox ;
OS_EVENT *DispSem;
#define KEY1 1 << 16 // P0.16-KEY1
#define BEEP 1 << 7 // P0.7-BEEP
#define LED1 1 << 18 // P0.7-BEEP
#define LED2 1 << 19 // P0.7-BEEP
/*
*********************************************************************************************************
** 函数名称 :main()
** 函数功能 :c语言的主函数,由它启动多任务环境
*********************************************************************************************************
*/
int main (void)
{
OSInit ();
LEDBox = OSMboxCreate((void *)0);
DispSem = OSSemCreate(1);
OSTaskCreate(TaskStart,(void *)0, &TaskStartStk[TASK_STK_LARGE_SIZE - 1], 0);
OSStart ();
return 0;
}
/*
********************************************************************************************************
** TaskStart 任务0
** 完成目标板初始化和创建TaskLED1/2任务
********************************************************************************************************
*/
void TaskStart(void *pdata)
{
struct time now;
struct date today;
char s[40];
pdata = pdata ;
TargetInit();
PINSEL0 = (PINSEL0 & 0xffff3fff);
PINSEL1 = (PINSEL1 & 0xfffffffc);
IO0DIR &= ~KEY1 ;
IO0SET = BEEP ;
IO0DIR |= BEEP ;
OSTaskCreate(Task1,(void *)0, &Task1Stk[TASK_STK_SIZE - 1], 1);
OSTaskCreate(Task2,(void *)0, &Task2Stk[TASK_STK_SIZE - 1], 2);
OSTaskCreate(Task3,(void *)0, &Task3Stk[TASK_STK_SIZE - 1], 3);
OSTaskCreate(Task4,(void *)0, &Task4Stk[TASK_STK_SIZE - 1], 4);
// OSTaskCreate(Task5,(void *)0, &Task5Stk[TASK_STK_LARGE_SIZE - 1], 5);
OSTaskCreate(Task6,(void *)0, &Task6Stk[TASK_STK_SIZE - 1], 6);
OSTaskCreate(Task7,(void *)0, &Task7Stk[TASK_STK_SIZE - 1], 7);
while(1)
{
gettime(&now);
getdate(&today);
sprintf(s,"%04d - %02d - %02d %02d:%02d:%02d",
today.da_year,
today.da_mon,
today.da_day,
now.ti_hour,
now.ti_min,
now.ti_sec);
// PC_DispStr(1,1,s,DISP_FGND_YELLOW + DISP_BGND_BLUE);
OSTimeDly(OS_TICKS_PER_SEC / 2);
}
}
/*
********************************************************************************************************
** TaskLED1
** LED1任务
********************************************************************************************************
*/
void Task1(void *pdata)
{
uint8 err;
uint32 *msg;
pdata = pdata ;
PINSEL2 = PINSEL2 & (~0x08);
IO1DIR |= LED1;
IO1SET = LED1;
for(;;)
{
// msg = OSMboxPend(LEDBox,0,&err);
IO1CLR = LED1;
OSTimeDly(OS_TICKS_PER_SEC);
IO1SET = LED1;
OSTimeDly(OS_TICKS_PER_SEC);
// OSTimeDly(*msg);
}
}
/*
********************************************************************************************************
** TaskLED2
** LED2任务
********************************************************************************************************
*/
void Task2(void *pdata)
{
pdata = pdata ;
PINSEL2 = PINSEL2 & (~0x08);
IO1DIR |= LED2;
IO1SET = LED2;
for(;;)
{
IO1CLR = LED2;
OSTimeDly(OS_TICKS_PER_SEC/2);
IO1SET = LED2;
OSTimeDly(OS_TICKS_PER_SEC/2);
}
}
/*
********************************************************************************************************
** TaskLED3
** LED2任务
********************************************************************************************************
*/
void Task3(void *pdata)
{
pdata = pdata ;
for(;;)
{
OSTaskSuspend(OS_PRIO_SELF);
IO0CLR = BEEP ;
OSTimeDly(OS_TICKS_PER_SEC/2);
IO0SET = BEEP ;
OSTimeDly(OS_TICKS_PER_SEC/2);
IO0CLR = BEEP ;
OSTimeDly(OS_TICKS_PER_SEC/2);
IO0SET = BEEP ;
OSTimeDly(OS_TICKS_PER_SEC/2);
}
}
/*
********************************************************************************************************
** TaskLED3
** LED2任务
********************************************************************************************************
*/
void Task4(void *pdata)
{
uint8 err;
volatile uint32 freq = OS_TICKS_PER_SEC / 2 ;
struct time now;
struct date today;
pdata = pdata ;
today.da_year = 2007 ;
today.da_mon = 3 ;
today.da_day = 4;
today.da_dow = 7;
now.ti_hour = 17;
now.ti_min = 10;
now.ti_sec = 00;
setdate(&today);
settime(&now);
for(;;)
{
OSTimeDly(OS_TICKS_PER_SEC/50);
if((IO0PIN & KEY1) != 0)
continue ;
OSTimeDly(OS_TICKS_PER_SEC/50);
if((IO0PIN & KEY1) != 0)
continue ;
/* OSTaskResume(3);
freq += OS_TICKS_PER_SEC / 2 ;
err = OSMboxPost(LEDBox,(void *)&freq);*/
setdate(&today);
settime(&now);
today.da_year++;
now.ti_hour = (now.ti_hour + 1) % 24;
while((IO0PIN & KEY1) == 0)
OSTimeDly(OS_TICKS_PER_SEC/2);
}
}
/*
********************************************************************************************************
** TaskLED4
** LED2任务
********************************************************************************************************
*/
void Task5(void *pdata)
{
char s[40];
pdata = pdata;
T1MCR = 0x00;
T1CCR = 0x00;
for(;;)
{
T1TC = 0x00;
T1TCR = 0x01 ;
OSTimeDly(OS_TICKS_PER_SEC);
T1TCR = 0x00;
sprintf(s,"OSC is %uHz.",(uint32)T1TC);
// PC_DispStr(1,1,s,DISP_FGND_YELLOW + DISP_BGND_BLUE);
}
}
/*
********************************************************************************************************
** TaskLED4
** LED2任务
********************************************************************************************************
*/
void Task6(void *pdata)
{
uint8 err;
uint8 str0[]=" I AM WBB";
pdata = pdata;
for(;;)
{
OSSemPend(DispSem,0,&err);
UART0_SendStr(str0);
OSTimeDly(2);
err = OSSemPost(DispSem);
}
}
/*
********************************************************************************************************
** TaskLED4
** LED2任务
********************************************************************************************************
*/
void Task7(void *pdata)
{
uint8 err;
uint8 str1[]=" I AM SYY";
pdata = pdata;
for(;;)
{
OSSemPend(DispSem,0,&err);
UART0_SendStr(str1);
OSTimeDly(2);
err = OSSemPost(DispSem);
}
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
void BeepMoo(void)
{
IO0CLR = BEEP;
}
void BeepNoMoo(void)
{
IO0SET = BEEP;
}
uint32 GetKey(void)
{
volatile uint32 key;
key = IO0PIN & KEY1;
return key;
}
void UART0_SendByte(uint8 dat)
{
U0THR = dat ;
while((U0LSR & 0x40) == 0)
{
OSTimeDly(2);
}
}
void UART0_SendStr(uint8 const *str)
{
while(1)
{
if(*str == '\0') break;
UART0_SendByte(*str ++);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -