www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀] 經(jīng)過前兩次的邊做邊學(xué),我們已經(jīng)創(chuàng)建并可以自由修改自己的平臺了,這次我平來補(bǔ)充一點(diǎn)理論知識,以便加深對CE生成過程的了解。在此之前,需要說明的是CE的目錄結(jié)構(gòu)是很龐大

 經(jīng)過前兩次的邊做邊學(xué),我們已經(jīng)創(chuàng)建并可以自由修改自己的平臺了,這次我平來補(bǔ)充一點(diǎn)理論知識,以便加深對CE生成過程的了解。在此之前,需要說明的是CE的目錄結(jié)構(gòu)是很龐大而復(fù)雜的,在以后的工作中很多事情會取決于你對目錄結(jié)構(gòu)的了解程度,在此,CE5的文件夾結(jié)構(gòu)未發(fā)生大的改變,因此想了解此部分內(nèi)容的朋友可直接參閱本人的《WinCE實(shí)驗(yàn)教程》相關(guān)部分。與CE4稍有不同的是在CE5中你自己的平臺不在存放于Public文件夾中了,而是專門有一個(gè)PBWorkspaces的文件夾,這樣更加方便管理且結(jié)構(gòu)清晰了。

我們重點(diǎn)要說的還是CE的生成過程,即你在編譯平臺的時(shí)候Platform Builder到底為你做了些什么?

實(shí)際上,IDE在生成CE的過程當(dāng)中共經(jīng)歷了四個(gè)階段,分別是Sysgen、Build、Copy、Make,即組件生成階段,編譯階段,Release文件夾復(fù)制階段和鏡像打包階段。下面我們就分階段來說明一下。

在Public文件夾下是CE為我們提供的可用組件,我們定制自己的平臺是通過Platform Builder做的選擇就是從這里面選擇了一部分需要的組件。在這些文件夾中,包含了所有可用的庫文件,頭文件,DEF文件,當(dāng)然也包括了所有可導(dǎo)出的函數(shù)說明。在Sysgen階段要做的就是從中選擇我們自己的平臺需要的頭文件,庫文件和導(dǎo)出函數(shù)以創(chuàng)建我們自己平臺需要的組件。它所完成的頭文件會以C++注釋的方式加以標(biāo)記,這樣它就可以選擇需要的部分來導(dǎo)出,最后把所有需要的庫進(jìn)行鏈接就得到了我們自己平臺所需要的東西了,它就放在Wince500\pbworkspaces\%ProjectName%\WINCE500\%CPU_TYPE%_x86\cesysgen文件夾下。

經(jīng)過上一階段后,需要的頭文件庫文件就準(zhǔn)備好了,但這只是系統(tǒng)組件部分,我們的平臺還有各種設(shè)備驅(qū)動程序等其他的東西,這些就要在Build階段來完成了。

整個(gè)Build階段都是在圍繞著DIRS文件和SOURCES文件來進(jìn)行,前者決定了哪些文件夾要被編譯,后者決定了哪些文件要被如何編譯,也就是說,此階段要完成的就是各種源程序的編譯過程。下面我們就重點(diǎn)看一下這兩種文件的內(nèi)容。

DIRS文件可以在很多文件夾中找到,它列出了要參與編譯的子文件夾,內(nèi)容大體如下:

DIRS_CE= ceddk regenum pcibus 這樣,build.exe在編譯的時(shí)候就可以通過它來逐層找到要參與編譯文件夾了。至于其中的OPTIONAL_DIRS、DIRS_NTANSI等項(xiàng)目的含義可以通過幫助查到。

同樣,SOURCES文件對參與編譯的源程序的編譯方式做了規(guī)定,例如通過TARGETNAME規(guī)定編譯后的名稱,通過TARGETTYPE規(guī)定編譯的類型是EXE,DLL還是LIB,通過DLLENTRY規(guī)定DLL文件的入口點(diǎn),通過INCLUDES規(guī)定編譯過程中需要的頭文件,通過SOURCES規(guī)定參與編譯的源文件等等。這些宏的用法在幫助文檔里有更加明細(xì)的說明,在這里只要理解這種編譯機(jī)制就可以了。

接下來,所有的編譯都有完成了,DLL也好,EXE也好,都是目標(biāo)平臺自有的了,下一步就是一個(gè)Copy過程,也就是將你的項(xiàng)目文件夾下的WINCE500文件夾下的內(nèi)容復(fù)制到RELEASE文件夾下,這步就沒什么可說的了。

最后一步就是打包了,即將已經(jīng)準(zhǔn)備好的目標(biāo)平臺的文件打包成NK.bin這樣的操作系統(tǒng)鏡像文件。在這個(gè)過程當(dāng)中,一個(gè)完成了文件合并、注冊表壓縮、資源文件替換和打包四個(gè)子過程。

文件合并階段重點(diǎn)對以下文件進(jìn)行合并:

--所有的.bib文件合并成CE.BIB

--所有的.reg文件合并成REGINIT.INI

--所有的.dat文件合并成INITOBJ.DAT

--所有的.db文件合并成INITDB.INI

知道這幾個(gè)合并以后便于你在RELEASE下查找你做的修改是否確實(shí)被置入了目標(biāo)平臺。

注冊表壓縮會將REGINIT.INT文件壓縮成DEFAULT.FDF文件。

資源替換就是將EXE或DLL中的資源替換成本地語言如簡體中文。

接下來才是把這些CE.BIB等二進(jìn)制文件制作NK.BIN文件,這才是我們需要的文件,不過在CE5中好像可以在項(xiàng)目設(shè)置中改變這個(gè)文件的名稱,讀者可以自己試試。

以上說的這些編譯過程,在Platform Builder中的Build OS菜單下分得比較明確,這一點(diǎn)比CE4要好得多,你可以自己掌握讓它單獨(dú)執(zhí)行某一步驟。如果你修改了某個(gè)組件的源程序,也可以右擊這一組件然后單獨(dú)編譯此組件,最后再生成Image,總之,靈活性是比較不錯(cuò)的了。

同時(shí),經(jīng)過以上的分析也可以看出來,Platform Builder這個(gè)IDE在幫助生成CE時(shí)基本上是依賴于文件夾結(jié)構(gòu)和那些文本文件以及批處理文件的,因此,對于文件夾結(jié)構(gòu)還是要盡量的熟悉。同時(shí)也證明那些總說批處理文件沒用的人的無知,在微軟的操作系統(tǒng)和開發(fā)工具中,批處理文件是至關(guān)重要的,說它無用的人只是由于自己的水平不夠而已。

好了,這次我們學(xué)得多做得少,不過這些知識還是有必要了解的,別忘了對照你的文件夾結(jié)構(gòu)來學(xué)習(xí)哦!

經(jīng)過以前的學(xué)習(xí),我們已經(jīng)掌握了生成CE的過程及編譯的幾個(gè)階段,這次我們再來了解一下Platform Builder中為我們提供的組件包的管理方式以及如何管理自己的組件。

在Platform Builder(以下簡稱PB)中的右側(cè)有一個(gè)"Catalog"窗口,其中列出了所有可供使用的組件,我們可以看到其內(nèi)容是非常之多的,現(xiàn)在的疑問就產(chǎn)生了,PB是如何管理這些組的呢?如果我有一個(gè)新設(shè)備的驅(qū)動組件要如何才能放到這個(gè)組件包窗口中呢?如果我開發(fā)了一個(gè)設(shè)備驅(qū)動以供其他人使用那我要如何才能發(fā)布我的驅(qū)動呢?下面,我們就來解決這些問題。

在PB中,這些組件的管理都是能過一種組件文件(.cec文件)來實(shí)現(xiàn)的。在CE4中,系統(tǒng)自帶的CEC文件都位于PB的安裝文件夾下的CEC文件夾,我們可以在那里很容易的找到它們,但是在CE5中,它的位置變了,你可以在WINCE500\PUBLIC\COMMON\OAK\CATALOG\CEC下找到他們。

如果你開發(fā)了OAL,設(shè)備驅(qū)動或其他組件,你就可以能過CEC文件來把它們加入到PB中。通過在PB環(huán)境中導(dǎo)入CEC文件,其他的平臺開發(fā)人員就可以使用這些組件了。CEC文件是用來描述組件信息的文本文件,它包括了一些塊的列表,主要包括以下四種信息塊:

--CECInfo塊,用來描述此CEC文件的信息,每個(gè)CEC文件只能含有一個(gè)此信息塊,從中你可以看到該CEC的名稱、GUID、版本、供應(yīng)商和簡要描述。

--ComponentType塊,它描述了最高級別的組件類型,在一個(gè)CEC文件中可以有多個(gè)此信息塊,它通過Group,RequiredCEModules,ExcludeWhenSet,MaxResolvedImplsAllowed等條目來描述此組件所在的組,需要的CE組件,排除的組件及允許在一個(gè)CE平臺中存在的數(shù)量等信息。[!--empirenews.page--]

--Implementation塊,用來描述此組件在編譯時(shí)需要的各種信息,每個(gè)CEC文件中也可以有多個(gè)此信息塊,它是 ComponentType塊的一部分,其中的BSPPlatformDir,Children,OptionalChildren,DefaultDrivers,ExcludeWhenSet,FeatureVariable,ImplSize等條目的具體含義可以在PB的幫助文檔中找到,在此不一一細(xì)述。

--BuildMethod塊,描述了編譯的方法,也是ComponentType塊的一部分,為了加深對上一次編譯階段的理解,我們詳細(xì)說一下此塊中Step和Action兩個(gè)條目。

Step用來說明編譯此組件將要在哪一步中進(jìn)行,對照上一次的內(nèi)容,它的取值為:CESYSGEN,BSP,BUILDREL,MAKEIMG。所以如果你自己開發(fā)了OAL或驅(qū)動之類的組件,你就需要自己決定讓PB在什么階段來編譯它,就要在CEC中通過Step來描述。其實(shí)在具體的編譯過程中,上述的每一階段又有PRE和POST兩個(gè)子階段,也就是說對于每個(gè)階段其實(shí)都有三步,即PRECESYSGEN,CESYSGEN,POSTCESYSGEN,PREBSP,BSP,POSTBSP……一般不用具體到這樣詳細(xì)的程度。

Action則描述了組件編譯的行為,有效的行為與編譯階段的對應(yīng)關(guān)系如下表所示:

Action CESYSGEN BSP BUILDREL MAKEIMG
#BUILD(DIR,...) No Yes No No
#BUILD(SOURCES) No Yes No No
#BUILD(MAK,...) No Yes No No
#CUSTOM(...,...) No Yes Yes No
#COPY(...,...) Yes No Yes No
#ENV(...,...) No Yes No Yes
#SRCCODE(...) No No No No

這些Action的意義如下:

--#BUILD():使用DIRS文件或SOURCES文件或MAKE文件來調(diào)用build.exe,在完全編譯平臺的時(shí)候被使用;

--#CUSTOM():在編譯的時(shí)候運(yùn)行批處理文件或可執(zhí)行文件;

--#COPY():從一個(gè)位置復(fù)制文件到另一個(gè)位置;

--#ENV():設(shè)置環(huán)境變量;

--#SRCCODE():指定了包含源程序文件的文件夾,只在編譯所選組件時(shí)應(yīng)用。

對于以上每個(gè)條目的具體用法可以參閱PB的幫助文檔。為了獲得感性認(rèn)識,我們最好用記事本打開幾個(gè)CEC文件來看一下。比如打開serial.cec看看串口驅(qū)動組件的實(shí)現(xiàn)方法等。

以上我們了解了CEC文件,我們再來解決后面的問題,即假設(shè)我從別的供應(yīng)商處拿到了一個(gè)設(shè)備的驅(qū)動程序,它帶了CEC文件,那么我要如何把這個(gè)組件加入到PB的組件包中呢?這個(gè)問題其實(shí)很簡單,只要在PB的File菜單下使用"Manage Catalog Items"命令即可。在這個(gè)彈出的對話框中的內(nèi)容和使用方法就不用我說了吧。

再來解決下一個(gè)問題,我要如何為我開發(fā)的組件編寫CEC文件呢?這個(gè)也好辦,在Tools菜單下使用"CEC Editor"命令即可,如果不會寫,可以先打開一個(gè)現(xiàn)有的CEC文件看看是如何組織的,然后再仿照它來寫自己的就可以了,別忘了寫完后要保存哦,同時(shí)也要注意GUID的問題。

此次內(nèi)容的最后,我們再來看一下BSP。什么是BSP呢,其實(shí)就是為某一種開發(fā)板實(shí)現(xiàn)了設(shè)備驅(qū)動的軟件包,它包含了源程序文件,二進(jìn)制文件等,還有OAL適配層,Bootloader和其他有關(guān)的配置文件。比如CE5的評估版就帶了x86的BSP,AMD的BSP和Emulator的BSP。[!--empirenews.page--]

通常對BSP的操作都在BSP向?qū)е羞M(jìn)行,它位于Platform菜單中,利用它可以新建自己的BSP,復(fù)制現(xiàn)存的BSP,修改現(xiàn)存的BSP或創(chuàng)建全局的驅(qū)動程序。如果你準(zhǔn)備好了BSP所需要的那些東西就可以用它來生成你的BSP了,它會選擇必須的CE內(nèi)核組件。

好了,已經(jīng)寫了不少了,唉,寫這東西真是費(fèi)時(shí)啊,不說了,希望我們能一起獲得更多的知識。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動力設(shè)備,其驅(qū)動電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護(hù)是驅(qū)動電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術(shù)之一是電機(jī)驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動汽車的動力性能和...

關(guān)鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設(shè)計(jì)工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關(guān)鍵字: LED 驅(qū)動電源 開關(guān)電源

LED驅(qū)動電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動電源
關(guān)閉