星期一, 1月 21, 2008

porting microC/OS-II on x86

一點這次RTOS final project的心得,其中keyboard interrupt的部分感謝洪泰昌學長的幫忙,所有的架構是base on
http://www.micrium.com/intel/index.html這裡的code

1. 使用VC 6必須把MASM 611的ml.exe放進VC6的bin目錄中,目前我還沒辦法使用VS 2005成功complier。
2. 使用VMWare搭配Floppy Image Creator可以簡化開發過程。
3. 此部分為Keyboard intrrupt部分。
如需使用其他interrupt請參考Ralf Brown's Interrupt List服用


/* 大概觀念為這樣,這份code還有些小問題,要自行處理 */
/* Tang Chih-Cheih 98/01/21 */
/*--------------------- 設定x86 interrupt 0x21 對應到OSKeyboardISR function(os_cpu_c.c)---------------------*/
SetIntVector(0x21, OSKeyboardISR); // Install the handler

;-----------------------------------------------------------------------
; 讓keyboard interrupt 對應到displayEnter的function(os_cpu_a.asm)
; _OSKeyboardISR
;-----------------------------------------------------------------------
PUBLIC _OSKeyboardISR
EXTRN _OSIntEnter:NEAR
EXTRN _displayEnter:NEAR
EXTRN _OSIntExit:NEAR
_OSKeyboardISR PROC NEAR

pushad;

call _OSIntEnter;
call _displayEnter;
call _OSIntExit;

;Send an end-of-interrupt to the i8042.


in al,61h;
mov ah,al;
or al,80h;
out 61h,al;
xchg al,ah;
out 61h,al;

;Send an end-of-interrupt to the i8259.

mov al,20h;
out 20h,al;

;Standard uCOS processing.

popad;

iretd

_OSKeyboardISR ENDP

/*--------------------- 從port 0x60 讀取keyboard的scan code ---------------------*/
void displayEnter(){

INT8U indata;
char data[2];

indata = inportb(0x60);
data[0] = indata;
data[1]='\0';


OnScreen(24, 5, data, 14);
}

0 意見: