寒假OS學習第六天

2021-10-18 08:28:56 字數 1654 閱讀 1312

外設的所有中斷都由中斷控制晶元8259a匯集後連線到cpu的intr引腳

8259a pic每一片能管理8個中斷源。

使用級聯功能

時鐘中斷連線在主片的ir0引腳,鍵盤中斷連線在ir1引腳

因為0~31號中斷是cpu自己用的,所以ir0開始對應的就是32號中斷號

要完成中斷請求,首先要進行初始化

static

void

pic_init()

8259a的設定我認為我只要了解了解就夠了

接下來,新增中斷請求處理函式

irq的處理函式和isr的處理函式基本上一樣

%macro irq 1

[global irq_%1]

irq_%1:

cli ; 關閉中斷,因為現在正在處理中斷

push 0 ; 無錯誤碼

push %1

jmp irq_common_stub

%endmacro

irq 32

irq 33

irq 34

irq 35

irq 36

irq 37

irq 38

irq 39

irq 40

irq 41

irq 42

irq 43

irq 44

irq 45

irq 46

irq 47

[global irq_common_stub]

[extern irq_handler]

irq_common_stub:

pusha

mov ax, ds

push eax

mov ax, 0x10

mov ds, ax

mov fs, ax

mov es, ax

mov gs, ax

mov ss, ax

push esp

call irq_handler

add esp, 4

pop ebx

mov ds, bx

mov fs, bx

mov es, bx

mov gs, bx

mov ss, bx

popa

add esp, 8

iret

.end:

static

void

irq_init()

inline

void

irq_handler

(idt_regs_t *regs)

定時器中斷能控制使用者程式的執行事件

而且,這種處理函式通常都是對程序的排程處理

時鐘中斷由8253/8254 timer產生的

配置晶元:

void

init_timer

(uint32_t frequency)

static

void

timer_callback

(idt_regs_t *regs)

其他要做的事情就是在入口函式的地方加上乙個init_timer而已

第六天學習

變數的作用域 區域性變數 在函式內部定義的變數,這個變數只能在函式內部使用,在全域性當中不能使用。使用就報錯了。全域性變數 在函式外部定義的變數,這個變數可以在全域性使用。但是我們一般不推薦使用全域性變數 因為可能會意外的修改掉變數的值。迫不得已不要用全域性變數 衝突處理原則 就近原則。而不是從上到...

學習第六天

還有九天,我就要去參加北大3日遊了。滑稽 像我這樣的蒟蒻去那也就是旅遊模式吧!無所謂了,隨便去考考,說不定有優秀營員呢?滑稽 不可能,絕對不可能 相信自己好了。這麼多天,好像把面試給忘了,雖然有人說面試是瞎 但是還是要準備準備的 明天看吧!還有什麼知識點沒看嗎?我們來看看st表和hash表吧!先看看...

學習android第六天

activity簡介 當在乙個activity中按下返回時,android os會自動銷毀activity物件 當在乙個activity中啟動另乙個activity時,當前activity不會被銷毀,而是被壓入activity棧中 activity的建立 1 自定義類,繼承activity 2 複寫...