2016-04-27 54 views
0

我在網上找到的幾乎所有材料都參考了Tananbaum的操作系統手冊中的代碼。但我不明白爲什麼這會打印整個字符串而不是隻打印第一個字符。爲什麼要在中斷驅動的IO中打印字符串,只需要複製第一個字符?

是否因爲中斷會以遞歸方式生成?但是這不會花費很多資源嗎?或者我錯過了什麼?

我真的很困惑。任何幫助,將不勝感激。當打印系統調用時將執行


代碼:

copy_from_user (buffer, p, count); 
enable_interrupts(); 
while (*printer_status_reg !=READY); 
*printer_data_register = p[0]; 
scheduler(); 

中斷處理程序:

if (count == 0) { 
    unblock_user(); 
} else { 
    *printer_data_register = p[i]; 
    count = count – 1; 
    i++; 
} 
acknowledge_interrupt(); 
return_from_interrupt(); 
+1

如果尚未傳輸數據,則需要通過顯式加載第一個字節的tx寄存器來「發送」中斷。除非你這樣做,否則不會發送'tx register empty'中斷來發送陣列的其餘部分。 –

回答

1

你寫在緩衝區的第一個字符,並開始傳輸。 傳輸完成後,會產生中斷Tx_Complete

現在,您的中斷處理程序會檢查是否還有更多要傳輸的字節(else部分)。如果可用,它將下一個字節添加到發送寄存器,遞減要傳輸的字節數並遞增緩衝區索引。

該過程繼續...當要傳輸的字節數達到零時,您不會啓動下一次傳輸,並且您的中斷將停止。

通過傳輸第一個字節,您啓動進程並通過中斷處理程序傳輸其餘字節。你必須確保count是正確的。 你可以猜測如果數量少或更多,會發生什麼!

相關問題