E D R , A S I H C RSS

LIB_1

λ‚΄κ°€ λ§Œλ“  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νƒœμŠ€ν¬λΌ λ§Œλ“ λ‹€.
μ—¬κΈ°κΉŒμ§€λŠ” νƒœμŠ€ν¬μ— λŒ€ν•œ μ •μ˜λ§Œ λ‚˜μ™”λ‹€.

λ‹€μŒμ—λŠ” μ„Έλ§ˆν¬μ–΄λΌ 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);
}

μ—¬κΈ°μ„œλŠ” λŒ€λž΅μ μΈ 주된 μ†ŒμŠ€λ§Œ λ‚˜μ™€μžˆλ‹€.


Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:36
Processing time 0.0125 sec