2008年10月10日 星期五

用Visual Basic寫USB通訊程式?


這是一封在另一版主網頁所留的有關USB 問題。

Question :

用Visual Basic寫USB通訊程式?

不知道用VB寫的時候要注意些什麼?還是說有已經寫好的語法或模組呢?寫下去後大概要怎麼DEBUG呢?

Answer :

說真的...也不瞞大家,版主最早還在服國防役時,在PC上所學的第一套程式軟體,

就是 Visual Basic ....那時是視窗作業系統還是剛從鳥鳥的Windows 3.1 跨進所謂的

Windows 95 耶。....那時VB 還是所謂的 Version 4.0 。

當初會學VB 的最主要原因也是為了 RS232 那個介面。就為了寫一個電動機車測試軟體。

...當然後來也有寫出來啊。....所以,人家我也寫過VB啊。

而這個之前也有寫過 DOS 環境的Turbo C啊...

這個軟體就是用Turbo C 寫的...也是有RS232 功能的。

----

所以,大家會問我有關用VB 寫USB 程式問題....我一點也不覺得奇怪。

畢竟,他是比VC++ 更容易入門啊...尤其要寫一個美美的操控人機介面螢幕畫面。

是比VC++容易一點....因為您會VC++ 只是入門...要寫美美的話面還要再學MFC。

幾年前,我剛學MFC 時,(那時我已經會寫VC++了!)人家前輩還跟我說:

您大概還要花半年才會在MFC裡,運用自如這些物件導向的東西...

果不其然...就是半年。...那您說:人家入門當然就選用輕鬆入門的VB啊。

-----

但是啊...天下沒有白吃的午餐....應該說:學習真的沒有捷徑。

畢竟...以C 語言來說...他還是大宗程式語言的老祖宗。

那更不說在一些Embedded system 或是 一些單晶片應用市場...還是主要程式語言啊。

所以,很簡單...以未來長遠來說:一些程式語言的開發平台維護來說:

如果您是微軟公司或是其他公司來說:以市場需求來說:在有限的人力條件之下,

有著VB 與VC 兩套發展系統來說:您會繼續支持哪一套?!...

我想這個答案應該就很清楚了...

因為畢竟:誠如這位讀者所提的:我如何在VB的環境裡去DEBUG啊?!

這些程式語言所延伸的周邊支持的開發工具來說,...VB 真的不如VC啊。

最近有客人就是因為人家硬體原廠就只有支持VC...與提供VC範例程式...

(也是跟USB 有關的!),而全公司的工程師都只會VB不會VC而作罷。

還有另一位作系統老闆學長...他們公司其實很需要一位寫應用軟體工程師...來配合一些

硬體應用介面的...無奈公司裡的工程師也只會VB....人家工程師也很認真的跟老闆說:

我會努力的把VC也學起來的...(看著老闆一臉期望的眼神...)

但是呢?!....在外面公司學程式語言不比在學校啊...

更何況當您又在另一個程式語言(VB)裡,已經有一定熟悉度時...那更增加困難度啊。

結果:幾年下來...這位工程師桌子後面的VC入門書...還是靜靜的躺在那....

 

 

-----

不知...寫到這裡...不知大家有沒有看到我的回答?!....

以上層的AP應用程式與下層硬體驅動程式之間...當然還是有一定的關聯性。

先假設大家都有點摸過類似Keil C 或是一些其他Embedded system 或是單晶片開發工具。

我們都喜歡在Debug裡用所謂的Single  Step去追蹤每一道程式的結果...

當然以USB 介面來說:也是一樣的啦....所以,當然人家在底層的驅動程式是用VC寫的時...

您說呢...這已經不是所謂效能問題而已...(這當然也是一個系統考量因素!)...

而是人家搞硬體支持的人...為什麼還要這麼辛苦的去維護兩套系統軟體介面呢?!

...

當然啊...您當然還可以堅持繼續堅持...您當然也可以在浩瀚的網路世界裡尋求解答...

並找到觀點相同的人來支持、認同自己的堅持....

但是呢?!...當您再拿到另一個硬體平台....然後人家又是提供VC 範例程式時...

您可能還要再一次掙扎....我要不要乾脆只要寫韌體就好了...

要不然我要去學IC 設計啊...我不要寫軟體啊.....嗚~嗚~~嗚~~~

只要未來跟硬體有關的程式...相信我說:您一定還會碰到另一個VC...

而您所堅持的VB會越來越少見了....

在以前Cypress 裡...我已經看過他所原廠所提供的VC...

我最近看到另一家USB Controller 所提供的...也是VC...所以啊...

您的問題對我來說:不是問題...而是您自己要面對的問題...

如果您還年輕...(應該都比版主學MFC 時...鐵定都還年輕!)...

這個是您自己要好好思考的問題了!...

----最後,版主給您一個很明確的答案:

當您會用VC 寫程式、Debug程式時...您所問的問題應該就自然知道答案了。

清楚吧!.......

---

4 則留言:

  1. 其實微軟對VB也是一直有更新,現在好像到VB7還是VB8吧?不過VB的定位本來就不是做硬體控制的,在VB6時甚至連multithreading也不支援,不過到也不是無法可解,比方說把VC提供的範例包成
    DLL給VB端呼叫就是一種方法

    只有一種情形下可能無解,就是用VB去寫Windows Driver,這應該是不可行的

    回覆刪除
  2. 賈老師的真老公2008年10月11日 下午6:32

    專家一開口~就是不同凡響....
    大哥您雖然也是寫C 語言的人,說起來還是蠻客觀的!---不錯。
    那以專家您的意見...有人用 Basic 寫Embedded system 的OS 嗎?!...
    像那些 什麼eCOS 或是uCOS...等等...有Basic 這種程式語言寫的嗎?!...
    ----
    至於,Windows Driver 來說:...應該就如您所說的...VB 可能真的比較難了!
    早期寫硬體Driver 有時還得動用 組合語言(MASM)的...現在可以用C 寫已經算是不錯了。
    現在又一些USB 介面 像是那些 HID 等這種OS都已經是直接支援Driver 的程式...
    人家所附的程式就直接跟Windows XP DDK 直接 Combine 在一起,
    在組譯時,就直接組譯連結了...還包DLL 太累了。...
    我最近有玩到這一塊...改天在另闢專文討論!
    謝謝!您的留言....
    PS: 您的網頁,也該更新一下了吧...人家要跟您討論只能從留言版留言...太辛苦了!
    ---我也知道您很忙....應該還是先交女朋友比較重要吧!
    好好加油!... =D> ...

    回覆刪除
  3. Chamber大大~

    當然我指的是Windows平台(uC/OS-II,eCos就岔題太遠了),M$對Basic 之所以情有獨衷,因為Bill Gates就是靠一隻Basic Compiler(還是Interpreter?)起家的,飲水思源當然要對Basic多照顧一些(連office都把Basic當成內建script)

    uC/OS-II, eCos這種就不用講了,當然是用C開發的...不過這也不代表沒有人用其他種語言寫OS,比方說一個很冷門的語言叫Forth(不是Fortran)也是有人拿來寫embedded system(台灣甚至還有Forth協會),uC/OS-II,eCos會用C寫想當然爾IC廠商除了assembler外唯一提供的99.999%都是C compiler,而能把指標運用自如的也只有C(不然其實Pascal也有指標,理論上也可以寫OS,不過他的指標就太彆扭沒C那麼好用),所以假設Basic的指標夠強理論上應該也是可以寫OS(所以其實到VB7也改得非常不像原本的VB了,造成不少人困擾)

    不過uC/OS-II, eCos也並非純C語言,裡面還是有少部份assembly,雖然廠商用增加額外C關鍵字的手法想辦法減少assembly需求,不過我個人覺得assembly還是必要之惡,不然往往會寫出讓人啼笑皆非的C code,ARM很多人以為不用學assembly,但是去翻ARM Development Guide,裡面C example還是會附上組譯過後對應的assembly,告訴user你的C code假如這樣寫效率可能會變差,原本5行變成50行,所以assembly還是得學的

    不過要是cypress提供的是Windows Driver Source Code那就非得學VC不可了,不過您老提的那些朋友應該只是想做個UI去控制硬體,無奈廠商提供的都是VC Example(可能還是用MFC做的UI),一看傻眼不知道要怎麼改來用,或是用VB去call C API跑出一堆問題不知道該怎麼解(其實Basic call C還有一點學問在),當然用VC+MFC就沒有這種參數傳遞的問題在

    我個人也是覺得在台灣電子業寫軟體還是得把VC+MFC學會,起碼我現在就要維護2,3隻用MFC寫的工廠測試程式(連測試程式都用VC寫了,更不用講IDE那種東西),假如不是之前有花一些功夫研讀MFC大概是連改都改不動吧?

    至於女朋友~~這您老就不用擔心了(革命10次終於成功了),倒是得多關心另一位Johnny吧? :D

    回覆刪除
  4. 賈老師的真老公2008年10月12日 下午2:53

    我想大家常來敝網站所提的有關USB問題,
    我們這位 happosai 大哥的回答最貼切了,大家可以參考參考:
    ....

    ...,不過您老提的那些朋友應該只是想做個UI去控制硬體,無奈廠商提供的都是VC Example(可能還是用MFC做的UI),一看傻眼不知道要怎麼改來用,或是用VB去call C API跑出一堆問題不知道該怎麼解(其實Basic call C還有一點學問在),當然用VC+MFC就沒有這種參數傳遞的問題在

    我個人也是覺得在台灣電子業寫軟體還是得把VC+MFC學會,起碼我現在就要維護2,3隻用MFC寫的工廠測試程式(連測試程式都用VC寫了,更不用講IDE那種東西),假如不是之前有花一些功夫研讀MFC大概是連改都改不動吧?
    ....

    回覆刪除