E D R , A S I H C RSS

LIB_4

손이 고생을 많이 해서 그렇지 소스는 별로 많지 않다..다만 다 손으로 치라구 하니 힘들었을 뿐

여하튼 그래서 주요부분의 소스는 다 보여준 것 같다.
사실 U_C_OS 도 주석과 쓰잘대기 없는 코드가 좀 많다.
그리고 세마포어와 이벤트에 관한 코드는 대부분 비스므레 하다...이유는 거의 동기화하는 방법이
비슷하게 때문이다. 그래서 중요코드를 보면 그렇게 많지 않다..거기다 U_C_OS-I에서 U_C_OS_II로 가는 도중의
호환성 때문에 많은 주석이 더 필요했졌다...암튼 그래서..내 코드는 짧다....
~cpp 
#if !defined(LIB_STACK_CPP)
#define LIB_STACK_CPP
void LIB_STACK_INIT (void (*task)(void),INT16U * Stack)
{
	*Stack-- = 0x0000;
	*Stack-- = (INT16U)FP_SEG(task);
	*Stack-- = (INT16U)FP_OFF(task);
	*Stack-- = (INT16U)0x0202; // Flag Register
	*Stack-- = (INT16U)FP_SEG(task);
	*Stack-- = (INT16U)FP_OFF(task);
	*Stack-- = (INT16U)0xAAAA;// AX
	*Stack-- = (INT16U)0xBBBB;// BX
	*Stack-- = (INT16U)0xCCCC;// CX
	*Stack-- = (INT16U)0xDDDD;// DX
	*Stack-- = (INT16U)0xEEEE;// ES
	*Stack-- = _DS;
	*Stack-- = (INT16U)0x0000;// SI
	*Stack-- = (INT16U)0x0000;// DI
	*Stack-- = (INT16U)0xFFFF;// BP
}

스택 사이즈 구하는 부분
~cpp 
INT16U LIB_STACK_SIZE (INT16U *Stack)
{
	int size = 0;
	for (int i = 0 ; i<256 ; i ++){
		if ( (*Stack--) != 0 ) size++;
	}
	return size;
}
#endif

다음은 TCB 구조체 모양이다....
TCB는 TASK CONTROL BLOCK의 약자.. 한마디로 태스크에 대한 정보를 담고 있는 구조체
~cpp 
#if !defined(LIB_STRU)
#define LIB_STRU

#include "LIB_DATA.H"
struct LIB_TCB {
	// Task Priority
	INT8U *Task_Name;
	INT8U priority;

	// Task Stack
	INT16U StackSeg;
	INT16U StackOff;
	INT16U *Stack;

	// Task Delay
	int  delay;

	// Task Status
	INT8U     Task_Status;
	// Event Ptr;
	LIB_TCB *NextEvent;
};
이벤트에 관한 블럭
~cpp 
struct LIB_ECB {
	void	*Event_Ptr;
	LIB_TCB *Wait_TCB;

	INT8U	Event_Type;
	INT16U	Sema_Count;
};
#endif
---
REAL_LIBOS
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:37
Processing time 0.0088 sec