精華區beta Programming 關於我們 聯絡資訊
※ 引述《MasterChang (我愛ASM)》之銘言: : ※ 引述《ggg12345 (ggg)》之銘言: : : 謝謝您的回應, 我的問題是想知道兩件事: : : 1.Serious I/O 與 雙向 parallel I/O(PC Printer 界面) : : 都能接受 input signal , 在現在的 Win2K/XP OS 下, : : Overlap I/O 狀況能接收到多快的連續 bit rate 輸入. : 你的問題在PC上有兩個點要考慮 : 1.硬體介面的速度 : 2.OS處理這些I/O時的負擔。 : 假設你的串列i/o是UART或是PS/2,平行埠是Palraller Port : 的話。由於你已經不能用早期DOS下direct i/o方式控制,所 : 必須透過driver來控制。UART部分有到921600bps的選項,不 : 過我沒用過,你可以試試。 你也可以用示波器觀察每次發送 : 資料間的時隔。 : Parallel Port根據你使用的協定,速度大概在1MB/sec~2MB/sec : ,所以單一Pin差不多就是 1M~2M bps,但是使用過的經驗。 : 大約只有80%不到的速度。受到OS本身及PArallel Port driver : 的影響。driver則是使用網路上的io.dll。 使用 DOS 直接控制 I/O 且使用 interrupt 跟在 Win2k/XP 的不同 就是 user mode control I/O 在 win2k/XP 需透過 system service 進行, 整個速度若不考慮硬體限制如 rs-232 main clock rate , cable length , 主要受限於 OS 處理的 overhead. 原始的 printer parallel I/O card 其 data strobe 的訊號產生是用 out 指令送出 0/1 訊號合成 的, 若不用 interrupt signal , 配合 strobe 的 ACK 訊號還需用 polling i/o 配合, 透過 winXP 就會變慢很多. : : 2.假設只使用類似 PIO 的 in , out 兩條訊號線(如 printer : : I/O, 但與之的 I/O port 位置不同), 這個非BIOS 的 I/O : : driver routine 要如何用那些工具配合安裝才能讓 Win2k/ : : XP os 能認得這個額外 driver , WinXP OS 又如何協助 : : user space 的 Client AP 直接使用 I/O port , 假設 PIO : : input 線需要 interrup signal 通知 Client AP 時, 這個 : : interrupt 要如何配合 os 設定, 才能產生 event flag ? : PIO是哪裡的PIO?PCI卡的還是? : 1.你的driver要能提供可呼叫介面,並定義在h檔。例如控制Parallel Port : 的io.dll就會提供一個io.h可以用。 : 2.或是直接寫成像COM一樣的檔案型裝置,並根據檔案使用定 : 義對於CreateFile(),ReadFile()和WriteFile()對應的call function : 進行關連建立的動作。一般232擴充卡屬於這類。 : 詳細的部分你需要參考WDM書籍。interrupt signal不會讓User : Mode 的AP處理,而是Driver 在Kernel mode下處理後將user define : 的msg傳入讓軟體知道(像WM_)其實就是一種message。uer space : 要做i/o輸出時,要做的工作就是把資料Ready,呼叫WriteFile() : ,等到driver可以工作時,自然就會把資料寫到i/o上。 謝謝您的回應. 查了 MSDN 的 WDK 資料. User Mode I/O driver 在新的 WinXP/Vista 下, 微軟 msdn 的 WDK 網頁 現在提供一種 User Mode Driver Framework 可以透過 callback function, read/writefile 形式 與 os 相互通知與使用 user mode driver. 老式方法之一是使用 VM86 Mode 與 VDX driver 可以直接執行 I/O. 另一方法就是您提的透過 DLL 或 kernel mode driver 進行 I/O . 這些練習都不太可能是由組語課程進行練習, 提供範例. 這些已經都是 system service 與 OS driver 概念. 組語在 WinXP 環境教 不下去, 似乎是必然的. : 滿久沒寫WDM和linux driver,有錯的話請直接改.... : : 最近發現 組語教科書(如 Assembly Language For INTEL-BASED : : Computer)除了 bios int 說明, 不再有任何 I/O 界面 driver : : 的其他相關說明與範例, 只有一個使用 speaker 發聲的例子是 : : 在 VM86 dos prompt 下執行. 以致感覺這課程的教學就變得毫 : : 無可用性. 業界要求教學生組語的願望跟任課教師是對不攏的. : : 假設裝了四個以上的Comm serious I/O port card , 這問題 : : 應該會因額外的 I/O card 而發生同樣的問題吧. : : 如果您知道細節, 麻煩能賜知, 先謝謝 ! : 廠商會提供對應的driver,裝好就直接像PC上的COM使用即可。 : PC speaker的例子其實可以換成用音效卡發聲,這個在windows : programming 5/e就是基本範例。 : PC喇叭不是不能用,只是現在聽到PC喇叭發聲機會只有開機和 : 主機本出問題才比較有機會聽到。 : 或是用光碟開機版的DOS7.0或FreeDOS 還是可以用這些書的東 : 西,而且光碟開機版的也不用裝在電腦上,也是滿方便的。 通常同樣的 I/O card 雖然有 jump 可以錯開 I/O port 但一旦超過 BIOS 的事先分配範圍, 如超過 3 個 asyn-comm , 3個 printer/PIO , 或 四個 以上的 ethernet card 一般的 driver 就無法啟動了. PC 主機板小啦叭 算是 Win2k/XP 下, 透過 VM86 DOS prompt 最實用的 user mode I/O 範例了. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.1.146