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

📄

📁 瑞泰创新的GX-ARM9-2410EP教学实验系统的所有基础实验源代码,内容齐全,解析清楚,基本上每个实验结果都有图片显示
💻
字号:
/**************************************************************************
*                                                                         *
*   PROJECT     : ARM port for UCOS-II                                    *
*                                                                         *
*   MODULE      : EX1.c                                                   *
*                                                                         *
*   AUTHOR      : Michael Anburaj                                         *
*                 URL  : http://geocities.com/michaelanburaj/             *
*                 EMAIL: michaelanburaj@hotmail.com                       *
*                                                                         *
*   PROCESSOR   : Any processor                                           *
*                                                                         *
*   IDE         : Any IDE                                                 *
*                                                                         *
*   DESCRIPTION :                                                         *
*   This is a sample code to test UCOS-II.                                *
*                                                                         *
**************************************************************************/


#include "includes.h"
#include "consol.h"


/* ********************************************************************* */
/* Global definitions */


/* ********************************************************************* */
/* File local definitions */

#define  TASK_STK_SIZE 256                      /* Size of each task's stacks (# of WORDs) */
#define  NO_TASKS           10                   /* Number of identical tasks */

OS_STK   TaskStartStk[TASK_STK_SIZE];


/* ********************************************************************* */
/* Local functions */

//开始
//#define TASK_STK_SIZE 2048 /*堆栈大小*/
//#define N_TASKS 2 /*任务数量*/

//OS_STK TaskStk[N_TASKS][TASK_STK_SIZE];     /*任务堆栈*/
OS_EVENT *StrMbox; /*用于传送字符串的邮箱的指针*/
OS_EVENT *LockMbox; /*锁定字符串缓冲区的邮箱的指针(作为二值信号量使用,有消息时未锁定,无消息时锁定)*/

//-----------------------------------------------
//

char * ReadString(char *str, size_t size)
{//读取一行字符串,不包含末尾的回车符
	char c;
	int i;
	for(i=0; i<size-1; i++, str++)
	{
		c = CONSOL_GetCh();
		if(c == '\r')
			break;
		else
			*str = c;
	}
	*str = '\0';
	return str;
}

void WriteString(char *str)
{//写字符串
	CONSOL_Printf(str);
}
//-----------------------------------------------

void Task1 (void *data)
{
    UBYTE err;
    char str[128];

    data=data;
    for (;;)
    {
    	OSMboxPend(LockMbox, 0, &err);//等待字符串缓冲区解除锁定
    	WriteString("\n\n[Task1]请输入字符串(以回车结束):");
    	ReadString(str, sizeof(str));
    	OSMboxPost(StrMbox, str);
    }
}

void Task2(void *data)
{
    UBYTE err;
    char *str;
    data=data;
    for(;;)
    {
    	str = (char*)OSMboxPend(StrMbox, 0, &err);
    	WriteString("\n[Task2]收到字符串:\"");
    	WriteString(str);
    	WriteString("\"\n");
    	OSMboxPost(LockMbox, (void*)-1);//解除锁定
    }
}

void Run()
{
    StrMbox = (OS_EVENT*)OSMboxCreate((void *)0);//创建邮箱
    LockMbox = (OS_EVENT*)OSMboxCreate((void *)-1);//创建邮箱(作为二值信号量)
    OSTaskCreate(Task1, (void *)0, (void *)&TaskStk[0][TASK_STK_SIZE - 1], 5);
    OSTaskCreate(Task2, (void *)0, (void *)&TaskStk[1][TASK_STK_SIZE - 1], 6);
}

void TaskStart (void *data)
{
        data = data;                            /* Prevent compiler warning */

        CONSOL_Printf("uC/OS-II, The Real-Time Kernel ARM Ported version\n");
        CONSOL_Printf("邮箱的使用\n");

        OSStatInit();                           /* Initialize uC/OS-II's statistics */
        
        Run();

        while(1)
        {
                OSTimeDlyHMSM(0, 0, 1, 0);      /* Wait one second */
        }
}


/* ********************************************************************* */
/* Global functions */

void APP_vMain (void)
{
        OSInit();                               /* Initialize uC/OS-II                                      */
//        RandomSem = OSSemCreate(1);             /* Random number semaphore                              */
        OSTaskCreate(TaskStart, (void *)0, (void *)&TaskStartStk[TASK_STK_SIZE - 1], 0);
        FRMWRK_vStartTicker(OS_TICKS_PER_SEC);  /* os_cfg.h */
        OSStart();                              /* Start multitasking                                       */
}


/* ********************************************************************* */

⌨️ 快捷键说明

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