国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
嵌入式WinCE開發(fā)中可能遇到若干的問題

文章主要是總結(jié)在使用嵌入式WinCE開發(fā)中可能遇到若干的問題,以及他們的解決方法,供大家來參考。

1. 如何加入或刪除BSP中的模塊。

這里以display驅(qū)動(dòng)為例來講解。

BSP的根目錄下有一個(gè)$(platform. name).bat文件。里面定義了一系列的開關(guān),比如:

  set BSP_NODISPLAY=或set BSP_NODISPLAY=1

我們可以在workspace下的platform.bib中可以看到有這么一段定義:

  IF BSP_NODISPLAY !http://www.srvee.com/embed/apply/qrsWinCEkfzknydrgdwt_55092.html

  S3C2440DISP.dll        $(_FLATRELEASEDIR)\S3C2440DISP.dll          NK  SH

  ENDIF BSP_NODISPLAY !

  因此,如果我們?cè)?bat中定義了BSP_NODISPLAY為1,則S3C2440DISP.dll不會(huì)被加入到NK中。反之,則在生成NK的時(shí)候需要加入S3C2440DISP.dll。

  而如何將display驅(qū)動(dòng)加入編譯列表呢。這就要看WINCE500\PLATFORM\$(platform. name)\Src\Drivers下的dirs文件了。文件里枚舉了要參與編譯的子文件夾。display驅(qū)動(dòng)在Display文件夾內(nèi)。因此,如果要將display驅(qū)動(dòng)加入編譯,則要在dirs文件中加入Display文件夾,反之則去掉。

  再看Display文件夾內(nèi)的內(nèi)容,看到有一個(gè)sources文件,里面有這么一段:

  TARGETNAME=S3C2440DISP

  TARGETTYPE=DYNLINK

  表示將會(huì)生成一個(gè)名為S3C2440DISP的動(dòng)態(tài)鏈接庫??吹竭@里就明白了,如果要加入或刪除BSP中的驅(qū)動(dòng),要改動(dòng)文件有:

  $(platform. name).bat:添加或修改開關(guān)

  dirs:決定驅(qū)動(dòng)代碼是否參與編譯

  platform.bib:如果在加入新的驅(qū)動(dòng)時(shí),需要修改這里,把新的驅(qū)動(dòng)加入NK中。

2. 在build自己配置的OS時(shí),可能遇到的幾個(gè)錯(cuò)誤及其解決方法

我曾經(jīng)遇到過這個(gè)錯(cuò)誤:

  BUILD: [01:0000000341:ERRORE] PowerButton.obj : error LNK2019: unresolved external symbol SetSystemPowerState referenced in function PWR_IST

  BUILD: [01:0000000342:ERRORE] PowerButton.obj : error LNK2019: unresolved external symbol GetSystemPowerState referenced in function PWR_IST

  BUILD: [01:0000000343:ERRORE] C:\WINCE500\platform\smdk2440a\target\armV4I\debug\PowerButton.dll : fatal error LNK1120: 2 unresolved externals

  根據(jù)信息,看出是在生成driver里的power button時(shí),找不到兩個(gè)函數(shù)。我查了文檔,這兩個(gè)函數(shù)都是聲明在coredll.lib中的,然后我又去看了我生成的coredll.lib,發(fā)現(xiàn)的確找不到這兩個(gè)函數(shù)。檢查了一下OS的組件,發(fā)現(xiàn)原來是因?yàn)闆]有把power management組件添加進(jìn)來。

而下面這個(gè)錯(cuò)誤就明顯了:

  BUILD: [01:0000000445:ERRORE] NMAKE :  U1073: don't know how to make 'C:\WINCE500\PBWorkspaces\tiny_kernel\WINCE500\smdk2440a_ARMV4I\cesysgen\sdk\lib\armV4I\debug\ndis.lib'

  BUILD: [01:0000000447:ERRORE] NMAKE.EXE   -i -c BUILDMSG=Stop.  LINKONLY=1 NOPASS0=1 MAKEDLL=1 failed - rc = 2

  這個(gè)就是因?yàn)闆]有添加NDIS相關(guān)組件,導(dǎo)致在編譯BSP里網(wǎng)絡(luò)相關(guān)的driver時(shí),找不到相應(yīng)的lib而報(bào)錯(cuò)。

3. 沒有生成stepldr.bin和eboot.bin

  檢查一下是不是在debug模式下,如果是,切換到release模式下就可以了。

4. 遇到Error - cannot open input file <...> \postproc\nlscfg.inf

  運(yùn)行Build OS下的Copy Files to Release Directory

5. BLDDEMO: There were errors building (projectname),但error為0

  把clean before building勾上,再sysgen一次。

6.  在編譯BSP的內(nèi)容時(shí),出現(xiàn):

  NMAKE :  U1073: don't know how to make 'C:\WINCE500\public\common\sdk\lib\armV4I\retail\coredll.lib'

  我檢查了log,發(fā)現(xiàn)在此之前是一句

  Linking \WINCE500\PLATFORM\SMDK2440A\Src\Common\Smartmedia\Dll\ directory.

  因此看出是在smartmedia\dll文件夾里面出了問題。打開這個(gè)文件夾,打開里面的sources文件,可以看到coredll.lib被定義為

  $(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib

  而error信息為C:\WINCE500\public\common\sdk\lib\armV4I\retail\coredll.lib

  說明_COMMONSDKROOT等于C:\WINCE500\public\common\sdk,而此時(shí)_COMMONSDKROOT應(yīng)該跟_SYSGENSDKROOT一樣才是對(duì)的。

  在WINCE500\PUBLIC\COMMON\OAK\MISC\sources.default中,有如下定義

  _COMMONSDKROOT=$(_COMMONPUBROOT)\sdk

  _COMMONOAKROOT=$(_COMMONPUBROOT)\oak

  _COMMONDDKROOT=$(_COMMONPUBROOT)\ddk

  _SYSGENSDKROOT=$(_PROJECTROOT)\cesysgen\sdk

  _SYSGENOAKROOT=$(_PROJECTROOT)\cesysgen\oak

  _SYSGENDDKROOT=$(_PROJECTROOT)\cesysgen\ddk

  我又參看了makefile.def中對(duì)_ COMMONPUBROOT的定義:

比較長(zhǎng),共分了四種情況

  (1) OS projects during sysgen

  (2) OS projects during compile

  (3) WINCEPROJ projects

  (4) Other projects.

  其中,在build BSP的時(shí)候,應(yīng)該是屬于第四種。為了便于理解,我去掉了log和注釋。

  !if "$(_IN_CESYSGEN)" != ""

  _COMMONPUBROOT=$(_PUBLICROOT)\common

  __PROJROOT = $(_PROJECTROOT)\cesysgen

  !else if ("$(WINCETREE)" == "winceos") || EXIST($(_PUBLICROOT)\$(WINCETREE)\cesysgen\makefile)

  _COMMONPUBROOT=$(_PUBLICROOT)\common

  __PROJROOT = $(_PUBLICROOT)\$(WINCEPROJ)

  !else if "$(WINCEPROJ)" != ""

  _COMMONPUBROOT=$(_PROJECTROOT)\cesysgen

  __PROJROOT = $(_PUBLICROOT)\$(WINCEPROJ)

  !else

  _COMMONPUBROOT=$(_PROJECTROOT)\cesysgen

  __PROJROOT = $(_PROJECTROOT)

  !endif

  為了搞清楚是怎么回事,我修改了makefile.def,加入MESSAGE語句,看看在build的時(shí)候到底跑到了哪個(gè)分支里。修改完后,進(jìn)入控制臺(tái),進(jìn)入smartmedia\dll文件夾下,輸入build。運(yùn)行完后,打開文件夾下的build.log,發(fā)現(xiàn)跑到了第二種情況里。原來是因?yàn)镋XIST($(_PUBLICROOT)\$(WINCETREE)\cesysgen\makefile這個(gè)條件滿足了。

  其中_PUBLICROOT即WINCE500\public,而WINCETREE在makefile.def中定義為WINCETREE=$(_CURSLMTREE),從set命令中可以查到,_CURSLMTREE是項(xiàng)目名,我的項(xiàng)目名是voip。則整個(gè)路徑就成了WINCE500\public\voip\cesysgen\makefile,結(jié)果這個(gè)路徑恰好存在。看來以后給項(xiàng)目起名字要復(fù)雜點(diǎn),避免這個(gè)沖突,不然真是搞死人啊。

7.    Warning: Image exceeds specified memory size by 4012 bytes and may not run.

  內(nèi)核組件加多了,超出了config.bib原有的定義。因此修改config.bib,增加RAMIMAGE的大小。注意,修改的是workspace下的config.bib而不是PLATFORM下的。我之前直接在platform. builder的parameter view里面修改,結(jié)果改的config.bib根本就不會(huì)被工程訪問到。另外,最好把ROMSIZE也改成RAMIMAGE一樣的大小,這樣NK.nb0就可以裝下整個(gè)NK了,否則會(huì)生成NK.nb1甚至更多。

  但有可能在下載NK.bin的時(shí)候會(huì)發(fā)生錯(cuò)誤,原因是eboot中有兩個(gè)宏定義要和config.bib保持一致。ROM_RAMIMAGE_START和ROM_RAMIMAGE_SIZE。這兩個(gè)宏要和config.bib中的RAMIMAGE的相關(guān)定義保持一致。這樣改完后,就可以正常運(yùn)行了。

8.   直接用DNW將.nb0下載到RAM中無法運(yùn)行

  檢查一下DNW的configuration中的download address,要和你下載的.nb0對(duì)應(yīng)的.bib中RAMIMAGE的起始地址保持一致,但RAMIMAGE規(guī)定的是虛擬地址,而DNW的download address是物理地址,要通過查找MMU映射表,將其轉(zhuǎn)換為物理地址。CE5.0上的映射表在oemaddrtab_cfg.inc文件中

9.要使用ActiveSync除了SYSGEN_AS_BASE之外,還需要哪些其他組件才能使用

  SYSGEN_USBFN_SERIAL和SYSGEN_PPP。當(dāng)然,如果你想使用EVC上的遠(yuǎn)程調(diào)試工具,還需要加入Platform. Manager組件。

10.修改OAL中的編譯開關(guān)

  log.c中,定義了:

  UINT32 g_oalLogMask = OAL_LOG_ERROR|OAL_LOG_WARN|OAL_LOG_INFO;

  oal_log.h中,定義了

  #define OAL_LOG_ERROR       (0)

  #define OAL_LOG_WARN        (1)

  #define OAL_LOG_FUNC        (2)

  #define OAL_LOG_INFO        (3)

  然后#define OALZONE(n)          (g_oalLogMask&(1<<n))

  那我就覺得奇怪了,為啥在定義g_oalLogMask的時(shí)候,不是移位了再或呢?我先嘗試了一下,將定義修改為UINT32 g_oalLogMask = OAL_LOG_ERROR|OAL_LOG_WARN|OAL_LOG_INFO|OAL_LOG_IO|OAL_LOG_FUNC;但發(fā)現(xiàn)Trace并沒有什么變化??磥韺?duì)g_oalLogMask的修改是無效的,所以最好的方法是在OEMInit的一開始中,調(diào)用OALLogSetZones來設(shè)置要打開的ZONE。

11. 修改了微軟的代碼如何編譯

  第一步,進(jìn)入命令行模式

  第二步,進(jìn)入要編譯的文件的目錄,build

  第三步,sysgen 模塊名

  第四步,makeimg

12. 按下開發(fā)板復(fù)位鍵內(nèi)存不會(huì)掉電,所以如果出現(xiàn)奇怪的情況,最好斷電再次上電看看。

 本文來自: 賽微電子網(wǎng)-電子工程師社區(qū)  原文地址:http://www.srvee.com/embed/apply/qrsWinCEkfzknydrgdwt_55092.html


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
WinCE的編譯系統(tǒng) - 開發(fā)板教程專區(qū) - 天嵌科技 ARM開發(fā)社區(qū) TQ2440,SK...
WINCE600的目錄組織及PQOAL
S3C2410下WinCE6.0的啟動(dòng)過程詳解
WinCE5 sources文件中TARGETLIBS與SOURCELIBS字段的作用與區(qū)別
WinCE BSP中的Dirs文件和Sources文件【轉(zhuǎn)】
打印函數(shù)總結(jié)RETAILMSG(..) DEBUGMSG(..) NKDbgPrintfW...
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服