www.pudn.com > UART0+UCOS-II.rar > main.c, change:2005-07-07,size:5264b


/****************************************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: 
** Modified date: 
** Version: 
** Descriptions: 
** 
********************************************************************************************************/ 
#include "config.h" 
#include "stdlib.h" 
 
#define  TASK_STK_SIZE                  64 
OS_STK   TaskStk[TASK_STK_SIZE]; 
OS_STK   TaskStartStk[TASK_STK_SIZE]; 
 
OS_EVENT *Uart0ReviceMbox; 
 
void  TaskStart(void *data); 
void  TaskUart0Revice(void *pdata); 
 
/********************************************************************************************************* 
** 函数名称: PC_DispChar 
** 功能描述: 向串口发送一帧数据(按EasyARM软件通讯协议),起始字符固定为0xFF。 
** 输 入: cp       发送数据的指针 
** 输 出: 无 
********************************************************************************************************/ 
        void PC_DispChar(uint8 *cp) 
{ 
    OS_ENTER_CRITICAL(); 
    UART0Putch(0xff); 
    UART0Putch(*cp++); 
    UART0Putch(*cp++); 
    UART0Putch(*cp++); 
    UART0Putch(*cp++); 
    OS_EXIT_CRITICAL(); 
} 
 
 
/********************************************************************************************************* 
** 函数名称: main 
** 功能描述: c语言的主函数,由它启动多任务环境 
********************************************************************************************************/ 
        int main (void) 
{ 
    OSInit(); 
 
    OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 2); 
    OSStart(); 
    return 0; 
} 
 
/********************************************************************************************************* 
** 函数名称: TaskStart 
** 功能描述: μCOS-II的第一个任务。等待TaskUart0Revice接收一到帧数据, 
**           然后将数据进行转换,再从UART0发出。 
** 输 入: pdata        任务附加参数(指针) 
** 输 出: 无 
********************************************************************************************************/ 
uint8 const ShowTable[11] = { 
      0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x00}; 
//     0     1   2    3    4    5    6    7    8    9     
 
        void  TaskStart(void *pdata) 
{ 
    uint8 *cp; 
    uint8 err; 
 
    pdata = pdata;                                                  /* 避免编译警告 */ 
 
    Uart0ReviceMbox = OSMboxCreate(NULL);                           /* 建立邮箱     */ 
    if (Uart0ReviceMbox == NULL) 
    { 
        while (1); 
    } 
 
    OSTaskCreate(TaskUart0Revice, (void *)0,  
                 &TaskStk[TASK_STK_SIZE - 1], 10);                  /* 创建任务     */ 
 
    TargetInit();                                                   /* 目标板初始化 */ 
    for (;;) 
    { 
        cp = (uint8 *)OSMboxPend(Uart0ReviceMbox, 0, &err);         /* 接收数据 */ 
        if (cp[0] == 0x80) 
        {                                                           /* led显示 */ 
            cp[2] = ShowTable[cp[2]]; 
        } 
        else 
        {                                                           /* 屏幕显示 */ 
            cp[2] = cp[2] +'0'; 
        } 
        PC_DispChar(cp);                                            /* 显示接收到的数据 */ 
    } 
} 
 
/********************************************************************************************************* 
** 函数名称: TaskUart0Revice 
** 功能描述: μCOS-II的任务。从UART0接收数据,当接收完一帧数据后通过消 
**           息邮箱传送到TaskStart任务。 
** 输 入: pdata        任务附加参数(指针) 
** 输 出: 无 
********************************************************************************************************/ 
        void  TaskUart0Revice(void *pdata) 
{ 
    uint8 *cp; 
    uint8 Buf[4], temp, i; 
     
    pdata = pdata;                                                  /* 避免编译警告 */ 
 
    for (;;) 
    { 
err: 
        cp = Buf; 
        while (UART0Getch() != 0xff);                               /* 接收数据头 */     
        for (i = 0; i < 4; i++) 
        { 
            temp = UART0Getch(); 
            if (temp == 0xff) 
            { 
                goto err; 
            } 
            *cp++ = temp; 
        } 
        OSMboxPost(Uart0ReviceMbox, (void *)Buf); 
    } 
} 
    
/********************************************************************************************************* 
**                            End Of File 
********************************************************************************************************/