找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2879|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

開發(fā)項(xiàng)目的準(zhǔn)備工作 - 一個(gè)字,累

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:90014 發(fā)表于 2015-9-13 16:50 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
      前面說了,因?yàn)楣ぷ鞯男枨,幾乎有一個(gè)多月了,每天都在看這些與USB,Windows 系統(tǒng)相關(guān)的資料。說起來微軟的東西的最大好處就是資料齊全,你可以不用出門,就在MSDN上獲得很多詳細(xì)的技術(shù)資料說明。不過因?yàn)橘Y料是E文的,而且每個(gè)都很長(zhǎng),鏈接巨多,不知道會(huì)有多少人能夠耐心看下去。不管怎么說,就是看過了,也怕很快就會(huì)遺忘。因此上趁自己還有點(diǎn)印象,就把看到的內(nèi)容記下來。要是以后再要用了,也好能夠明白的快一點(diǎn),不需要吃二次苦,受二次罪了。
先把MS的鏈接放在這里,要是有不確定的地方了,可以隨時(shí)訪問MS的東西。嘿嘿。
http://msdn.microsoft.com/en-us/library/ms791126.aspx
這是MSDN中有關(guān)設(shè)備的類的說明。
0. 我的學(xué)習(xí)目標(biāo)
其實(shí)我的學(xué)習(xí)目標(biāo)不是如何編寫Windows系統(tǒng)下的設(shè)備驅(qū)動(dòng)程序,因?yàn)槲覜]有開發(fā)新的設(shè)備。我只是為了搞清楚在我的系統(tǒng)中,都有哪些設(shè)備;他們之間都是什么關(guān)系;設(shè)備的狀態(tài)怎樣;如何單獨(dú)控制其中的一個(gè)或幾個(gè)設(shè)備的啟動(dòng)/停止/卸載,或者單獨(dú)控制使用某一個(gè)設(shè)備的特殊功能。能夠達(dá)到這樣的目的,這就夠了。
學(xué)習(xí)的前提:在大學(xué)時(shí)讀的專業(yè)不是計(jì)算機(jī)專業(yè),計(jì)算機(jī)只是業(yè)余愛好,因此上,雖然從1991年工作以來就開始使用計(jì)算機(jī),但編程水平一直限制在使用簡(jiǎn)單的BASIC語(yǔ)言的水平。1992年的時(shí)候,看到別人使用Turbo C 2.0,覺得很羨慕。那時(shí)就開始接觸12張5'盤的Borland C++ 3.0,但是開始使用的是 Borland C++3.1。這是開始接觸C/C++語(yǔ)言的開始?上У暮埽(dāng)時(shí)對(duì)于MS的C6/C7很反感,沒有看到其MFC有什么特別的優(yōu)勢(shì)。但是到了1995年前后,開始接觸到VC2.0,4.0,也是因?yàn)锽orland C++4.0/4.5把我們給拋棄了。可惜錯(cuò)過了最佳的學(xué)習(xí)機(jī)會(huì),當(dāng)時(shí)的工作方向也有所轉(zhuǎn)移,因此上對(duì)VC就沒有深入了解下去,直到現(xiàn)在都是一知半解。
還好的是,Windows的底層設(shè)備驅(qū)動(dòng),大都不涉及到 VC++及MFC類庫(kù)的事情,就憑借當(dāng)時(shí)BC++3.1的那些基礎(chǔ),這個(gè)工作還是能夠做下去的。只是一開始要完成一個(gè)簡(jiǎn)單的程序編譯,都不是那么容易。這個(gè)另外找話題再說了。
1. 平臺(tái)選擇
為了便于最終應(yīng)用的界面開發(fā),我選擇的目標(biāo)程序語(yǔ)言是Visual BASIC 6.0這個(gè)開發(fā)平臺(tái)。而為了便于理解Windows系統(tǒng)內(nèi)部的操作過程,必須安裝 VC++6.0/VS2005/VS2008這樣的底層操作跟蹤平臺(tái)。因此我采用的是 Windows XP SP3中文版,VB6中文SP6 + VS2008SP1的平臺(tái),另外
安裝的是Windows DDK 2600 + WDK R6001的DDK開發(fā)工具。這樣,最終的系統(tǒng)中,只是采用部分Windows API就可以在VB6上實(shí)現(xiàn)想要的對(duì)于Windows 底層驅(qū)動(dòng)的操作,而用戶界面上,使用VB編寫最為簡(jiǎn)單方便。
2. 技術(shù)瓶頸
不像Windows 系統(tǒng)的用戶層API,對(duì)于操作Windows系統(tǒng)設(shè)備的API,在VB6中并沒有給出可以參考的 API Viewer 或?qū)牍ぞ;蛟SMS認(rèn)為既然要操作底層驅(qū)動(dòng),沒有人會(huì)用VB這樣的入門級(jí)語(yǔ)言去做的。因此上對(duì)于如何正確的使用 Windows API,如何自定義其中用到的數(shù)據(jù)結(jié)構(gòu)及常數(shù),是這個(gè)項(xiàng)目的第一個(gè)難點(diǎn)。
目前的 Windows 系統(tǒng)大部分都在內(nèi)部采用了 Unicode 編碼,而在系統(tǒng)的語(yǔ)言定義中,依然有多字節(jié)MDBS格式,在大部分API中,都會(huì)存在Unicode 和MDBS格式兩種格式的API。必須選擇正確的API才能取得正確的結(jié)果。這個(gè)問題在用VS2008重新編譯用VC6編寫的程序時(shí)尤為突出,明明看到輸入了正確的參數(shù),偏偏得到的結(jié)果是錯(cuò)的,就是看不到任何問題。通過對(duì)反匯編代碼的跟蹤發(fā)現(xiàn),直接傳遞給API的Unicode必須經(jīng)過轉(zhuǎn)換后才能取得想要的結(jié)果。而對(duì)于VB6來說,問題剛好相反。VB6自身采用的是Unicode 格式,但是API返回的數(shù)據(jù)大部分是ASCIIZ的格式,不是VB想要的String類型,又必須經(jīng)過另外的轉(zhuǎn)換,才能夠正確獲得。對(duì)于字符串是這樣還好,而對(duì)于很多數(shù)組類型的數(shù)據(jù),則操作要格外小心了。
這個(gè)工作的開始1-2周,幾乎全部是忙著這些基本的東西。沒有其它辦法,只能多看別人的編程資料,一個(gè)函數(shù)一個(gè)函數(shù)的調(diào)試,摸索Windows API在VB中如何使用的方法。只有一個(gè)字 - 累。
搞清楚了基本工具的關(guān)系,這個(gè)問題并沒有順利。因?yàn)閺默F(xiàn)有的資料來看,對(duì)于設(shè)備的操作方面的實(shí)踐特別少,個(gè)別的例子都不夠深入,只是示例以下的一種用法,但是其中的每個(gè)參數(shù)的
取值都是什么,能夠得到什么樣的結(jié)果,都是不得而知。在這幾天的實(shí)踐中,不知道試了多少中不同的組合,除了多少次錯(cuò)誤。最終沒有辦法,還是回到基礎(chǔ)上來 - 慢慢的看MS的設(shè)備開發(fā)資料。自己最怕的部分還是無法躲過去,沒有捷徑可以走。原來想著能夠從別人的例子中找出自己想要的東西,湊到一起就算完事的想法,根本就行不通。這就成了這個(gè)工作越做越累得原因 - 本來想偷懶,沒有想到要付出的更多。這也好了,不得不回頭認(rèn)真學(xué)習(xí)MS的資料了。其實(shí)在前1-2周的實(shí)踐中,將有關(guān)USB的資料,也只有細(xì)細(xì)的拜讀了。
從畢業(yè)參加工作到現(xiàn)在,已經(jīng)很少這么樣的投入看資料了。其它還好,只是晚上睡覺也后,滿腦子還是怎么調(diào)用,怎么安排流程的問題。晚上睡不踏實(shí),白天有時(shí)也難免不能精力集中了。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表