내가 만든 RTOS에서는 우선순위 63이 제일 높다. 이 태스크는 가장 높은 태스크로서 화면을 계속 갱신해 준다. {{{~cpp // Task 0 is Highest Task :: priority 63 void mn_task() { while(1){ // Print Logo char *sen = ":::::::: Little / Simple Real Time Kernel ::::::: \n"; char *sen1 = " LIB_OS Ver 0.27 :: http://www.cse.cau.ac.kr\n"; char *sen2 = "Check Running Task \n"; char *sen3 = "Task Name Priority StackSize Running \n"; LIB_VRAM_STRING(0,0,sen,0x04); LIB_VRAM_STRING(0,1,sen1,0x07); LIB_VRAM_STRING(0,2,sen2,0x07); LIB_VRAM_STRING(0,4,sen3,0x09); // Show the task delay , usage and LIB_TASK_DISPLAY(10); LIB_VRAM_STRING(0,12,"Total Interrupt Count :\n",0x09); LIB_VRAM_NUM(26,12,LIB_INT_COUNT,0x07); LIB_TIME_DLY(63,5); // 이 태스크에 딜레이를 주는 소스 부분 } } }}} 이건 사용자 태스크인 태스크1 이다. {{{~cpp // Task 1 :: priority 60 void task1() { char msg1; msg1 = 'A'; while(1) { // TASK STATE DISPLAY LIB_TASK_DISPLAY(5); // semaphore section LIB_pend_sem(semaphore , 50); LIB_post_sem(semaphore); // send message :: msg1 if ( msg1 == 'Z' ) msg1 = 'A'; else msg1++; LIB_VRAM_CHAR(56,5,msg1,0x16); LIB_post_msg(message,&msg1); LIB_TIME_DLY(60,10); } } }}} 다음은 실제적인 메인 펑션이다. LIB_create_task (char* string,int,&task_point,task_size) 함수는 태스크들을 만들어주는 함수이다. {{{~cpp void main() { // clear CRT LIB_VRAM_CLR(); // 화면을 지워주고 // init Scheduler Queue , TICKS and Parallel Port LIB_Init_Schedu(); // 스케쥴링을 위한 우선순위 큐를 초기화 하고 LIB_TIME_RATE(); // 타이머를 정의하고 LIB_init_prl(0); // 패러럴 포트를 정리한다. // create The Sample Task 1,2 #if !defined(DEBUG) LIB_create_task("Management\n",63,mn_task,&TaskStack0[256]); // 매니져 함수를 만들어준다. LIB_create_task("task1\n",60,task1,&TaskStack1[256]); // 사용자 태스크 1을 만들어준다. LIB_create_task("task2\n",59,task2,&TaskStack2[256]); // 사용자 태스크 2를 만들어준다. #endif LIB_create_task("StatTask\n",LIB_IDLE_PRIORITY + 1,LIB_TASK_CPU_STAT,&OSStack[256]); // 상태를 알아보는 태스크를 만든다. LIB_create_task("IdleTask\n",LIB_IDLE_PRIORITY,idle_task,&TaskStack3[256]); // 유휴상태일때 돌아가는 idle태스크를 만든다. }}} 여기까지는 태스크에 대한 정의만 나왔다.[[BR]] 다음에는 세마포어를 2개 만들고 메세지 큐를 만드는 소스이다.[[BR]] {{{~cpp // create semaphore and message semaphore = LIB_create_sem(2); message = LIB_create_msg(NULL); }}} 이제 이렇게 되면 각각의 코드로 태스크와 세마포어.메세지가 만들어졌다. 이제 OS를 돌리기 위해 ISR 루틴을 실행시켜준다. {{{~cpp // init ISR LIB_INIT_ISR(); while(1) {}; LIB_VRAM_STRING(0,0," :: FATAL ERROR :: \n",0x07); } }}} 여기서는 대략적인 주된 소스만 나와있다. ---- ["REAL_LIBOS"]