Windows嵌入式疑難問題解答
1.問:我的Activesync能連接上WINCE,在移動設(shè)備中有顯示W(wǎng)INCE的內(nèi)容,也能復(fù)制文件到WINCE,但是EVC不能與WINCE通信. 感覺很奇怪,不知道是什么原因引起的,大家指點(diǎn)一下了.搞了一天都沒有找到什么原因.。
答:由于沒有看到你的實(shí)際運(yùn)行環(huán)境,所以只能按照以下步驟來排查:
通常我們在EVC下調(diào)試WinCE或應(yīng)用程序有以下三種連接方式:
(1): KITL + CESH SERVER
(2) ActiveSync + ActiveSync
使用這種方式調(diào)試的時候,首先需要注意保證開發(fā)機(jī)和目標(biāo)機(jī)上的ActiveSync版本是一致的。其次確認(rèn)你的WinCE系統(tǒng)支持Activesync組件。這項(xiàng)功能是在構(gòu)建WinCE的時候添加的。連接的絕提設(shè)置方法是:在Tools下打開Configure platform Manager,選擇你對應(yīng)的SDK,然后點(diǎn)擊Properties選項(xiàng),打開Device Properties對話框,Transport:選擇TCP/IP Transports for windows Ce,
startUp選擇Microsoft ActiveSync,先Test一下,如果正常會提示OK。另外注意TCP/IP...的configure中的HostIp要選擇Configure automatically over serial。
(3)TCP/IP + MANUAL SERVER
其中最理想的是最后一種。脫離開發(fā)環(huán)境,速度快,并且不占用任意端口功能。需要注意的是調(diào)試前最好安裝工程需要的SDK。
另外,不知道你是不是自己修改了WinCE下相關(guān)的驅(qū)動?這也可能導(dǎo)致不能正常的連接到WinCE。
2.問:公司找的外包軟件公司需要direct3d功能,對此不了解,所以有幾個問題:
(1)外包公司一直提到direct3d.dll,而WINCE5.0中有d3dm.dll,兩者之間的關(guān)系是類似于MDD與PDD之間的關(guān)系還是同等關(guān)系?
(2)看他們軟件介紹是需要Pocket PCWindows Mobile 5,那么WINCE5.0上能夠?qū)崿F(xiàn)嗎?
(3)WINCE5.0中的Direct3D Mobile組件是要添加的吧?Direct3d Mobile Reference Driver組件是參考驅(qū)動嗎?我在定制的工程中加了這兩個組件,并沒有產(chǎn)生direct3d.dll,只有d3dm.dll
(4)除此之外是否我的BSP中display的驅(qū)動還要支持direct3d.dll?
答:WinCE5.0能夠支持direct6.0的所有功能,而目前最新的WinCE6.0 R2版本能夠支持direct6.0的所有功能和direct9.0的部分功能(即二維圖像部分)。在2009年即將發(fā)布的R3版本中將會集成最新的Arclmy,就是類似于Silverlight的效果,開發(fā)過程也大大的簡化。
Pocket PCWindows Mobile 5是基于WinCE的定制版本,如果需要在WinCE中添加Direct3D的功能,是需要把Direct3D相關(guān)的組件添加到你的WinCE中去的。如果你的硬件平臺能夠支持direct3d加速,那么最好把direct3d的支持添加到你的BSP中。
3.問:我需要給服務(wù)請求的密碼進(jìn)行MD5加密,該怎么辦呢,好像SDK沒有提供類似的加密函數(shù)吧。
答:SDK中可能確實(shí)不會提供MD5加密的函數(shù),不過你可以在網(wǎng)上找一份PC的代碼,移植到EVC下就可以了。也可以將移植好的MD5加密的函數(shù)整合到你的SDK中,根據(jù)需要而定。
4.問:WinCE上的電子書程序如何寫?請給一些思路或鏈接?
答:可以采用一些現(xiàn)成的第三方控件來完成電子書的主體顯示,這樣可以不用關(guān)心文檔格式。也可以自己來編寫代碼,基本和PC機(jī)上一樣,建立自己的程序,計(jì)算文字的寬高,在VIEW中繪制,需要注意的就是翻頁的計(jì)算和頁面的刷新。
在網(wǎng)上搜一下可以找到很多這樣的源碼以供學(xué)習(xí),例如:
http://www.pudn.com/downloads29/sourcecode/comm/windows_mobile/detail92513.html
5.問:WINCE5.0的BSP(不是由4.2升級成5.0),240*320的屏,請問要把分辨率改為480*640的話,需要修改哪些文件,哪些參數(shù)呢?
答:修改下s3c2440a_lcd.h、InitDisplay()函數(shù)和s3c2440disp.cpp, 就可以實(shí)現(xiàn)輕松實(shí)現(xiàn)各種尺寸屏的切換。主要就是修改init.c文件中的InitDisplay()函數(shù):但是需要根據(jù)你的LCD芯片手冊來配置相應(yīng)的參數(shù)。
6.問:S3C6410+WINCE6.0的系統(tǒng)大家有沒遇到這樣的情況----系統(tǒng)跑起來后幾分鐘/十幾分鐘后掛掉(死了),串口也沒有什么報錯消息輸出!
答:首先可以在每個可能出問題的驅(qū)動中輸出調(diào)式信息,檢查原因。另外就是重新編譯每個DEBUG版本的驅(qū)動看看。有沒有錯誤信息輸出。
在網(wǎng)上看到以前有過這種情況,是有中斷不停的產(chǎn)生就會造成這種情況。如果是系統(tǒng)崩潰,異常一般會輸出信息的。 現(xiàn)在沒有錯誤信息,極有可能是這種情況。
建議采取排除法,逐一把驅(qū)動卸載,看是哪個驅(qū)動出了問題。
問:現(xiàn)在項(xiàng)目中需要獲得真機(jī)的手機(jī)型號,可是找遍了API都沒找到能獲得手機(jī)型號的API。上網(wǎng)搜索也沒得到相關(guān)的解決辦法。但感覺這個功能該是有API支持的。
答:如果是山寨機(jī)可能會不行,如果OME廠商沒有按約束規(guī)定寫,你也不能獲取到. 如果HKEY_LOCAL_MACHINESecurityInternet ExplorerUser AgentCustomBase和手機(jī)中。設(shè)置—系統(tǒng)—設(shè)備信息-“特性識別”是一致的,你通過過注冊表就可以讀出來。
問:條件有限,只能在一臺機(jī)子上裝CE5和CE6的開發(fā)環(huán)境。并且由于種種原因,已經(jīng)裝好了CE6,此時再裝CE5會不會有什么問題? 如果真的會有問題的話,怎么做可以避免掉這些問題呢?
答:CE5 和 CE6 有很大區(qū)別建議不要裝在一起,可以用虛擬機(jī)來安裝兩個不同的版本。如果一定要裝在同一臺機(jī)器上的話,也是可以的。CE5開發(fā)工具使用的是Platform Builder,而CE6則是整合在Visual Studio 2005開發(fā)環(huán)境下的,注意,2008不行。安裝的順序:
1.安裝CE5,Platform Builder 5.0
2.安裝Visual Studio 2005
3.安裝Visual Studio 2005 Service Pack 1
4.安裝CE6,Platform Builder 6.0
5.安裝CE6的SP1,Platform Builder 6.0 Service Pack 1
6.VS2005 Update for Vista
安裝完成后可能會出現(xiàn)CE6和CE5在Platform Builder的Connectivity Options上的沖突問題,大家可以參考我博客中的文章來解決這個問題:http://lzg-ad.blog.sohu.com/118092446.html
問:我的用戶態(tài)驅(qū)動和內(nèi)核態(tài)ISR要對I/O設(shè)備協(xié)同操作才能完成, 但我的IO設(shè)備是這樣工作的:
IO設(shè)備只有一個地址,內(nèi)部有16個寄存器,
要對設(shè)備中的寄存器讀寫時, 要先往IO 端口中寫寄存器號,再在這個端口讀寫,(有點(diǎn)像對COMS的操作)
這就要保證一個讀寫操作要兩次IO,并且一定要成對出現(xiàn),就是這兩個操作要是原子的,不可拆分;
如果IST正剛往端口中寫了寄存器號,還沒來得及寫數(shù)據(jù),這時中斷來了,ISR也要操作設(shè)備,那不是亂了,
這種問題怎么解決呢?有沒有什么信號量、互斥量什么的可以用?
答:看看ISR 和 IST的協(xié)助方式,就知道如何解決這種問題,在網(wǎng)上也有人已經(jīng)回答了這個問題:
1. IST 在操作時, 通常還沒 call InterruptDone(dwSysIntr);, 故 ISR 不會產(chǎn)生中斷, 就沒有這個問題了.
2. ISR 先把 Index Register 讀出後保存後再修改, 離開前再改回原值.
3. 將 IST 要讀的值全部放在 ISR 內(nèi)讀完, 再用 Share Memory 的方式, 送給 IST.