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.0110 sec