λ΄κ° λ§λ 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) ν¨μλ
νμ€ν¬λ€μ λ§λ€μ΄μ£Όλ ν¨μμ΄λ€.
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νμ€ν¬λ₯Ό λ§λ λ€.
μ¬κΈ°κΉμ§λ νμ€ν¬μ λν μ μλ§ λμλ€.
λ€μμλ μΈλ§ν¬μ΄λ₯Ό 2κ° λ§λ€κ³ λ©μΈμ§ νλ₯Ό λ§λλ μμ€μ΄λ€.
μ΄μ OSλ₯Ό λ리기 μν΄ ISR 루ν΄μ μ€νμμΌμ€λ€.
λ€μμλ μΈλ§ν¬μ΄λ₯Ό 2κ° λ§λ€κ³ λ©μΈμ§ νλ₯Ό λ§λλ μμ€μ΄λ€.
~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); }
μ¬κΈ°μλ λλ΅μ μΈ μ£Όλ μμ€λ§ λμμλ€.