λ΄κ° λ§λ 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);
}
μ¬κΈ°μλ λλ΅μ μΈ μ£Όλ μμ€λ§ λμμλ€.









