⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 周立功 《μCOS-II微小内核分析与程序设计-基于LPC2300》配套例程源码
💻 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:			wengshujie
** Created date:		2007-10-15
** Version:				1.0
** Descriptions:		The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
*********************************************************************************************************/ 
#include "main.h"

#define TASK0_ID            16      		                            /*  任务0的ID                   */
#define TASK0_PRIO          TASK0_ID		                            /*  任务0的优先级               */
#define TASK0_STACK_SIZE    256     		                            /*  定义任务0堆栈长度           */ 

#define TASK1_ID            17      		                            /*  任务1的ID                   */
#define TASK1_PRIO          TASK1_ID		                            /*  任务1的优先级               */
#define TASK1_STACK_SIZE    512     		                            /*  定义任务1堆栈长度           */    
   
#define TASK2_ID            18				                            /*  任务2的ID                   */
#define TASK2_PRIO          TASK2_ID		                            /*  任务2的优先级               */
#define TASK2_STACK_SIZE    256				                            /*  定义任务2堆栈长度           */ 

#define TASK3_ID            19				                            /*  任务3的ID                   */
#define TASK3_PRIO          TASK3_ID		                            /*  任务3的优先级               */
#define TASK3_STACK_SIZE    256				                            /*  定义任务3堆栈长度           */ 

#define TASK4_ID            20				                            /*  任务4的ID                   */
#define TASK4_PRIO          TASK4_ID		                            /*  任务4的优先级               */
#define TASK4_STACK_SIZE    256				                            /*  定义任务4堆栈长度           */ 

OS_STK  TASK0_STACK[TASK0_STACK_SIZE];                                  /*  建立任务0堆栈               */
OS_STK  TASK1_STACK[TASK1_STACK_SIZE];                                  /*  建立任务1堆栈               */
OS_STK  TASK2_STACK[TASK2_STACK_SIZE];                                  /*  建立任务2堆栈               */
OS_STK  TASK3_STACK[TASK3_STACK_SIZE];                                  /*  建立任务3堆栈               */
OS_STK  TASK4_STACK[TASK4_STACK_SIZE];                                  /*  建立任务4堆栈               */

void TASK0 (void *pdata);                                               /*  声明任务0                   */
void TASK1 (void *pdata);                                               /*  声明任务1                   */
void TASK2 (void *pdata);                                               /*  声明任务2                   */
void TASK3 (void *pdata);                                               /*  声明任务3                   */
void TASK4 (void *pdata);                                               /*  声明任务4                   */

/*********************************************************************************************************
** Function name: main
** Descriptions:  主函数
** Input:         无 
** Output:        无 
*********************************************************************************************************/
int main (void)
{
    OSInit (); 
    
    OSTaskCreateExt (TASK0,
                     (void *)0,
                     &TASK0_STACK[TASK0_STACK_SIZE-1],
                     TASK0_PRIO,
                     TASK0_ID,
                     &TASK0_STACK[0],
                     TASK0_STACK_SIZE,
                     (void *)0,
                     OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); 
                              
    OSStart ();                                       
}
		
/*********************************************************************************************************
** Function name: TASK0
** Descriptions:  最要是初始化4个串口及新建4个与串口相关联的任务
** Input:         无
** Output:        无 
*********************************************************************************************************/
char cUartArg[] = "BaudRate=9600 DataBits=8 StopBits=1 Parity=0 RtsControl=0";
uint8 uiConnectOk[]="Connect Successful!";

void TASK0 (void *pdata)
{
	pdata = pdata;
#if OS_CRITICAL_METHOD == 3				                                /*  for CPU status register     */
    OS_CPU_SR  cpu_sr;
#endif	

    TargetInit ();                                                      /*  目标板初始化                */ 
       
	PINSEL0 |= ((0x01 << 4) | (0x01 << 6));	                            /*  设置P0.2和P0.3连接到UART0   */
	PINSEL0 |= 0x01 << 30;	                                            /*  设置P0.15和P0.16连接到UART1 */
    PINSEL1 |= 0x01 << 0;	
	PINSEL0 |= ((0x01 << 20) | (0x01 << 22));	                        /*  设置P0.10和P0.11连接到UART2 */
	PINSEL0 |= ((0x02 << 0) | (0x02 << 1));	                            /*  设置P0.0和P0.1连接到UART3   */
	
    uartInit (UART0, cUartArg, NULL);                                   /*  初始化串口0                 */
    uartInit (UART1, cUartArg, NULL);                                   /*  初始化串口1                 */ 
    uartInit (UART2, cUartArg, NULL);                                   /*  初始化串口2                 */
    uartInit (UART3, cUartArg, NULL);                                   /*  初始化串口3                 */ 
     
    SetVICIRQ (6, 5, (uint32)uart0Isr);                                 /*  设置UART0中断               */
    SetVICIRQ (7, 6, (uint32)uart1Isr);                                 /*  设置UART1中断               */ 
    SetVICIRQ (28, 7, (uint32)uart2Isr);                                /*  设置UART2中断               */ 
    SetVICIRQ (29, 8, (uint32)uart3Isr);                                /*  设置UART3中断               */    

    uartWrite (UART0, uiConnectOk, sizeof(uiConnectOk), NULL);          /*  提示UART0连接成功           */
    uartWrite (UART1, uiConnectOk, sizeof(uiConnectOk), NULL);          /*  提示UART1连接成功           */
    uartWrite (UART2, uiConnectOk, sizeof(uiConnectOk), NULL);          /*  提示UART2连接成功           */
    uartWrite (UART3, uiConnectOk, sizeof(uiConnectOk), NULL);          /*  提示UART3连接成功           */
    
	OSTaskCreateExt (TASK1,
                     (void *)0,
                     &TASK1_STACK[TASK1_STACK_SIZE-1],
                     TASK1_PRIO,
                     TASK1_ID,
                     &TASK1_STACK[0],
                     TASK1_STACK_SIZE,
                     (void *)0,
                     OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR);  
                     
     OSTaskCreateExt (TASK2,
                      (void *)0,
                      &TASK2_STACK[TASK2_STACK_SIZE-1],
                      TASK2_PRIO,
                      TASK2_ID,
                      &TASK2_STACK[0],
                      TASK2_STACK_SIZE,
                      (void *)0,
                      OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); 
                       
    OSTaskCreateExt (TASK3,
                     (void *)0,
                     &TASK3_STACK[TASK3_STACK_SIZE-1],
                     TASK3_PRIO,
                     TASK3_ID,
                     &TASK3_STACK[0],
                     TASK3_STACK_SIZE,
                     (void *)0,
                     OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); 
                    
    OSTaskCreateExt (TASK4,
                     (void *)0,
                     &TASK4_STACK[TASK4_STACK_SIZE-1],
                     TASK4_PRIO,
                     TASK4_ID,
                     &TASK4_STACK[0],
                     TASK4_STACK_SIZE,
                     (void *)0,
                     OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); 
   	while (1)
	{	
		OSTimeDly(OS_TICKS_PER_SEC);
	}
}

/*********************************************************************************************************
** Function name: TASK1
** Descriptions:  UART0的任务
** Input:         无
** Output:        无 
*********************************************************************************************************/
OS_EVENT *poeUart0ReviceSem;                                            /*  定义信号量poeUart0ReviceSem */
uint8 uiReviceBuf0[128];                                                /*  接收数据缓冲区              */
void TASK1 (void *pdata)
{ 
    INT8U iUart0Err;
    uint32 uiNum;
	pdata = pdata;
	poeUart0ReviceSem = OSSemCreate(1);	                                /*  创建信号量                  */                    
	while(1)
	{	
	    OSSemPend(poeUart0ReviceSem, 0, &iUart0Err);                    /*  请求信号量                  */
	    uiNum = uartFifoStatus(UART0, RX_FIFO);                         /*  查看收到多少数据            */
	    uartRead(UART0, uiReviceBuf0, uiNum, NULL);	                    /*  读数据                      */
	    uartWrite(UART0, uiReviceBuf0, uiNum, NULL);	                /*  把读到的数据发回去          */
	}	    
}

/*********************************************************************************************************
** Function name: TASK2
** Descriptions:  UART1的任务
** Input:         无
** Output:        无 
*********************************************************************************************************/
OS_EVENT *poeUart1ReviceSem;                                            
uint8 uiReviceBuf1[128];                                                /*  接收数据缓冲区              */                                                
void TASK2 (void *pdata)
{
    INT8U iUart1Err;
    uint32 uiNum;
	pdata = pdata;	
	poeUart1ReviceSem = OSSemCreate(1);	                                /*  创建信号量                  */
	while(1)	
	{	
	    OSSemPend(poeUart1ReviceSem, 0, &iUart1Err);                    /*  请求信号量                  */ 
	    uiNum = uartFifoStatus(UART1, RX_FIFO);                         /*  查看收到多少数据            */
	    uartRead(UART1, uiReviceBuf1, uiNum, NULL);	                    /*  读数据                      */
	    uartWrite(UART1, uiReviceBuf1, uiNum, NULL);	                /*  把读到的数据发回去          */ 		
	}
}

/*********************************************************************************************************
** Function name: TASK3
** Descriptions:  UART2的任务
** Input:         无
** Output:        无 
*********************************************************************************************************/
OS_EVENT *poeUart2ReviceSem;                                            
uint8 uiReviceBuf2[128];                                                /*  接收数据缓冲区              */                                                
void TASK3 (void *pdata)
{
    INT8U iUart2Err;
    uint32 uiNum;
	pdata = pdata;	
	poeUart2ReviceSem = OSSemCreate(1);	                                /*  创建信号量                  */
	while(1)	
	{	
	    OSSemPend(poeUart2ReviceSem, 0, &iUart2Err);                    /*  请求信号量                  */ 
	    uiNum = uartFifoStatus(UART2, RX_FIFO);                         /*  查看收到多少数据            */
	    uartRead(UART2, uiReviceBuf2, uiNum, NULL);	                    /*  读数据                      */
	    uartWrite(UART2, uiReviceBuf2, uiNum, NULL);	                /*  把读到的数据发回去          */ 		
	}
}

/*********************************************************************************************************
** Function name: TASK4
** Descriptions:  UART3的任务
** Input:         无
** Output:        无 
*********************************************************************************************************/
OS_EVENT *poeUart3ReviceSem;                                            
uint8 uiReviceBuf3[128];                                                /*  接收数据缓冲区              */                                                
void TASK4 (void *pdata)
{
    INT8U iUart3Err;
    uint32 uiNum;
	pdata = pdata;	
	poeUart3ReviceSem = OSSemCreate(1);	                                /*  创建信号量                  */
	while(1)	
	{	
	    OSSemPend(poeUart3ReviceSem, 0, &iUart3Err);                    /*  请求信号量                  */ 
	    uiNum = uartFifoStatus(UART3, RX_FIFO);                         /*  查看收到多少数据            */
	    uartRead (UART3, uiReviceBuf3, uiNum, NULL);	                /*  读数据                      */
	    uartWrite (UART3, uiReviceBuf3, uiNum, NULL);	                /*  把读到的数据发回去          */ 		
	}
}

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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -