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

📄 test.c

📁 一个关于UCOS的KEIL工程
💻 C
字号:
/*
*********************************************************************************************************
*                                                uC/OS-II
*                                          The Real-Time Kernel
*
*                           (c) Copyright 1992-2002, Jean J. Labrosse, Weston, FL
*                                           All Rights Reserved
*
*                                               EXAMPLE #1
*********************************************************************************************************
*/

#include "includes.h"
#include "display.h"

/*
*********************************************************************************************************
*                                               CONSTANTS
*********************************************************************************************************
*/

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


/*
*********************************************************************************************************
*                                               VARIABLES
*********************************************************************************************************
*/

OS_STK        TaskStk[N_TASKS][TASK_STK_SIZE];        /* Tasks stacks                                  */
OS_STK        TaskStartStk[TASK_STK_SIZE];
char          TaskData[N_TASKS];                      /* Parameters to pass to each task               */
OS_EVENT     *RandomSem;

/*
*********************************************************************************************************
*                                           FUNCTION PROTOTYPES
*********************************************************************************************************
*/

        void  Task(void *pd) reentrant;                       /* Function prototypes of tasks                  */
        void  TaskStart(void *pdata) reentrant;                  /* Function prototypes of Startup task           */
static  void  TaskStartCreateTasks(void) reentrant;
unsigned char HexToAscii (unsigned char num) reentrant;

/*
*********************************************************************************************************
*                                                MAIN
*********************************************************************************************************
*/

void main (void)
{
    OSInit();                                              /* Initialize uC/OS-II                      */
	
	OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 0);
	
    OSStart();                                             /* Start multitasking                       */
}

/*
*********************************************************************************************************
*                                              STARTUP TASK
*********************************************************************************************************
*/

void TaskStart (void *pdata) reentrant
{
	INT8U i = 0;
	INT32U time = 0;
	
	pdata = pdata;                                         /* Prevent compiler warning                 */
	
	nt7606_init();
	
	OS_ENTER_CRITICAL();
    // clock init
    TMOD = 0x11;
    ET0 = 1;
    TR0 = 1;
    OS_EXIT_CRITICAL();
	
	OSStatInit();                                          /* Initialize uC/OS-II's statistics         */
	
	TaskStartCreateTasks();                                /* Create all the application tasks         */
	
	i = 0;
	OSTimeSet(0);
	while (1)
	{
        time = OSTimeGet() / 20;
        
        movcur(1, 5);
        if ((time / 1000) > 0)
        {
        	putch(HexToAscii(time / 1000));
        }
        else
        {
        	putch('0');
        }
        if ((time % 1000 / 100) > 0)
        {
        	putch(HexToAscii(time % 1000 / 100));
        }
        else
        {
        	putch('0');
        }
        
        putch(HexToAscii(time % 100 / 10));
        putch(HexToAscii(time % 10));
        putch('s');
        
        OSTimeDlyHMSM(0, 0, 1, 0);                         /* Wait one second                          */
	}
}

/*
*********************************************************************************************************
*                                             CREATE TASKS
*********************************************************************************************************
*/

static  void  TaskStartCreateTasks (void) reentrant
{
    INT8U  i;

    for (i = 0; i < N_TASKS; i++) {                        /* Create N_TASKS identical tasks           */
        TaskData[i] = '0' + i;                             /* Each task will display its own letter    */
        OSTaskCreate(Task, (void *)&TaskData[i], &TaskStk[i][TASK_STK_SIZE - 1], i + 1);
    }
}


/*
*********************************************************************************************************
*                                                  TASKS
*********************************************************************************************************
*/

void  Task (void *pd) reentrant
{
    INT8U i;
    INT8U * p;
    
    //pdata = pdata;
    
    i = 0;
    for (;;) {
        OSTimeDly(OS_TICKS_PER_SEC);              /* Delay 1 clock tick                                 */
        
        i = TL0 % 17;
        if (i == 0)
        {
        	i = 16;
        }
        
        movcur(2, i);
        p = (char *)pd;
        putch(*p);
    }
}


unsigned char HexToAscii (unsigned char num) reentrant
{
	num &= 0x0F;
	
	if (num < 10)
	{
		return (num + 0x30);
	}
	else
	{
		return (num + 0x37);
	}
}

⌨️ 快捷键说明

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