/* ********************************************************************************************************* * uC/OS-II * The Real-Time Kernel * * (c) Copyright 1992-1998, Jean J. Labrosse, Plantation, FL * All Rights Reserved * * V2.00 * * EXAMPLE #1 ********************************************************************************************************* */ #include "includes.h" /* ********************************************************************************************************* * »ó¼ö ********************************************************************************************************* */ #define TASK_STK_SIZE 512 /* °¢ ŽºÅ©ÀÇ ½ºÅà ũ±â(WORD Ç׸ñ ´ÜÀ§) */ #define N_TASKS 10 /* °°Àº Äڵ带 ÀÌ¿ëÇØ¼ »ý¼ºÇÒ Å½ºÅ© ¼ö */ /* ********************************************************************************************************* * º¯¼ö ********************************************************************************************************* */ OS_STK TaskStk[N_TASKS][TASK_STK_SIZE]; /* ŽºÅ© ½ºÅà */ OS_STK TaskStartStk[TASK_STK_SIZE]; char TaskData[N_TASKS]; /* °¢ ŽºÅ©¿¡ ³Ñ°ÜÁÙ Àü´ÞÀÎÀÚ */ OS_EVENT *RandomSem; /* ********************************************************************************************************* * ÇÔ¼ö ¿øÇü ********************************************************************************************************* */ void Task(void *data); /* ŽºÅ© ÇÔ¼ö ¿øÇü */ void TaskStart(void *data); /* ½ÃÀÛ Å½ºÅ© ÇÔ¼ö ¿øÇü */ /*$PAGE*/ /* ********************************************************************************************************* * ¸ÞÀÎ ÇÔ¼ö ********************************************************************************************************* */ void main (void) { PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); /* ȸé Áö¿ì±â */ OSInit(); /* uC/OS-II ÃʱâÈ */ PC_DOSSaveReturn(); /* DOS ȯ°æ ÀúÀå */ PC_VectSet(uCOS, OSCtxSw); /* uC/OS-II ¹®¸ÆÀüȯ º¤ÅÍ ¼³Á¤ */ RandomSem = OSSemCreate(1); /* ·£´ý ³Ñ¹ö¿ë ¼¼¸¶Æ÷¾î */ OSTaskCreate(TaskStart, (void *)0, (void *)&TaskStartStk[TASK_STK_SIZE - 1], 0); OSStart(); /* ¸ÖƼŽºÅ· ½ÃÀÛ */ } /*$PAGE*/ /* ********************************************************************************************************* * ½ÃÀÛ Å½ºÅ© ********************************************************************************************************* */ void TaskStart (void *data) { UBYTE i; char s[100]; WORD key; data = data; /* ÄÄÆÄÀÏ·¯ °æ°í ¹æÁö */ PC_DispStr(26, 0, "uC/OS-II, The Real-Time Kernel", DISP_FGND_WHITE + DISP_BGND_RED + DISP_BLINK); PC_DispStr(33, 1, "Jean J. Labrosse", DISP_FGND_WHITE); PC_DispStr(36, 3, "EXAMPLE #1", DISP_FGND_WHITE); OS_ENTER_CRITICAL(); PC_VectSet(0x08, OSTickISR); /* uC/OS-II Ŭ·° ƽ ISR ¼³Ä¡ */ PC_SetTickRate(OS_TICKS_PER_SEC); /* ƽ ÁÖ±â Àç¼³Á¤ */ OS_EXIT_CRITICAL(); PC_DispStr(0, 22, "Determining CPU's capacity ...", DISP_FGND_WHITE); OSStatInit(); /* uC/OS-II Åë°è¸ðµâ ÃʱâÈ */ PC_DispClrLine(22, DISP_FGND_WHITE + DISP_BGND_BLACK); for (i = 0; i < N_TASKS; i++) { /* °°Àº ŽºÅ© N_TASKS°³ »ý¼º */ TaskData[i] = '0' + i; /* °¢ ŽºÅ©·Î ¼·Î ´Ù¸¥ ¹®ÀÚ¸¦ ³Ñ°ÜÁØ´Ù */ OSTaskCreate(Task, (void *)&TaskData[i], (void *)&TaskStk[i][TASK_STK_SIZE - 1], i + 1); } PC_DispStr( 0, 22, "#Tasks : xxxxx CPU Usage: xxx %", DISP_FGND_WHITE); PC_DispStr( 0, 23, "#Task switch/sec: xxxxx", DISP_FGND_WHITE); PC_DispStr(28, 24, "<-PRESS 'ESC' TO QUIT->", DISP_FGND_WHITE + DISP_BLINK); for (;;) { sprintf(s, "%5d", OSTaskCtr); /* ½ÇÇàµÇ´Â ŽºÅ© °³¼ö Ç¥½Ã */ PC_DispStr(18, 22, s, DISP_FGND_BLUE + DISP_BGND_CYAN); sprintf(s, "%3d", OSCPUUsage); /* CPU »ç¿ëÀ² % ´ÜÀ§·Î Ç¥½Ã */ PC_DispStr(36, 22, s, DISP_FGND_BLUE + DISP_BGND_CYAN); sprintf(s, "%5d", OSCtxSwCtr); /* 1ÃÊ´ç ¹ß»ýÇÑ ¹®¸ÆÀüȯ Ƚ¼ö Ç¥½Ã */ PC_DispStr(18, 23, s, DISP_FGND_BLUE + DISP_BGND_CYAN); OSCtxSwCtr = 0; sprintf(s, "V%3.2f", (float)OSVersion() * 0.01); /* ¹öÀüÀ» Vx.yy Çü½ÄÀ¸·Î Ç¥½Ã */ PC_DispStr(75, 24, s, DISP_FGND_YELLOW + DISP_BGND_BLUE); PC_GetDateTime(s); /* ³¯Â¥¿Í ½Ã°£À» ¾ò¾î¼ Ç¥½Ã */ PC_DispStr(0, 24, s, DISP_FGND_BLUE + DISP_BGND_CYAN); if (PC_GetKey(&key) == TRUE) { /* ۰¡ ´·È´ÂÁö È®ÀÎ */ if (key == 0x1B) { /* ¿¹, ESCAPE ŰÀÎÁö È®ÀÎ */ PC_DOSReturn(); /* DOS·Î º¹±Í */ } } OSTimeDlyHMSM(0, 0, 1, 0); /* 1ÃÊ Áö¿¬ */ } } /*$PAGE*/ /* ********************************************************************************************************* * ŽºÅ© ********************************************************************************************************* */ void Task (void *data) { UBYTE x; UBYTE y; UBYTE err; for (;;) { OSSemPend(RandomSem, 0, &err); /* ·£´ý ³Ñ¹ö ÇÔ¼ö¸¦ »ç¿ëÇϱâ À§ÇØ ¼¼¸¶Æ÷¾î ȹµæ */ x = random(80); /* ŽºÅ© ¹øÈ£¸¦ Ç¥½ÃÇÒ X ÁÂÇ¥ °áÁ¤ */ y = random(16); /* ŽºÅ© ¹øÈ£¸¦ Ç¥½ÃÇÒ Y ÁÂÇ¥ °áÁ¤ */ OSSemPost(RandomSem); /* ¼¼¸¶Æ÷¾î ¹Ý³³ */ /* ȸ鿡 ŽºÅ© ¹øÈ£ Ç¥½Ã */ PC_DispChar(x, y + 5, *(char *)data, DISP_FGND_LIGHT_GRAY); OSTimeDly(1); /* 1 Ŭ·° ƽ Áö¿¬ */ } }