锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 涓轟竴涓柊鐨勭‖浠惰澶囧畾鍒?/font>WinCE6.0鎿嶄綔緋葷粺錛屼竴鑸渶瑕佸畬鎴愪互涓嬪嚑涓富瑕佹楠わ細(xì) 1. 閽堝鐗瑰畾鐨勭‖浠惰澶囧垱寤烘澘綰ф敮鎸佸寘(Board Support Package緙╁啓涓?/span>BSP)錛?/span>BSP蹇呴』鍖呮嫭BOOTLOADER銆?/span>OEM閫傞厤灞?/span>(OEM Adaptation Layer緙╁啓涓?/span>OAL)鍜屼竴浜涘繀瑕佺殑椹卞姩銆?/span> 2. 鍒╃敤鍒涘緩鐨?/span>BSP錛屽畾鍒朵竴涓郴緇熻璁?/span>(OS Design)銆傚嵆閫氳繃VS2005鍒涘緩涓涓?/span>Platform Builder鐨勫伐紼嬨傝宸ョ▼鍙紪璇戜駭鐢熸渶緇堢殑榪愯鏃舵槧鍍忔枃浠訛紙Rum-time Image錛夈?/span> 3. 閽堝鏉夸笂鐨勫鍥磋澶囧垱寤虹浉鍏抽┍鍔紝騫舵坊鍔犲埌BSP涓?/span> 4. 閫氳繃鍒涘緩瀛愬伐紼嬪拰Catalog Items鐨勬柟寮忥紝淇敼OS Design銆?/span> 5. 緙栬瘧OS Design錛屼笅杞界紪璇戝緱鍒扮殑榪愯鏃舵槧鍍忔枃浠跺埌鐩爣璁懼銆傛鏃訛紝鍙氳繃榪滅▼璋冭瘯宸ュ叿榪涜璋冭瘯銆?/span> 6. 鍦ㄥ畬鎴愭墍鏈夌殑璋冭瘯宸ヤ綔涔嬪悗錛屽鍑鴻榪愯鏃舵槧鍍忓搴旂殑SDK(Software Development Kit)錛屽簲鐢ㄧ▼搴忕殑寮鍙戜漢鍛樺彲鍩轟簬姝?/span>SDK緙栧啓璇ヨ澶囩殑搴旂敤紼嬪簭銆?/span> 鍙互鐪嬪嚭錛屽湪鏁翠釜WinCE鎿嶄綔緋葷粺鐨勭Щ妞嶈繃紼嬩腑錛?/span>BSP鐨勭Щ妞嶆槸鏈鍩虹涔熸槸鏈鍏抽敭鐨勪竴姝ャ傝屽垱寤?/span>BSP鐨勮繃紼嬩富瑕佸寘鎷互涓嬪嚑涓唴瀹癸細(xì) 1. 鍒涘緩BOOTLOADER銆?/span>BOOTLOADER鍦ㄥ紑鍙戠殑榪囩▼涓敤浜庝笅杞芥搷浣滅郴緇熸槧鍍忔枃浠躲?/span> 2. 鍒涘緩OAL銆?/span>OAL鏈緇堣閾炬帴鍒板唴鏍告槧鍍忔枃浠訛紝瀹冧富瑕佸畬鎴愮‖浠剁殑鍒濆鍖栧拰綆$悊銆?/span> 3. 鍒涘緩璁懼椹卞姩銆傝澶囬┍鍔ㄦ槸鏉夸笂澶栧洿璁懼鐨勮蔣浠舵敮鎸併?/span> 4. 淇敼榪愯鏃舵槧鍍忕殑閰嶇疆鏂囦歡銆傞厤緗枃浠朵富瑕佸寘鎷?/span>BIB銆?/span>REG絳夋枃浠躲?/span> BOOTLOADER鐨勪富瑕佷綔鐢ㄦ槸灝嗘搷浣滅郴緇熻繍琛屾椂鏄犲儚鍔犺澆鍒板唴瀛橈紝騫惰煩杞埌OS鐨勫惎鍔ㄧ▼搴忓銆傚畠鐨勮繖涓浣滅敤璺熷墠涓綃囦粙緇嶇殑NBOOT鐨勪綔鐢ㄥ畬鍏ㄤ竴鑷淬?/span>BOOTLOADER鑾峰彇榪愯鏃舵槧鍍忥紙涓鑸搴旂殑鏂囦歡鍚嶄負(fù)NK錛変竴鑸湁涓ょ鏂規(guī)硶銆傚畠鍙互閫氳繃鏈夌嚎榪炴帴鐨勬柟寮忚薄緗戠粶(Ethernet)銆?/span>USB鎴栦覆鍙d粠澶栭儴涓嬭澆NK銆傚畠涔熷彲浠ヤ粠鏈湴鐨勫瓨鍌ㄥ櫒(Flash銆?/span>Hard Disk)涓姞杞?/span>NK銆傞氬父錛?/span>BOOTLOADER閫氳繃Ethernet涓嬭澆鎿嶄綔緋葷粺鏄犲儚鏁呭皢鍏剁О涓?/span>EBOOT銆傚湪寮鍙戠殑榪囩▼涓嬌鐢?/span>EBOOT錛屽彲浠ユ彁楂樺紑鍙戞晥鐜囥傞氳繃浣跨敤EBOOT錛屼綘鍙互寰堝揩閫熺殑涓嬭澆NK鍒扮洰鏍囪澶囦腑銆傝屽埄鐢?/span>Flash緙栫▼宸ュ叿鎴栬呮槸閫氳繃JTAG涓嬭澆鍒欏緢鎱€傚湪涓浜涗駭鍝佹渶緇堝彂甯冩椂錛?/span>EBOOT鏄彲浠ュ幓鎺夌殑錛屼絾涔熸湁涓浜涘垯蹇呴』鍖呮嫭BOOTLOADER錛屽儚X86鐨勫鉤鍙板氨鏄姝ゃ?/span> 鑷蟲錛屾垜浠凡緇忎簡瑙d簡EBOOT鐨勪富瑕佸姛鑳斤紝涓轟簡瀹炵幇榪欎簺鍔熻兘錛?/span>EBOOT蹇呴』瀹屾垚浠ヤ笅宸ヤ綔錛?/span> 1. 鍒濆鍖?/span>MCU銆傚寘鎷垵濮嬪寲MCU鐨勭浉鍏沖瘎瀛樺櫒銆佷腑鏂佺湅闂ㄧ嫍銆佺郴緇熸椂閽熴佸唴瀛樺拰MMU銆傚墠闈㈠嚑欏硅窡NBOOT鍩烘湰涓鑷達(dá)紝浣嗚繖閲屽鍔犱簡瀵?/span>MMU鐨勫垵濮嬪寲銆?/span> 2. 鍦ㄥ畬鎴愭墍鏈夌殑鍒濆鍖栧伐浣滀箣鍚庯紝璋冪敤BootloaderMain()銆傝繖涓嚱鏁扮殑瀹氫箟鍦?/span>WinCE6.0涓搴旂殑鏂囦歡鏄?/span>C:"WINCE600"PLATFORM"COMMON"SRC"COMMON"BOOT"BLCOMMON"blcommon.c 3. BootloaderMain()涓昏渚濇璋冪敤浠ヤ笅鍑犱釜鍑芥暟錛?/span>OEMDebugInit()銆?/span>OEMPlatformInit錛堬級(jí)銆?/span>OEMPreDownload錛堬級(jí)銆?/span>OEMLaunch錛堬級(jí)錛岃岃繖浜涘嚱鏁板繀欏葷敱EBOOT鐨勪唬鐮佹潵瀹炵幇銆?/span> 4. 鏈緇堣煩杞埌OAL.exe鐨?/span>StartUp澶勶紝榪涜屽惎鍔?/span>WinCE鎿嶄綔緋葷粺銆?/span> 鏁翠釜嫻佺▼濡備笅鍥炬墍紺猴細(xì) EBOOT鐨勪唬鐮佸彲鍙傝僀:"WINCE600"PLATFORM"DEVICEEMULATOR"SRC"BOOTLOADER"EBOOT鐩綍銆傝繖閲岄拡瀵筍3C2410鐨凟BOOT鍋氬嚑鐐硅鏄庛傚墠涓綃囦粙緇峃BOOT鍔犺澆EBOOT鐨勬柟娉曟椂鎻愬埌錛孨BOOT蹇呴』灝咵BOOT鏀懼湪鍐呭瓨涓寚瀹氱殑浣嶇疆錛岃繖涓綅緗槸鐢盓BOOT鐨勬潵鍐沖畾鐨勩傚叿浣撶殑錛屽湪EBOOT涓殑浣撶幇鏄痓oot.bib閲岀殑鍐呭瓨閰嶇疆錛屽涓嬪浘鎵紺恒? NBOOT鍔犺澆EBOOT鍒板唴瀛樼殑鍦板潃蹇呴』涓庢鍦板潃瀵瑰簲銆傜敱浜庡湪NBOOT涓病鏈変嬌鐢?/span>MMU錛屾墍浠?/span>NBOOT浣跨敤鐨勫疄闄呭湴鍧搴旇涓?/span>0x30021000錛屽惁鍒欑郴緇熷皢涓嶈兘姝e父鍚姩銆傜浜岀偣錛屽鏋滄病鏈夐噰鐢?/span>NBOOT鍔犺澆EBOOT鐨勬柟娉曪紝鑰屾槸灝?/span>EBOOT鐩存帴瀛樺偍鍦?/span>NOR Flash涓紝姝ゆ椂蹇呴』鍦?/span>EBOOT鐨勪唬鐮佷腑瀹炵幇鑷姞杞界殑榪囩▼錛屽嵆灝?/span>NOR Flash涓殑EBOOT鍏ㄩ儴鍔犺澆鍒?/span>RAM涓紝騫舵墽琛岋紝瀹炵幇浠g爜濡備笅: Windows CE鐨勬湁浜涘嚱鏁頒腑闇瑕佺敤鍒扮墿鐞嗗唴瀛樼粨鏋勪綋PHYSICAL_ADDRESS錛?/span> Windows CE鍦?/span>ceddk.h涓畾涔変簡PHYSICAL_ADDRESS錛屽畠鍏跺疄鏄?/span>LARGE_INTEGER綾誨瀷錛屽叾瀹氫箟濡備笅錛?/span> // in ceddk.h typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS; // in winnt.h typedef union _LARGE_INTEGER{ struct{ DWORD LowPart; LONG HighPart; }; LONGLONG QuadPart; } LARGE_INTEGER; 鍙錛?/span>Windows CE涓敤64涓?/span>Bit鏉ヤ唬琛ㄧ墿鐞嗗湴鍧錛屽浜庡ぇ澶氭暟32浣嶇殑CPU鑰岃█錛屽彧闇瑕佹妸瀹冪殑HighPart璁劇疆涓?/span>0灝卞彲浠ヤ簡銆?/span> 濡傛灉瑕佺洿鎺ヨ闂煇涓涓湴鍧鐨勭墿鐞嗗唴瀛橈紝Windows CE鎻愪緵浜?/span>VirtualAlloc()鍜?/span>VirtualCopy()鍑芥暟錛?/span>VirtualAlloc璐熻矗鍦ㄨ櫄鎷熷唴瀛樼┖闂村唴淇濈暀涓孌佃櫄鎷熷唴瀛橈紝鑰?/span>VirtualCopy璐熻矗鎶婁竴孌電墿鐞嗗唴瀛樺拰铏氭嫙鍐呭瓨緇戝畾錛岃繖鏍鳳紝鏈緇堝鐗╃悊鍐呭瓨鐨勮闂繕鏄氳繃铏氭嫙鍦板潃榪涜銆傚畠浠殑澹版槑濡備笅錛?/span> // 鐢寵铏氭嫙鍐呭瓨 LPVOID VirtualAlloc( LPVOID lpAddress, // 甯屾湜鐨勮櫄鎷熷唴瀛樿搗濮嬪湴鍧 DWORD dwSize, // 浠ュ瓧鑺備負(fù)鍗曚綅鐨勫ぇ灝?/span> DWORD flAllocationType, // 鐢寵綾誨瀷錛屽垎涓?/span>Reserve鍜?/span>Commit DWORD flProtect // 璁塊棶鏉冮檺 ); // 鎶婄墿鐞嗗唴瀛樼粦瀹氬埌铏氭嫙鍦板潃絀洪棿 BOOL VirtualCopy( LPVOID lpvDest, // 铏氭嫙鍐呭瓨鐨勭洰鏍囧湴鍧 LPVOID lpvSrc, // 鐗╃悊鍐呭瓨鍦板潃 DWORD cbSize, // 瑕佺粦瀹氱殑澶у皬 DWORD fdwProtect // 璁塊棶鏉冮檺 ); VirtualAlloc瀵硅櫄鎷熷唴瀛樼殑鐢寵鍒嗕負(fù)涓ゆ錛屼繚鐣?/span>MEM_RESERVE鍜屾彁浜?/span>MEM_COMMIT銆傚叾涓?/span>MEM_RESERVE鍙槸鍦ㄨ繘紼嬬殑铏氭嫙鍦板潃絀洪棿鍐呬繚鐣欎竴孌碉紝騫朵笉鍒嗛厤瀹為檯鐨勭墿鐞嗗唴瀛橈紝鍥犳淇濈暀鐨勮櫄鎷熷唴瀛樺茍涓嶈兘琚簲鐢ㄧ▼搴忕洿鎺ヤ嬌鐢ㄣ?/span>MEM_COMMIT闃舵鎵嶇湡姝g殑涓鴻櫄鎷熷唴瀛樺垎閰嶇墿鐞嗗唴瀛樸?/span> 涓嬮潰鐨勪唬鐮佹樉紺轟簡濡備綍浣跨敤VirtualAlloc鍜?/span>VirtualCopy鏉ヨ闂墿鐞嗗唴瀛樸傚洜涓?/span>VirtualCopy璐熻矗鎶婁竴孌電墿鐞嗗唴瀛樺拰铏氭嫙鍐呭瓨緇戝畾錛屾墍浠?/span>VirtualAlloc鐨勬椂鍊欏彧闇瑕佸鍐呭瓨淇濈暀錛屾病鏈夊繀瑕佹彁浜ゃ?/span> FpDriverGlobals = (PDRIVER_GLOBALS) VirtualAlloc( 0, DRIVER_GLOBALS_PHYSICAL_MEMORY_SIZE, MEM_RESERVE, PAGE_NOACCESS); if (FpDriverGlobals == NULL) { ERRORMSG(DRIVER_ERROR_MSG, (TEXT(" VirtualAlloc failed!\r\n"))); return; } else { if (!VirtualCopy( (PVOID)FpDriverGlobals, (PVOID)(DRIVER_GLOBALS_PHYSICAL_MEMORY_START), DRIVER_GLOBALS_PHYSICAL_MEMORY_SIZE, (PAGE_READWRITE | PAGE_NOCACHE))) { ERRORMSG(DRIVER_ERROR_MSG, (TEXT("VirtualCopy failed!\r\n"))); return; } } CEDDK榪樻彁渚涗簡鍑芥暟MmMapIoSpace鐢ㄦ潵鎶婁竴孌電墿鐞嗗唴瀛樼洿鎺ユ槧灝勫埌铏氭嫙鍐呭瓨銆傛鍑芥暟鐨勫師褰㈠涓嬶細(xì) PVOID MmMapIoSpace( PHYSICAL_ADDRESS PhysicalAddress, // 璧峰鐗╃悊鍦板潃 ULONG NumberOfBytes, // 瑕佹槧灝勭殑瀛楄妭鏁?/span> BOOLEAN CacheEnable // 鏄惁緙撳瓨 ); 鍏跺疄錛?/span>MmMapIoSpace鍑芥暟鍐呴儴涔熸槸璋冪敤VirtualAlloc鍜?/span>VirtualCopy鍑芥暟鏉ュ疄鐜扮墿鐞嗗湴鍧鍒拌櫄鎷熷湴鍧鐨勬槧灝勭殑銆?/span>MmMapIoSpace鍑芥暟鐨勫師浠g爜鏄叕寮鐨勶紝鎴戜滑鍙互浠?/span>%_WINCEROOT%\PUBLIC\COMMON\OAK\DRIVERS\CEDDK\DDK_MAP\ddk_map.c寰楀埌銆備粠MmMapIoSpace鐨勫疄鐜版垜浠篃鍙互鐪嬪嚭VirtualAlloc鍜?/span>VirtualCopy鐨勭敤娉曪細(xì) PVOID MmMapIoSpace ( IN PHYSICAL_ADDRESS PhysicalAddress, IN ULONG NumberOfBytes, IN BOOLEAN CacheEnable ) { PVOID pVirtualAddress; ULONGLONG SourcePhys; ULONG SourceSize; BOOL bSuccess; SourcePhys = PhysicalAddress.QuadPart & ~(PAGE_SIZE - 1); SourceSize = NumberOfBytes + (PhysicalAddress.LowPart & (PAGE_SIZE - 1)); pVirtualAddress = VirtualAlloc(0, SourceSize, MEM_RESERVE, PAGE_NOACCESS); if (pVirtualAddress != NULL) { bSuccess = VirtualCopy( pVirtualAddress, (PVOID)(SourcePhys >> 8), SourceSize, PAGE_PHYSICAL | PAGE_READWRITE | (CacheEnable ? 0 : PAGE_NOCACHE)); if (bSuccess) { (ULONG)pVirtualAddress += PhysicalAddress.LowPart & (PAGE_SIZE - 1); } else { VirtualFree(pVirtualAddress, 0, MEM_RELEASE); pVirtualAddress = NULL; } } return pVirtualAddress; } 姝ゅ錛?/span>Windows CE榪樹緵浜?/span>AllocPhysMem鍑芥暟鍜?/span>FreePhysMem鍑芥暟錛岀敤鏉ョ敵璇峰拰閲婃斁涓孌佃繛緇殑鐗╃悊鍐呭瓨銆傚嚱鏁板彲浠ヤ繚璇佺敵璇風(fēng)殑鐗╃悊鍐呭瓨鏄繛緇殑錛屽鏋滃嚱鏁版垚鍔燂紝浼?xì)杩斿洖铏氭嫙鍐呭瓨鐨勫彞鏌勫拰鐗╃悊鍐呭瓨鐨勮捣濮嬪湴鍧銆傝繖瀵逛簬DMA璁懼灝や負(fù)鏈夌敤銆傚湪榪欓噷灝變笉璇︾粏浠嬬粛浜嗭紝璇昏呭彲浠ュ弬鑰?/span>Windows CE鐨勮仈鏈烘枃妗c?/span> 榪囩▼濡傚浘錛?/p>
浠庡浘涓彲浠ョ湅鍑猴紝鏁翠釜緙栬瘧閮芥槸閫氳繃璋冪敤Blddemo.bat鏉ュ疄鐜扮殑錛屽疄闄呬笂涔熸槸榪欐牱錛岀紪璇慦inCE灝辨槸鐢˙lddemo.bat錛屽彧涓嶈繃鍚庨潰鍙互璺熶笉鍚岀殑鍙傛暟銆傜紪璇戦樁孌靛拰緋葷粺浜х敓闃舵鐢盋ebuild.bat瀹屾垚錛屾枃浠舵嫹璐濋樁孌電敱Buildrel.bat瀹屾垚錛屾渶鍚庣殑鐢熸垚鏄犲儚闃舵鐢盡akeimg.exe瀹屾垚銆備笅闈粙緇嶄竴涓嬪悇涓樁孌點(diǎn)?/p>
1. 緙栬瘧闃舵(Compile phase) 榪欎釜榪囩▼鎸囧WinCE璺緞涓嬬殑Private鍜孭ublic鐩綍榪涜緙栬瘧錛屽皢閲岄潰鐨勬簮浠g爜緙栬瘧鎴愬簱鏂囦歡絳夛紝榪欎釜榪囩▼鍙兘浼?xì)鑺辫垂鍑犱釜灏忔椂銆傞櫎闈炴敼鍔ㄤ簡Private鎴朠ublic鐩綍涓嬬殑婧愮爜錛屽惁鍒欐槸涓嶉渶瑕佺紪璇戠殑銆備竴鑸垜浠紪璇戣嚜宸辯殑宸ョ▼鐨勬椂鍊欙紝涓嶉渶瑕佽繖涓楠ゃ?/p>
2. 緋葷粺浜х敓闃舵(Sysgen phase) 鍦ㄨ繖涓繃紼嬩腑錛岀郴緇熶細(xì)鏍規(guī)嵁浣犲湪PB涓瑿atalog涓殑閫夐」錛屽垹闄ゅ拰璁劇疆鐩稿簲鐨凷YSGEN鐜鍙橀噺錛岄摼鎺ョ浉搴旂殑闈欐佸簱錛岃繃婊ゅご鏂囦歡錛屼負(fù)SDK鍒涘緩鎵闇鐨勫鍏ュ簱錛屽悓鏃惰繕浼?xì)湄?fù)WinCE緋葷粺鍒涘緩涓浜涢厤緗枃浠躲傛渶鍚庝細(xì)緙栬瘧褰撳墠鐨凚SP鍜屽簲鐢ㄧ▼搴忋?/p>
3. 鏂囦歡鎷瘋礉闃舵(Release Copy phase) 鎷瘋礉鎵鏈夋墍闇鐨勬枃浠跺埌宸ョ▼鐨剅elease鐩綍涓嬮潰錛屼富瑕佹槸鍓嶉潰緋葷粺浜х敓闃舵鎵浜х敓鐨勬墍鏈夋枃浠躲?/p>
4. 鐢熸垚鏄犲儚闃舵(Make run-time image phase) 璇ヨ繃紼嬮鍏堣皟鐢╟enlscmp.exe鏍規(guī)嵁鍥介檯璇郴涓庡湴鍖鴻瀹氱敓鎴恮ince.nls鏂囦歡銆傜劧鍚庤皟鐢‵merge.exe鍚堝茍涓浜涢厤緗枃浠訛紝鍚堝茍鎵鏈塨ib鏂囦歡涓篶e.bib錛屽悎騫舵墍鏈夌殑reg鏂囦歡涓篟eginit.ini錛屽悎騫舵墍鏈夌殑dat鏂囦歡涓篒nitobj.dat錛屽悎騫舵墍鏈夌殑db鏂囦歡涓篒nitdb.ini銆備箣鍚庤皟鐢≧egcomp.exe鍘嬬緝r(jià)eginit.ini涓篸efault.fdf銆傛牴鎹甃OCAL鐜鍙橀噺鐨勮緗皟鐢≧es2exe.exe鏇存柊鎵鏈夌殑dll錛宔xe鍜宑pl鏂囦歡涓殑璧勬簮鏂囦歡錛屼富瑕佹槸鏇存柊鍏朵腑鐨勮璦閮ㄥ垎銆傚啀璋冪敤Txt2ucde.exe杞崲鎵鏈堿SCII鐮佸瓧絎︿覆涓篣NICODE銆傛渶鍚庤皟鐢≧omimage.exe鍚堝茍鎵鏈夋枃浠朵負(fù)NK.bin銆?/p>
鍦ㄦ暣涓紪璇戣繃紼嬩腑鏈夋椂浼?xì)閬囧埌缂栬瘧閿欒锛寴q欎釜鍙互閫氳繃瀵熺湅Build.log錛孊uild.err鍜孊uild.wrn鏂囦歡鏉ュ垎鏋愰棶棰橈紝榪欎笁涓枃浠跺簲璇ユ槸浣嶄簬”\WINCE600”鐩綍涓嬮潰銆傜紪璇戦敊璇彲鑳藉湪涓嶅悓鐨勭紪璇戦樁孌典駭鐢燂紝鎴戜滑涔熷彲浠ユ牴鎹繖涓鐐規(guī)潵鍒嗘瀽闂銆?/p>
涓鑸湪緋葷粺浜х敓闃舵(Sysgen phase)鍑虹幇閿欒寰堝彲鑳芥槸鐢變簬涓㈠け緇勪歡鎴栨枃浠墮犳垚鐨勶紝榪欐椂鍊橞uild.log浼?xì)鎻愪緵鏇村淇℃伅甯姪鍒嗘瀽闂銆傚湪榪欎釜闃舵浜х敓閿欒錛屽緢鍙兘鏄敱浜庡湪褰撳墠宸ョ▼涓坊鍔犳垨鑰呭垹闄inCE緇勪歡閫犳垚鐨勶紝鍏朵腑鏈変簺緇勪歡鐨勬洿鏀規(guī)槸闇瑕佽繘琛?#8221;clean sysgen”鐨勶紝鑰屼笉鑳藉彧浣跨敤”sysgen”鍛戒護(hù)銆傛墍浠ユ垜鐨勫緩璁槸姣忔娣誨姞鎴栧垹闄ょ粍浠墮兘鍋?#8221;clean sysgen”銆?/p>
濡備笂闈粙緇嶇郴緇熶駭鐢熼樁孌?Sysgen phase)涔熶細(xì)緙栬瘧B(tài)SP鍜岄儴鍒嗗簲鐢ㄣ傛墍浠ュ鏋滈敊璇嚭鐜板湪緋葷粺浜х敓闃舵鐨勭紪璇戣繃紼嬩腑錛屼竴鑸竴縐嶅彲鑳藉氨鏄綘鐨勪唬鐮佹湁璇硶閿欒錛屽綋鐒惰繖縐嶉敊璇緢濂芥煡銆傝繕鏈変竴縐嶅彲鑳藉嚭鐜扮殑閿欒鏄繛鎺ラ敊璇紝鏈夊彲鑳芥槸涓㈠け浜唋ib搴撴枃浠舵垨鑰呴摼鎺ラ敊浜嗗簱鏂囦歡錛屼篃鏈夊彲鑳芥槸璋冪敤浜嗛敊璇殑API鍑芥暟錛岃繕鏈夊氨鏄緗簡閿欒鐨勭幆澧冨彉閲忥紝榪欎簺鏌ヨ搗鏉ョ浉瀵瑰洶闅句竴鐐廣?/p>
濡傛灉閿欒浜х敓鍦ㄦ枃浠舵嫹璐濋樁孌?Release copy phase)錛屼竴縐嶅父瑙佺殑闂灝辨槸鍜岀‖鐩橀┍鍔ㄥ櫒鏈夊叧錛屾鏌ヤ竴涓媟elease鐩綍鎵鍦ㄧ鐩樼殑紓佺洏絀洪棿銆?/p>
濡傛灉闂鍑虹幇鍦ㄧ敓鎴愭槧鍍忛樁孌?Make run-time image phase)錛屾牴鎹紪璇戠殑杈撳嚭紿楀彛鐨勮緭鍑轟俊鎭垽鏂棶棰樺嚭鍦ㄥ摢涓瓙闃舵銆備竴縐嶅彲鑳芥槸浣犵殑bib鏂囦歡鎴栬卹eg鏂囦歡涓瓨鍦ㄨ娉曢敊璇鑷村悎騫舵枃浠舵椂鍑洪敊錛岃繕鏈夊氨鏄敞鎰忎綘鐨刬mage鐨勫ぇ灝忔槸鍚﹁秴榪囦簡config.bib鏂囦歡涓殑璁懼畾錛岃繕鏈夊氨鏄彲鑳戒涪澶變簡鏌愪釜鎴栬呮煇浜涙枃浠訛紝榪欎簺涓㈠け鐨勬枃浠跺緢鍙兘鏄敱浜庡湪鍓嶉潰鐨勭紪璇戣繃紼嬩腑鍑虹幇閿欒瀵艱嚧鐨勩?/p>
褰撶劧錛屼篃鏈夋椂鍊欎細(xì)閬囧埌涓浜涘鎬殑闂錛岃繖浜涢棶棰樺彲鑳芥槸鐢變簬娌℃湁姝g‘鐨勫畨瑁匴inCE閫犳垚鐨勶紝姣斿鍦ㄥ畨瑁匴inCE鐨勬椂鍊欙紝璺緞涓笉瑕佹湁涓枃鎴栬呯┖鏍兼垨鑰呭叾浠栨瘮杈冨鎬殑瀛楃銆傝ˉ涓佽鎸夌収欏哄簭鏉ユ墦錛岃涓嶄篃鍙兘浼?xì)鍑虹幇闂銆?/p>
鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/FLandY1982/archive/2009/12/04/4941120.aspx
![]()
Code
;------------------------------------------------------------------------------
; Copy boot loader to memory
ands r9, pc, #0xFF000000 ; see if we are in flash or in ram
bne %f20 ; go ahead if we are already in ram
; This is the loop that perform copying.
ldr r0, = 0x21000 ; offset into the RAM
add r0, r0, #PHYBASE ; add physical base
mov r1, r0 ; (r1) copy destination
ldr r2, =0x0 ; (r2) flash started at physical address 0
ldr r3, =0x10000 ; counter (0x40000/4)
10 ldr r4, [r2], #4
str r4, [r1], #4
subs r3, r3, #1
bne %b10
; Restart from the RAM position after copying.
mov pc, r0
nop
nop
nop
; Shouldn't get here.
b .
]]>
2.VirtualCopy鐢ㄦ潵緇戝畾涓鍧楃墿鐞嗗唴瀛樺埌褰撳墠榪涚▼铏氭嫙鍦板潃絀洪棿銆傚弬鏁伴噷鐨刲pvSrc鏃㈠彲浠ユ槸鍐呮牳孌電殑铏氭嫙鍦板潃涔熷彲浠ユ槸鐗╃悊鍦板潃(鐢╬age_physical鏉ユ爣璁?銆傚悓鏃惰娉ㄦ剰lpvSrc鐨勫彸縐諱笌鍚︺?br>
3.浣跨敤VirtualAlloc瑕佸寘鍚玏inbase.h;浣跨敤VirtualCopy鏃惰鍖呭惈plfuncs.h.涓よ呴兘瑕侀摼鎺oredll.lib.
4.鍦–E5.0涔嬪墠,浣跨敤VirtualAlloc鑾峰緱鐨勮櫄鎷熷湴鍧絀洪棿鍒嗕負(fù)涓ょ鎯呭艦:
(1)澶у皬鍦?MB浠ヤ笅鏃?浣嶄簬璋冪敤榪涚▼鐨勮櫄鎷熺┖闂翠腑;
(2)澶у皬澶т簬2MB鏃?浣嶄簬鐢ㄦ埛鎬佺殑鍏變韓鍦板潃絀洪棿鍐?0x42000000-0x7E000000 )
1. 濡傛灉copy鐨勭墿鐞嗗湴鍧鍦?12M鑼冨洿鍐咃紝閭d箞鐢變簬闈欐佹槧灝勭殑瀛樺湪錛宭pvSrc鍙互涓洪潤鎬佹槧灝勭殑铏氭嫙鍦板潃錛屼篃鍙互涓虹墿鐞嗗湴鍧銆傞噰鐢ㄥ悗鑰呴渶瑕佹寚瀹歱age_physical錛屽悓鏃秎pvSrc鍙崇Щ8浣嶃?
2. 濡傛灉copy鐨勭墿鐞嗗湴鍧鍦?12M鑼冨洿澶栵紝閭d箞鐢變簬寰蔣鐨勫涓嬭瀹?#8220;
VirtualCopy also supports the PAGE_PHYSICAL flag. You must set this flag when you are mapping physical memory that resides beyond 512 MB, that is, physical memory with an address above 0x1FFFFFFF.”
lpvSrc鍙兘涓虹墿鐞嗗湴鍧錛屽悓鏃墮渶瑕佸彸縐?br>
鍙璁劇疆浜哖AGE_PHYSICAL 涓虹湡錛岄偅涔堝氨闇瑕佹妸lpvSrc鍙崇Щ8浣?/span>
宓屽叆寮忚澶囦笌妗岄潰PC鐨勪竴涓樉钁椾笉鍚屾槸瀹冪殑搴旂敤紼嬪簭涓氬父闇瑕佺洿鎺ヨ闂煇涓孌電墿鐞嗗唴瀛橈紝榪欏湪椹卞姩紼嬪簭涓鐗╃悊鍐呭瓨鐨勮闂挨涓洪噸瑕侊紝灝ゅ叾鏄儚ARM浣撶郴緇撴瀯涓嬶紝I/O绔彛涔熻鏄犲皠鎴愭煇涓涓墿鐞嗗唴瀛樺湴鍧銆傚洜姝わ紝涓庢闈㈢増鏈?/span>Windows鐩告瘮錛?/span>Windows CE鎻愪緵浜嗙浉瀵圭畝鍗曠殑鐗╃悊鍐呭瓨璁塊棶鏂瑰紡銆傛棤璁烘槸椹卞姩紼嬪簭榪樻槸搴旂敤紼嬪簭閮藉彲浠ラ氳繃API璁塊棶鏌愪竴孌電墿鐞嗗唴瀛樸?/span>
]]>
]]>
]]>
]]>
WinCE涓殑GWES妯″潡璐熻矗鍔犺澆鍜岀鐞員ouch Panel椹卞姩錛孴ouch Panel鐨凪DD灞傚悜涓婃彁渚汥DI鎺ュ彛錛孭DD灞傛槸閽堝紜歡鐨勫疄鐜幫紝瀵筂DD灞傛彁渚汥DSI鎺ュ彛銆?/p>
WinCE涓殑GWES妯″潡璐熻矗鍔犺澆鍜岀鐞員ouch Panel椹卞姩錛孴ouch Panel鐨凪DD灞傚悜涓婃彁渚汥DI鎺ュ彛錛孭DD灞傛槸閽堝紜歡鐨勫疄鐜幫紝瀵筂DD灞傛彁渚汥DSI鎺ュ彛銆?/p>
1 Touch Panel椹卞姩涓殑鏁版嵁緇撴瀯
(1) TOUCH_PANEL_SAMPLE_FLAGS
鐢ㄤ簬鎻忚堪涓涓噰鏍風(fēng)偣鐨勪俊鎭紝榪欎簺淇℃伅琚畾涔夊湪涓涓灇涓劇粨鏋勪腑錛?/p>
enum enumTouchPanelSampleFlags {
TouchSampleValidFlag = 0x01,
TouchSampleDownFlag = 0x02,
TouchSampleIsCalibratedFlag = 0x04,
TouchSamplePreviousDownFlag = 0x08,
TouchSampleIgnore = 0x10,
TouchSampleMouse = 0x40000000
};
TouchSampleValidFlag錛氫竴涓湁鏁堢殑閲囨牱鍊?/p>
TouchSampleDownFlag錛氱涓嬈℃寜瑙︽懜灞忔椂錛岃繑鍥炶flag
TouchSampleIsCalibratedFlag錛氶噰鏍風(fēng)殑x鍜寉鍧愭爣鍊間笉闇瑕佸啀琚牎楠屼簡
TouchSamplePreviousDownFlag錛氳〃紺轟笂涓嬈¢噰鏍風(fēng)姸鎬佹槸鎸夊湪瑙︽懜灞忎笂
TouchSampleIgnore錛氬拷鐣ヨ繖嬈¢噰鏍峰?/p>
TouchSampleMouse錛氶鐣?/p>
(2) TPDC_CALIBRATION_POINT
鐢ㄤ簬鎻忚堪涓涓牎楠岀偣鐨勭浉鍏充俊鎭紝緇撴瀯濡備笅錛?/p>
struct TPDC_CALIBRATION_POINT {
INT PointNumber;
INT cDisplayWidth;
INT cDisplayHeight;
INT CalibrationX;
INT CalibrationY;
};
PointNumber錛氭牎楠岀偣绱㈠紩鍊鹼紝鐢ㄤ簬鎻忚堪鏍¢獙鐐瑰湪LCD涓婄殑浣嶇疆
0錛氫腑闂?/p>
1錛氬乏涓?/p>
2錛氬乏涓?/p>
3錛氬彸涓?/p>
4錛氬彸涓?/p>
cDisplayWidth錛氭樉紺虹殑瀹藉害
cDisplayHeight錛氭樉紺虹殑楂樺害
CalibrationX錛氭牎楠岀偣鐨剎鍧愭爣鍊?/p>
CalibrationY錛氭牎楠岀偣鐨剏鍧愭爣鍊?/p>
(3) TPDC_CALIBRATION_POINT_COUNT
鐢ㄤ簬鎻忚堪闇瑕佹牎楠岀殑鐐圭殑涓暟錛岀粨鏋勫涓嬶細(xì)
struct TPDC_CALIBRATION_POINT_COUNT {
DDI_TOUCH_PANEL_CALIBRATION_FLAGS flags;
INT cCalibrationPoints;
};
flags錛氫竴鑸負(fù)0
cCalibrationPoints錛氶渶瑕佹牎楠岀殑鐐圭殑涓暟錛屼竴鑸槸5
(4) gIntrTouch鍜実IntrTouchChanged
榪欐槸涓や釜琚玀DD灞傜敤鍒扮殑涓柇錛岄渶瑕佸湪PDD灞備腑瀹氫箟錛屽涓嬶細(xì)
DWORD gIntrTouch = SYSINTR_NOP;
DWORD gIntrTouchChanged = SYSINTR_NOP;
gIntrTouch鐢ㄤ簬鎻忚堪瑙︽懜灞忎腑鏂紝瑕佸拰紜歡鐨勮Е鎽稿睆涓柇鐩稿叧鑱斻?/p>
gIntrTouchChanged鐢ㄤ簬鍦ㄨЕ鎽稿睆鎸変笅鍚庯紝姣忛殧涓孌墊椂闂磋繘琛屼竴嬈¢噰鏍鳳紝搴旇鍜岀‖浠剁殑涓涓畾鏃跺櫒涓柇鐩稿叧鑱斻?/p>
榪欎袱涓煎簲璇ュ湪DdsiTouchPanelEnable(..)鍑芥暟涓拰紜歡涓柇鍏寵仈錛屽茍鍦ㄥ嚱鏁癉dsiTouchPanelGetPoint(..)涓牴鎹儏鍐墊竻闄ょ浉搴旂殑涓柇銆?/p>
2 MDD灞侫PI
MDD涓轟笂灞傚鍑烘墍闇鐨凾ouch Panel椹卞姩鎺ュ彛鍑芥暟錛屼笂灞傞氳繃榪欎簺鍑芥暟鍙互瀹屾垚瀵筎ouch Panel鐨勬搷浣滐紝涓嬮潰浼?xì)浠嬀l嶈繖浜涘嚱鏁扮殑鍔熻兘銆?/p>
(1) BOOL TouchPanelEnable(PFN_TOUCH_PANEL_CALLBACK pfnCallback):
浣胯兘Touch Panel璁懼錛岀敤浜庡垵濮嬪寲Touch Panel銆?/p>
pfnCallback錛氭寚鍚戝鐞員ouch Panel浜嬩歡鐨勫洖璋冨嚱鏁?/p>
(2) Void TouchPanelDisable(void):
紱佺敤Touch Panel璁懼銆?/p>
(3) BOOL TouchPanelGetDeviceCaps(INT iIndex, LPVOID lpOutput )錛?/p>
鑾峰緱Touch Panel璁懼鐨勭浉鍏充俊鎭?/p>
iIndex錛氱儲(chǔ)寮曞?/p>
TPDC_SAMPLE_RATE_ID錛氶噰鏍風(fēng)巼淇℃伅
TPDC_CALIBRATION_POINT_COUNT_ID錛氶噰鏍風(fēng)偣涓暟淇℃伅
TPDC_CALIBRATION_POINT_ID錛氶噰鏍風(fēng)偣鍧愭爣淇℃伅
lpOutput錛氭寚鍚戜竴涓唴瀛樺尯鍩燂紝鐢ㄤ簬瀛樻斁鑾峰緱鐨勭浉鍏充俊鎭?/p>
(4) VOID TouchPanelCalibrateAPoint(INT32 UncalX, INT32 UncalY, INT32* pCalX, INT32* pCalY)錛?/p>
灝嗚緭鍏ョ殑鏈粡榪囨牎楠岀殑鍧愭爣淇℃伅杞崲鎴愭牎楠屽悗鐨勫潗鏍囦俊鎭?/p>
UncalX錛氳緭鍏ョ殑X鍧愭爣
UncalY錛氳緭鍏ョ殑Y鍧愭爣
pCalX錛氭牎楠屽悗鐨刋鍧愭爣
pCalY錛?鏍¢獙鍚庣殑Y鍧愭爣
(5) VOID TouchPanelPowerHandler(BOOL bOff)錛?/p>
Touch Panel鐨勭數(shù)婧愭帶鍒跺嚱鏁般?/p>
bOff錛歍RUE琛ㄧず鍏抽棴鐢墊簮錛孎ALSE琛ㄧず鎵撳紑鐢墊簮
(6) BOOL TouchPanelReadCalibrationPoint(INT* pRawX, INT* pRawY)錛?/p>
鑾峰緱Touch Panel鐨勫潗鏍囥?/p>
pRawX錛氳Е鎽稿睆鐨刋鍧愭爣
PRawY錛氳Е鎽稿睆鐨刌鍧愭爣
(7) VOID TouchPanelReadCalibrationAbort(void)錛?/p>
緇堟褰撳墠鐨勬牎楠屻?/p>
(8) VOID TouchPanelSetCalibration(INT32 cCalibrationPoints, INT32* pScreenXBuffer, INT32* pScreenYBuffer, INT32* pUncalXBuffer, INT32* pUncalYBuffer)錛?/p>
鏍¢獙鍑芥暟銆傞氳繃涓緇勫疄闄呯殑瑙︽懜灞忎笂閲囬泦鐨勭偣鍧愭爣鍜岀浉搴旂殑灞忓箷鍧愭爣璁$畻鏍¢獙緋繪暟銆傚叿浣撳叕寮忓涓嬶細(xì)
Sx = A1*Tx + B1*Ty + C1
Sy = A2*Tx + B2*Ty + C2
榪欓噷灝辨槸閫氳繃鏄劇ず灞忓潗鏍囧拰閲囨牱鐨勮Е鎽稿睆鍧愭爣璁$畻A1,B1,C1,A2,B2,C2銆?/p>
cCalibrationPoints錛氭牎楠岀偣鐨勪釜鏁?/p>
pScreenXBuffer錛氫竴緇勬樉紺哄睆涓婄殑X鍧愭爣
pScreenYBuffer錛氫竴緇勬樉紺哄睆涓婄殑Y鍧愭爣
pUncalXBuffer錛氫竴緇勮Е鎽稿睆涓婇噰鏍風(fēng)殑X鍧愭爣
pUncalYBuffer錛氫竴緇勮Е鎽稿睆涓婇噰鏍風(fēng)殑Y鍧愭爣
(9) BOOL TouchPanelSetMode(INT iIndex, LPVOID lpInput)錛?/p>
璁劇疆Touch Panel鐨勫伐浣滄ā寮忋?/p>
iIndex錛氱儲(chǔ)寮曟ā寮?/p>
TPSM_SAMPLERATE_HIGH錛氳緗珮閲囨牱鐜?/p>
TPSM_SAMPLERATE_LOW錛氳緗綆閲囨牱鐜?/p>
TPSM_PRIORITY_HIGH_ID錛氳緗Е鎽稿睆鐨処ST涓洪珮浼樺厛綰?/p>
TPSM_PRIORITY_NORMAL_ID錛氳緗甀ST涓烘甯鎬紭鍏堢駭
lpInput錛氭寚鍚戜竴鍧楀唴瀛橈紝鍏朵腑鍖呭惈鐩稿叧淇℃伅銆?/p>
3 PDD灞侫PI
(1) LONG DdsiTouchPanelAttach(void)錛?/p>
璇ュ嚱鏁板湪Touch Panel椹卞姩鐨凞ll琚姞杞界殑鏃跺欒皟鐢?/p>
(2) LONG DdsiTouchPanelDettach(void)錛?/p>
璇ュ嚱鏁板湪Touch Panel椹卞姩鐨凞ll琚嵏杞界殑鏃跺欒皟鐢?/p>
(3) BOOL DdsiTouchPanelEnable(void)錛?/p>
鎵撳紑Touch Panel鐢墊簮騫跺仛鍒濆鍖栥備竴鑸細(xì)鍦ㄨ繖閲屽垵濮嬪寲涓浜涗俊鎭紝鎵撳紑Touch Panel璁懼鐢墊簮騫跺仛鍒濆鍖栥?/p>
(4) VOID DdsiTouchPanelDisable(void)錛?/p>
鍏抽棴Touch Panel璁懼銆傚叧闂璗ouch Panel鐢墊簮騫墮噴鏀捐祫婧愩?/p>
(5) BOOL DdsiTouchPanelGetDeviceCaps(ULONG iIndex, LPVOID lpOutput)錛?/p>
鏌ヨTouch Panel璁懼鐨勭浉鍏充俊鎭?/p>
iIndex錛氭煡璇㈢殑绱㈠紩鍊?/p>
TPDC_SAMPLE_RATE_ID錛氭煡璇㈤噰鏍風(fēng)巼淇℃伅
TPDC_CALIBRATION_POINT_ID錛氭煡璇㈤渶瑕佹牎楠岀殑鐐圭殑鍧愭爣
TPDC_CALIBRATION_POINT_COUNT_ID錛氭煡璇㈢敤浜庢牎楠岀殑鐐圭殑涓暟
lpOutput錛氭牴鎹甶Index鍊煎垎鍒寚鍚戠浉鍏崇殑淇℃伅
(6) void DdsiTouchPanelGetPoint(TOUCH_PANEL_SAMPLE_FLAGS pTipState, PLONG pUnCalX, PLONG pUnCalY)錛?/p>
鑾峰緱Touch Panel涓婅鎸変笅鐨勭偣鐨勭姸鎬佸拰鍧愭爣銆?/p>
pTipState錛氬綋鍓嶈Е鎽哥偣鐨勭姸鎬侊紝姣斿鏃犳晥鐐癸紝鏈夋晥鐐癸紝琚寜涓嬬殑鐐圭瓑銆?/p>
pUnCalX錛氳Е鎽哥偣鐨刋鍧愭爣
pUnCalY錛氳Е鎽哥偣鐨刌鍧愭爣
(7) VOID DdsiTouchPanelPowerHandler(BOOL bOff)錛?/p>
璁劇疆Touch Panel鐨勭數(shù)婧愮姸鎬併?/p>
bOff錛歍RUE琛ㄧず鍏抽棴鐢墊簮錛孎ALSE琛ㄧず鎵撳紑鐢墊簮
(8) BOOL DdsiTouchPanelSetMode(ULONG iIndex, LPVOID lpInput)錛?/p>
璁劇疆Touch Panel宸ヤ綔妯″紡銆?/p>
iIndex錛氭ā寮忕儲(chǔ)寮?/p>
TPSM_SAMPLERATE_HIGH_ID錛氶珮閲囨牱鐜?/p>
TPSM_SAMPLERATE_LOW_ID錛氫綆閲囨牱鐜?/p>
lpInput錛氭寚鍚戝寘鍚浉鍏充俊鎭殑鍐呭瓨
4 娉ㄥ唽琛ㄨ緗?/p>
瀵逛簬Touch Panel椹卞姩鏉ヨ錛屾湁浜涙敞鍐岃〃欏規(guī)槸闇瑕侀厤緗殑銆傚叿浣撳涓嬶細(xì)
“InputConfig”錛歐inCE緋葷粺杈撳叆閰嶇疆銆?/p>
Bit0琛ㄧず閿洏杈撳叆
Bit1琛ㄧずTouch Panel杈撳叆
Bit2琛ㄧず紜歡鎸夐敭杈撳叆
“DeviceName”錛歍ouch Panel椹卞姩鐨勫悕瀛椼?/p>
“MaxCalError”錛歍ouch Panel鐨勭簿紜害閰嶇疆銆?/p>
“CalibrationData”錛歍ouch Panel鐨勬牎楠屽箋傜涓嬈″惎鍔╓inCE鍚庯紝闇瑕侀氳繃WinCE鐨勮Е鎽稿睆鏍¢獙紼嬪簭瀵筎ouch Panel榪涜鏍¢獙銆傛牎楠屽畬鎴愬悗錛屾牎楠屽間細(xì)琚啓鍏ユ敞鍐岃〃閲岄潰銆?/p>
涓嬮潰鏄叧浜嶵ouch Panel鐨勬敞鍐岃〃閰嶇疆鐨勪緥瀛愶細(xì)
[HKEY_LOCAL_MACHINE\ControlPanel]
"InputConfig"=dword:3 ;3 => keybd and touch screen
[HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\TOUCH]
"DriverName"="touch.dll"
"MaxCalError"=dword:8
"CalibrationData"="446,671 36,191 38,1179 856,1161 862,169 "
涓漢瑙夊緱錛岃鎯蟲洿濂界殑鐞嗚ВTouch Panel椹卞姩錛岃繕鏄渶瑕佸幓璇昏浠g爜錛屽熀浜嶹inCE6.0涓嬶紝鍙互鍙傝?\WINCE600\PLATFORM\H4SAMPLE\SRC\DRIVERS\TOUCH"涓嬮潰鐨勯┍鍔紝鍩轟簬榪欎釜椹卞姩寮鍙戣嚜宸辯殑椹卞姩浼?xì)姣旇緝鏂逛狙潃?/p>
Windows CE涓嬭Е鎽稿睆椹卞姩瀹炵幇鐨勫垎鏋?br>Analysis of Touch Panel Driver Realization Based on Windows CE OS
鍒樻灄杈? 寮?鑺?
Liu,LinHui1 Zhang,Fen2
錛? 闀挎矙鐞嗗伐澶у鑳芥簮涓庡姩鍔涘伐紼嬪闄紝婀栧崡 闀挎矙錛?10077錛? 鍗庝腑縐戞妧澶у鏈烘縐戝涓庡伐紼嬪闄紝婀栧寳 姝︽眽錛?30074錛?/p>
鎽樿錛氭湰鏂囦粙緇嶄簡Windows CE鎿嶄綔緋葷粺鐨勮Е鎽稿睆椹卞姩紼嬪簭妯″瀷錛岃緇嗛槓榪板祵鍏ュ紡緋葷粺涓數(shù)闃誨紡瑙︽懜灞忕殑Windows CE椹卞姩紼嬪簭鐨勮璁″拰瀹炵幇鏂規(guī)硶銆?/p>
鍏抽敭璇嶏細(xì)瑙︽懜灞忥紝W(xué)indows CE
涓浘鍒嗙被鍙鳳細(xì)TP316
鏂囩尞鏍囪瘑鐮侊細(xì)A
Abstract錛歍his article introduced touch panel driver model of Windows CE operating system, and elaborated the driver design and the realization method of resistance-type touch panel based on an embedded system which take Windows CE as operating system.
Keyword錛歍ouch Panel錛學(xué)indows CE
1. 鍓嶈█
瑙︽懜灞忔槸宓屽叆寮忚澶囦腑甯哥敤鐨勮綆楁満杈撳叆璁懼錛屽畠鍙嬌鎿嶄綔綆鍗曠洿瑙傦紝浜轟漢閮戒細(xì)浣跨敤錛岃繖涓鐐規(guī)棤璁烘槸閿洏榪樻槸榧犳爣閮芥棤娉曚笌鍏剁浉姣斻傚湪鎵嬫満銆丳DA絳夋墜鎸佷駭鍝佸強(qiáng)鍏叡鏈嶅姟璁懼涓ぇ閲忛噰鐢ㄨЕ鎽稿睆銆傝Е鎽稿睆鍒嗕負(fù)鐢?shù)闃诲紡銆佺數(shù)瀹瑰紡銆佽〃闈㈠0娉㈠紡絳夊縐嶏紝鐢?shù)闃诲紡瑙︽懜灞忔槸鐩墠搴旂敤姣旇緝骞挎硾鐨勪竴縐嶏紝鏈夊洓綰褲佷簲綰褲佷竷綰跨瓑鍑犵銆傛湰鏂囧皢鍒嗘瀽Windows CE鎿嶄綔緋葷粺涓嬬殑瑙︽懜灞忛┍鍔ㄧ▼搴忔ā鍨嬪強(qiáng)瀹炵幇鏂規(guī)硶銆?/p>
2. Windows CE瑙︽懜灞忛┍鍔ㄧ▼搴忔ā鍨?br>鍦╓indows CE鎿嶄綔緋葷粺涓Е鎽稿睆椹卞姩鏄竴縐嶅垎灞傞┍鍔ㄣ傚叾椹卞姩妯″瀷濡傚浘1鎵紺恒備笂灞傛槸妯″瀷璁懼椹卞姩紼嬪簭錛圡odel Device Driver, MDD錛夛紝涓嬪眰鏄緷璧栧鉤鍙扮殑椹卞姩紼嬪簭錛圥latform Dependent Driver, PDD錛夈侻DD閫氬父鏃犻渶淇敼鐩存帴浣跨敤錛孧DD閾炬帴PDD灞傚茍瀹氫箟瀹冨笇鏈涜皟鐢ㄧ殑鍑芥暟鎺ュ彛錛氳澶囬┍鍔ㄧ▼搴忔彁渚涘櫒鎺ュ彛錛圖evice Driver Service Provider Interface, DDSI錛夈傚悓鏃禡DD鎶婁笉鍚岀殑鍑芥暟闆嗘彁渚涚粰鎿嶄綔緋葷粺錛岃繖浜涘嚱鏁板彨鍋氳澶囬┍鍔ㄧ▼搴忔帴鍙o紙Device Driver Interface, DDI錛夛紝榪欓儴鍒嗕負(fù)涔熷氨鏄垜浠氬父椹卞姩闇瑕佸疄鐜扮殑閮ㄥ垎銆?/p>
3 Windows CE鐨勮Е鎽稿睆椹卞姩紼嬪簭鎺ュ彛
Windows CE鐨勮Е鎽稿睆椹卞姩閾炬帴浜唗ch_cal.lib鍜宼chmdd.lib涓や釜闈欐侀摼鎺ュ簱銆傝Е鎽稿睆椹卞姩鐢盙WES鍔犺澆錛孏WES閫氳繃DDI璋冪敤椹卞姩紼嬪簭鑾峰彇璁懼鐘舵侊紝璁劇疆椹卞姩鍔熻兘絳夛紝鑰岄┍鍔ㄦ湰韜氳繃DDSI鐩存帴鑾峰緱紜歡淇℃伅鏉ョ‘瀹氬綋鍓嶈Е鎽稿睆鐨勭姸鎬併?/p>
Windows CE瑙︽懜灞忛┍鍔ㄨ姹傜殑DDI鎺ュ彛鍖呮嫭錛歍ouchPanelGetDeviceCaps銆乀ouchPanelEnable銆乀ouchPanelDisable銆乀ouchPanelSetMode銆乀ouchPanelReadCalibrationPoint銆乀ouchPanelReadCalibrationAbort銆乀ouchPanelSetCalibration銆乀ouchPanelCalibrateAPoint銆乀ouchPanelPowerHandler銆?/p>
Windows CE瑙︽懜灞忛┍鍔ㄨ姹傜殑DDSI鎺ュ彛鍖呮嫭錛欴dsiTouchPanelAttach銆丏dsiTouchPanelDetach銆丏dsiTouchPanelDisable銆丏dsiTouchPanelEnable銆丏dsiTouchPanelGetDeviceCaps銆丏dsiTouchPanelGetPoint銆丏dsiTouchPanelPowerHandler銆?/p>
4 Windows CE鐨勮Е鎽稿睆鏁版嵁閲囬泦
Windows CE瑙︽懜灞忛┍鍔ㄧ▼搴忛噰鐢ㄤ腑鏂柟寮忓瑙︽懜絎旂殑鎸変笅鐘舵佽繘琛屾嫻嬶紝濡傛灉媯(gè)嫻嬪埌瑙︽懜絎旀寜涓嬪皢浜х敓涓柇騫惰Е鍙戜竴涓簨浠墮氱煡涓涓伐浣滅嚎紼嬪紑濮嬮噰闆嗘暟鎹傚悓鏃訛紝椹卞姩灝嗘墦寮涓涓‖浠跺畾鏃跺櫒錛屽彧瑕佹嫻嬪埌瑙︽懜絎斾粛鐒跺湪鎸変笅鐘舵佸皢瀹氭椂瑙﹀彂鍚屼竴涓簨浠墮氱煡宸ヤ綔綰跨▼閲囬泦鏁版嵁錛岀洿鍒拌Е鎽哥瑪鎶搗鍚庡叧闂瀹氭椂鍣紝騫墮噸鏂版嫻嬫寜涓嬬姸鎬併傞┍鍔ㄤ腑閲囩敤浜嗚Е鎽稿睆涓柇浠ュ強(qiáng)瀹氭椂鍣ㄤ腑鏂袱涓腑鏂簮錛屼笉浠呭彲浠ョ洃鎺цЕ鎽哥瑪鎸変笅鍜屾姮璧風(fēng)姸鎬侊紝鑰屼笖鍙互媯(gè)嫻嬭Е鎽哥瑪鎸変笅鏃剁殑鎷栧姩杞ㄨ抗銆?/p>
瑙︽懜灞忛┍鍔ㄥ湪鍒濆鍖栬繃紼嬭皟鐢═ouchPanelEnable鍑芥暟浣胯兘瑙︽懜灞忋傝鍑芥暟璋冪敤鐨凞DSI鍑芥暟涓猴細(xì)DdsiTouchPanelEnable鍜孌dsiTouchPanelDisable銆傝鍑芥暟瀹炵幇濡備笅 鍐呭錛?/p>
1) 鍒涘緩浜嬩歡hTouchPanelEvent鍜宧CalibrationSampleAvailable銆俬TouchPanelEvent浜嬩歡鍦ㄦ甯哥姸鎬佷笅褰撴湁瑙︽懜絎旀寜涓嬫垨鑰呮寜涓嬪悗闇瑕佸畾鏃墮噰闆嗘暟鎹椂琚Е鍙戙傝宧CalibrationSampleAvailable浜嬩歡鍦ㄦ牎鍑嗙姸鎬佷笅褰撴湁鏍″噯鏁版嵁杈撳叆鏃惰瑙﹀彂錛?/p>
2) 媯(gè)鏌ュ茍鍒濆鍖栨墍闇鐨勪腑鏂璯IntrTouch錛堣Е鎽稿睆涓柇錛夊拰gIntrTouchChanged錛堝畾鏃跺櫒涓柇錛夛紝騫跺皢涓柇gIntrTouch銆乬IntrTouchChanged鍏寵仈鍒頒簨浠秇TouchPanelEvent銆傚綋gIntrTouch錛実IntrTouchChanged涓柇浜х敓鏃跺皢瑙﹀彂hTouchPanelEvent浜嬩歡錛?/p>
3) 鍒涘緩涓涓狪SR綰跨▼TouchPanelpISR銆俆ouchPanelpISR鐢ㄤ簬絳夊緟鍜屽鐞嗚Е鎽稿睆浜嬩歡hTouchPanelEvent錛屽畠鏄暣涓┍鍔ㄧ▼搴忎腑鍞竴鐨勪簨浠舵簮銆?/p>
TouchPanelpISR鍑芥暟鏄疄鐜拌Е鎽稿睆鏁版嵁閲囬泦鍏抽敭鍑芥暟錛屽畠瀹炵幇鐨勫唴瀹逛負(fù)錛?/p>
1) 絳夊緟寰幆錛岀敤浜庢帴鏀秇TouchPanelEvent浜嬩歡錛屽茍鏋勬垚鍑芥暟鐨勪富浣擄紱
2) 閫氳繃璋冪敤DdsiTouchPanelGetPoint鍑芥暟鑾峰彇褰撳墠瑙︽懜灞忎綅緗拰鐘舵佷俊鎭紱
3) 鍦ㄨ幏鍙栨湁鏁堟暟鎹笖鍦ㄦ牎鍑嗙姸鎬佷笅錛屾敹闆嗗茍鎻愪氦鎸変笅鐨勪綅緗俊鎭紱
4) 鍦ㄦ甯哥姸鎬佷笅錛屾牎鍑嗘暟鎹紝騫舵鏌ユ牎鍑嗗悗鏁版嵁鐨勬湁鏁堟э紱
5) 鏈鍚庤皟鐢ㄧ敱GWES浼犲叆鐨勫洖璋冨嚱鏁幫紝鎻愪氦浣嶇疆淇℃伅鍜岀姸鎬佷俊鎭?/p>
鍥犳錛屽湪瑙︽懜灞忛┍鍔ㄧ▼搴忎腑DdsiTouchPanelEnable銆丏dsiTouchPanelDisable鍜孌dsiTouchPanelGetPoint涓変釜DDSI鎺ュ彛鍑芥暟鏄┍鍔ㄥ疄鐜扮殑鍏抽敭鎵鍦ㄣ?/p>
鍦―dsiTouchPanelEnable鍜孌dsiTouchPanelDisable鍑芥暟涓垎鍒墦寮鍜屽叧闂Е鎽稿睆紜歡錛岃繖涓や釜鍑芥暟鍏跺疄鍙互涓嶇湡姝f搷浣滅‖浠訛紝鑰屽彧鏄疄鐜拌蔣浠朵笂鐨勬帶鍒訛紝浣嗘槸涓轟簡闄嶄綆鍔熻楁渶濂藉湪DdsiTouchPanelDisable涓皢瑙︽懜灞忔帶鍒跺櫒鐢墊簮鍏抽棴騫跺湪DdsiTouchPanelEnable鍑芥暟涓墦寮銆?/p>
鍦―dsiTouchPanelGetPoint鍑芥暟涓疄鐜板瑙︽懜灞忔暟鎹殑閲囨牱銆備粠涓婇潰鐨勫垎鏋愬緱鐭DD閫氳繃媯(gè)嫻媓TouchPanelEvent鍜宧CalibrationSampleAvailable浜嬩歡鎺у埗閲囨牱錛岃繖涓や釜浜嬩歡琚Е鍙戦兘灝嗚皟鐢ㄨ鍑芥暟銆傝岃繖涓や釜浜嬩歡瑙﹀彂鏉′歡鏈変袱涓細(xì)
1) 瑙︽懜絎旀寜涓嬫椂浜х敓瑙︽懜灞忎腑鏂璯IntrTouch鏃惰Е鍙戯紱
2) 瑙︽懜絎旀寜涓嬪悗錛屽畾鏃跺櫒琚墦寮錛屽畾鏃跺櫒灝嗗畾鏃朵駭鐢熶腑鏂璯IntrTouchChanged錛屽茍瑙﹀彂浜嬩歡錛岀洿鍒拌Е鎽哥瑪鎶搗涓烘銆?/p>
鍥犳璇ュ嚱鏁頒笉浠呴渶瑕佸瑙︽懜灞忔暟鎹噰鏍鳳紝鑰屼笖闇瑕佸瑙﹀彂鏉′歡榪涜鐘舵佹帶鍒訛紝鍏舵祦紼嬪鍥?鎵紺恒傚浘涓畾涔変簡涓変釜鍙橀噺錛屽畠浠垎鍒負(fù)錛?/p>
1) TouchIrq涓洪潤鎬佸彉閲忔垨鍏ㄥ眬鍙橀噺錛屼笖鍒濆鍊間負(fù)TRUE錛岃鍙橀噺蹇呴』鍦ㄨЕ鎽稿睆鎸変笅騫朵駭鐢熻Е鎽稿睆涓柇鏃惰緗負(fù)FALSE錛?/p>
2) InterruptType涓洪潤鎬佸彉閲忔垨鍏ㄥ眬鍙橀噺錛屼笖鍒濆鍊間負(fù)SYSINTR_NOP錛屽綋鍦ㄥ鐞嗚Е鎽稿睆涓柇鏃惰緗負(fù)SYSINTR_TOUCH錛屽湪澶勭悊瀹氭椂鍣ㄤ腑鏂椂璁劇疆涓篠YSINTR_TOUCH_CHANGED錛屽叾浣欒緗負(fù)SYSINTR_NOP錛屼笖鍦ㄥ鐞嗗畬姣曞悗蹇呴』灝嗗叾浣滀負(fù)鍙傛暟浼犲叆InterruptDone鍑芥暟浠ユ竻闄や腑鏂紱
3) g_NextExpectedInterrupt涓洪潤鎬佸彉閲忔垨鍏ㄥ眬鍙橀噺錛岃鍙橀噺琛ㄧず涓嬩竴涓笇鏈涗駭鐢熺殑涓柇錛屽垵濮嬬姸鎬佷負(fù)PEN_DOWN錛屼篃灝辨槸瑙︽懜絎斿湪鎶搗鐘舵侊紝鍥犳甯屾湜涓嬩竴涓駭鐢熺殑涓柇涓篜EN_DOWN銆傚綋瑙︽懜灞忎腑鏂駭鐢熶互鍙?qiáng)瀹氭椂鍣ㄤ腑鏂骇鐢熸椂璇ュ彉閲忎负PEN_UP_OR_TIMER錛屼篃灝辨槸涓嬩竴涓彲鑳戒駭鐢熺殑鐘舵佷負(fù)瑙︽懜絎旀姮璧風(fēng)姸鎬佹垨鑰呰Е鎽哥瑪鎸変笅浣嗗畾鏃跺櫒涓柇浜х敓銆?/p>
DdsiTouchPanelGetPoint鍑芥暟涓寮濮嬩粠瑙︽懜絎旀姮璧風(fēng)姸鎬佸紑濮嬫墽琛岋紝姝ゆ椂TouchIrq絳変簬TRUE銆傚鏋滄鏃惰Е鎽哥瑪鎸変笅錛屽皢璁劇疆TouchIrq涓篎ALSE錛岃〃紺烘湰嬈¢噰鏍鋒槸鐢變簬瑙︽懜灞忎腑鏂駭鐢熷茍璁劇疆涓嬩竴嬈¤皟鐢ㄧ敱瀹氭椂鍣ㄤ駭鐢熴傜劧鍚庤緗甀nterruptType鐘舵佷負(fù)SYSINTR_TOUCH錛屾帴鐫寮濮嬮噰闆嗘暟鎹茍璁劇疆g_NextExpectedInterrupt鍙橀噺涓篜EN_UP_OR_TIMER錛岃〃紺轟笅涓嬈′駭鐢熺殑涓柇涓哄畾鏃跺櫒涓柇銆傛帴鐫鍒ゆ柇鍦ㄨЕ鎽哥瑪鎸変笅鐘舵侊紙g_NextExpectedInterrupt絳変簬PEN_UP_OR_TIMER錛変笅瑙︽懜絎旀槸鍚︽姮璧鳳紝濡傛灉鎶搗鍒欒緗甮_NextExpectedInterrupt涓篜EN_DOWN鎭㈠鍒版姮璧風(fēng)姸鎬併傛渶鍚庨氳繃灝咺nterruptType浣滀負(fù)鍙傛暟浼犲叆InterruptDone鍑芥暟浠ユ竻闄や腑鏂傚綋瑙︽懜絎旀寜涓嬶紝騫朵駭鐢熷畾鏃跺櫒涓柇鏃訛紝TouchIrq絳変簬FALSE錛屾鏃禝nterruptType琚緗負(fù)SYSINTR_TOUCH_CHANGED錛屽叾浣欑殑鍔ㄤ綔鍩烘湰鍜屼笂闈㈢殑嫻佺▼涓鑷淬?/p>
5 Windows CE涓嬬殑瑙︽懜灞忔牎鍑?br>鐢?shù)闃昏Е鎽稿睆闇瑕佹牎鍑嗐傚簲鐢ㄧ▼搴忛渶瑕佷竴浜涘弬鑰冨鹼紝浠ヤ究灝嗘帴鏀跺埌鐨勮Е鎽稿睆鍧愭爣鏁版嵁杞崲鎴愰珮灞傝蔣浠舵墍闇鐨勫睆騫曞潗鏍囥傜悊鎯蟲儏鍐典笅鏍″噯紼嬪簭鍙鍦ㄤ駭鍝佸垵嬈″姞鐢墊祴璇曡繃紼嬩腑榪愯涓嬈″氨鍙互浜嗭紝鍙傝冨艱瀛樺偍鍦ㄩ潪鏄撳け鎬у瓨鍌ㄥ櫒涓傚湪鐞嗘兂鎯呭喌涓嬪彧闇涓ょ粍鍘熷鏁版嵁錛屽嵆鍦ㄥ睆騫曞瑙掕鍙栫殑鏈灝忓拰鏈澶у箋傝屽湪瀹為檯搴旂敤涓紝鍥犱負(fù)璁稿鐢?shù)闃昏Е鎽稿睆瀛樺湪鏄捐憲鐨勯潪绾挎э紝鍥犳濡傛灉鍦ㄦ渶灝忓拰鏈澶у間箣闂寸畝鍗曠殑鎻掑叆浣嶇疆鏁板間細(xì)瀵艱嚧椹卞姩紼嬪簭闈炲父鐨勪笉綺劇‘銆?/p>
鍦╓indows CE涓氳繃鍦ㄥ嚱鏁癉dsiTouchPanelGetDeviceCaps 涓緗牎鍑嗙偣鐨勪釜鏁幫紝鍦═ouchDriverCalibrationPointGet涓幏鍙栨瘡涓牎鍑嗙偣鐨勫睆騫曞潗鏍囥傚父鐢ㄧ殑鏍″噯鐐規(guī)暟閲忎負(fù)5銆傛牎鍑哢I灝嗗湪鏍″噯鐐瑰潗鏍囧鐩稿簲鏄劇ず涓涓崄瀛楀弶錛岀敤鎴烽渶瑕佺簿紜湴鍦ㄨ鍗佸瓧鍙変綅緗寜涓嬭Е鎽稿睆錛岄┍鍔ㄩ氳繃TouchPanelReadCalibrationPoint鍑芥暟璇誨彇鐩稿簲鐨勮Е鎽稿睆鍧愭爣鍊鹼紝鐒跺悗寮濮嬩笅涓涓牎鍑嗙偣銆傚驚鐜瀹氱殑嬈℃暟鍚庯紝灝嗛噰闆嗗埌鐨勮Е鎽稿睆鍧愭爣鍊煎拰鏍″噯鐐瑰睆騫曞潗鏍囬佸埌TouchPanelSetCalibration鍑芥暟涓繘琛屽鐞嗐傝鍑芥暟灝嗕駭鐢熸牎鍑嗗熀鍑嗗弬鏁般?/p>
TouchPanelSetCalibration鍑芥暟鎵ц鐨勫姩浣滄槸涓濂楁暟瀛︾畻娉曪紝鍏蜂綋鍐呭涓?
鍦ㄨЕ鎽稿睆鏁版嵁涓庡叾浣嶇疆鍋忕Щ鍏崇郴涓斿睆騫曞儚绱犱笌鍏朵綅緗亸縐誨叧緋誨悓涓虹嚎鎬у叧緋誨亣璁炬儏鍐典笅錛岃Е鎽稿睆榪斿洖鐨勪綅緗俊鎭笌鍍忕礌浣嶇疆淇℃伅涔嬮棿鎴?D鍧愭爣鍙樻崲鍏崇郴銆傚垯瀵逛簬瑙︽懜灞忔寜涓嬬偣鐨勮Е鎽稿睆鍧愭爣(Tx,Ty)涓庡叾鍦ㄦ樉紺鴻澶囦綅緗叧緋諱笂鍖歸厤鐨勭偣鐨勫睆騫曞潗鏍?Sx,Sy)涔嬮棿鐨勮漿鎹㈠叧緋伙紝鍙互閫氳繃涓嬭堪鍧愭爣鍙樻崲琛ㄧず錛?/p>
Sx = A1*Tx + B1*Ty + C1
Sy = A2*Tx + B2*Ty + C2
TouchPanelSetCalibration鐨勫叿浣撳伐浣滃氨鏄氳繃鏍″噯鐨勫姩浣滆幏鍙栫殑灞忓箷鍧愭爣鍜岃Е鎽稿睆鍧愭爣TouchCoordinate鏉ョ‘瀹欰1錛孊1錛孋1鍜孉2, B2, C2銆?/p>
6. 緇撴潫璇?br>鏈枃浣滆呯殑鍒涙柊鐐癸細(xì)浠庡垎鏋愬祵鍏ュ紡Windows CE鎿嶄綔緋葷粺涓Е鎽稿睆椹卞姩紼嬪簭鐨勬ā鍨嬪強(qiáng)瀹炵幇鏂規(guī)硶鐨勮搴︽繁鍏ュ墫鏋愪簡Windows CE涓Е鎽稿睆鏁版嵁閲囬泦鍜屾牎鍑嗙殑鎵ц嫻佺▼錛屽浜庣被浼肩郴緇熺殑椹卞姩寮鍙戝叿鏈変竴瀹氱殑鍊熼壌鎬с?/p>
鍙傝冩枃鐚細(xì)
[1] Paul Kovitz. 鐢?shù)闃诲紡瑙︽懜灞従l撴瀯鍜屽疄鐜板師鐞嗭紝澶忔櫘鍏徃錛?003
鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/zhongnanjun_3/archive/2008/11/11/3274020.aspx
杞澆璇鋒敞鏄庡嚭澶?/font> 浣滆?灝忛┈
鍓嶆鏃墮棿縐繪 6.0 BSP錛岀洰鍓嶅凡縐繪鍒拌Е鎽稿睆閮ㄥ垎浜? 縐繪榪囩▼涓鍒頒簡涓嶅皯涓滆タ. 鐢卞叾鏄叧浜庤Е鎽稿睆榪欓儴鍒? 鎺屾彙浜嗗緢澶氫互鍓嶄笉浼?xì)鐨勪笢瑗? 瑙夊緱鏈夊繀瑕佹妸榪欎簺鐭ヨ瘑鐐規(guī)暣鐞嗕竴涓?
涓 紜歡閮ㄥ垎
紜歡涓婄殑鍘熺悊涓嶆槸鏈枃鐨勯噸鐐癸紝鍙涓涓嬪ぇ姒傜殑鍘熺悊(涓昏鏄垜涔熷彧鐭ラ亾澶ф鐨勫師鐞? 姣曠珶鍜變笉鏄悶紜歡鐨? 鍢誨樆!)
鎴戠Щ妞嶇敤鐨勮繖涓睆鏄?20*240 鐨凾FT灞? 鍥涚嚎鐢?shù)闃诲紡瑙﹀? 榪欑瑙﹀睆鐨勫師鐞嗘槸鐢變袱涓數(shù)闃誨眰緇勬垚, 涓涓疄鐜癤浣嶇疆鐨勬祴閲忥紝涓涓敤浜嶻浣嶇疆涓婄殑嫻嬮噺. 綆鍗曟潵璇達(dá)紝灝辨槸褰撶敤瑙︾瑪鎸変笅灞忓箷鏃訛紝涓や釜鐢?shù)闃诲眰鎺ヨ? 鐢?shù)闃诲彂鐢熷彉鍖栧Q岀劧鍚庡湪X Y鏂瑰悜涓婁駭鐢熶俊鍙? 榪欎釜淇″彿鏄數(shù)鍘嬩俊鍙鳳紝 鍐嶇粡榪嘋PU鍐呴儴鍒咥D杞崲涓哄潗鏍囧? 榪欎釜鍘熺悊鏈夌偣鍍忛珮涓墿鐞嗚鐢ㄧ殑婊戝姩鐢?shù)闃诲Q屾湁涓涓渶澶т笂闄愶紝婊戝姩鍒頒笉鍚岀殑鍦版柟錛岄樆鍊間笉鍚? 2410鏈韓闆嗘垚浜唗ouch鐨勬帶鍒跺櫒錛岄氳繃綆鍗曠殑閰嶇疆鍜岃鍙栫浉鍏崇殑瀵勫瓨鍣紝灝卞彲浠ュ疄鐜拌Е鎽稿睆鐨勬搷浣?
浜?椹卞姩閮ㄥ垎
Wince涓嬬殑touch椹卞姩璺熷緢澶氬叾瀹冪殑椹卞姩涓鏍? 鏄垎灞傜殑, 鏈塎DD 鍜孭DD涓ゅ眰. MDD灞傝緋葷粺闅愯棌璧鋒潵, 涓鑸笉鐢ㄦ垜浠潵淇敼. 鑰屾垜浠湡姝e叧蹇冪殑鏄疨DD 灞? 涔熷氨鏄鐢卞紑鍙戣呮潵淇敼鐨勮繖涓灞?
鍒嗘瀽touch椹卞姩鏃訛紝浠ユ垜鏈榪戝垰鍒氱Щ妞嶅埌涓涓熀浜?410鐨勬澘瀛愪笂鐨?.0鐨凚SP鍖呯殑瑙﹀睆椹卞姩涓轟緥.鍒?span style="COLOR: red">C:\WINCE600\PLATFORM\DEVICEEMULATOR\SRC\DRIVERS\TOUCH涓? 鎵懼埌s3c2410x_touch.cpp鏂囦歡. 榪欓噷闈㈡鏄疨DD灞傜殑瀹炵幇浠g爜. 瀹規(guī)槗鍙戠幇榪欓噷闈㈢殑鍑芥暟鍒嗕負(fù)涓ょ被錛屼竴綾繪槸浠SP寮澶寸殑鍑芥暟錛屼竴綾繪槸浠DSI寮澶寸殑鍑芥暟. TSP寮澶寸殑鍑芥暟涓哄唴閮ㄧ鏈夌殑鍑芥暟錛屾槸琚獶DSI璋冪敤鐨? 鑰孌DSI寮澶寸殑鍑芥暟鍒欐槸瀵瑰鐨勬帴鍙? 涔熷氨鏄MDD灞傜殑鍑芥暟璋冪敤鐨勬帴鍙?
DdsiTouchPanelEnable鏄鍏堣璋冪敤鐨勪竴涓閮ㄦ帴鍙? 瀹冪殑瀹炵幇鍙弬瑙佹簮紼嬪簭, 瀹冧富
瑕佸仛浜嗕笅闈㈠嚑涓簨鎯?
1 閫氳繃璋冪敤TSP_VirtualAlloc鍑芥暟涓洪┍鍔ㄦ墍鐢ㄧ殑IO,涓柇絳夌‖浠朵腑鏂垎閰嶅唴瀛樼┖闂?
2 閫氳繃璋冪敤KernelIoControl鍚戠郴緇熺敵璇蜂袱涓腑鏂紝濡傛灉鐢寵鎴愬姛錛岃祴浜堢浉搴旂殑閫昏緫涓柇鍙? KernelIoControl鍚戝簳灞傛槸璋冪敤OEMIoControl鍑芥暟, OEMIoControl鏍規(guī)嵁KernelIoControl浼犺繘鏉ョ殑IOCTL浠g爜錛屽仛鐩稿簲鐨勬搷浣?姣斿榪欓噷, IOCTL鏄疘OCTL_HAL_REQUEST_SYSINTR錛?瀹冩槸鍚戝唴鏍哥敵璇蜂竴涓墿鐞嗕腑鏂拰閫昏緫涓柇鐨勬槧灝?
3 閫氳繃璋冪敤TSP_PowerOn鏉ュ垵濮嬪寲涓柇鎺у埗鍣紝ADC瀵勫瓨鍣紝瀹氭椂鍣ㄧ瓑, 鍦═SP_PowerOn鐨勫疄鐜頒腑錛屾湁鍑犵偣瑕佽鏄庝竴涓?
ADCDLY 榪欎釜鍊煎湪涓嶅悓鐨勬ā寮忎笅鎰忎箟涓嶅悓, 鍥犱負(fù)鍓嶉潰閫氳繃ADCTSC宸茬粡閰嶇疆涓簑ait for interrupt mode, 鎵浠ヨ繖涓肩殑鎰忎箟鍜屼綘鐨勮Е絎旀寜涓嬫椂, 浠庝駭鐢熶腑鏂俊鍙峰埌寮濮嬭嚜鍔ㄨ漿鎹,Y鏃剁殑鏃墮棿闂撮殧鏄浉鍏崇殑錛屽畠鐨勫崟浣嶆槸ms
v_pPWMregs->TCNTB3 = g_timer3_sampleticks
TCNTB3鏄痶imer3鐨刢ount buffer, 褰撳畾鏃跺櫒鍚姩鏃? 0錛岃繖涓間互涓涓緗ソ鐨勯鐜囬掑噺錛岀洿鍒板噺鍒?錛?榪欐椂浼?xì)漶旂敓涓涓畾鏃跺櫒涓柇. 榪欎釜鏈変粈涔堢敤鍛? 瑕佺悊瑙e畠錛屽緱鐭ラ亾瑙︽懜灞忓湪涓柇妯″紡涓嬫槸濡備綍宸ヤ綔鐨?
褰撴垜浠寜涓嬬殑瑙︽懜灞忔椂錛屼細(xì)浜х敓涓涓狝DC鐨勪腑鏂? 鍚屾椂鎴戜滑鐨勯┍鍔ㄨ繕浼?xì)鍚姩涓涓畾鏃跺櫒, 榪欎釜瀹氭椂鍣ㄨЕ鍙戜竴涓簨浠跺仛鏁版嵁閲囬泦, 鍦ㄦ垜浠殑鎵嬫垨瑙︾瑪鎶搗鏉ュ墠錛岃繖涓畾鏃跺櫒涓嶆柇鐨勮Е鍙戦噰闆嗕簨浠訛紝鐩村埌瀹冭鍏抽棴, 鑰屽畠浠涔堟椂鍊欎細(xì)琚叧闂憿錛屽氨鏄湪瑙︾瑪鐨勬姮璧鋒潵鏃? 涓嬮潰鎴彇鐨勪唬鐮佸緢濂界殑璇存槑鐨勮繖涓師鐞?
if ( (v_pADCregs->ADCDAT0 & (1 << 15)) |(v_pADCregs->ADCDAT1 & (1 << 15)) )
{
bTSP_DownFlag = FALSE;
DEBUGMSG(ZONE_TIPSTATE, (TEXT("up\r\n")));
v_pADCregs->ADCTSC &= 0xff;
*pUncalX = x;
*pUncalY = y;
TSP_SampleStop();
……
}
涓婇潰鐨勪唬鐮侊紝if鍒ゆ柇鐨勬鏄槸鍚︽姮璧?
鑰実_timer3_sampleticks鐨勫兼槸榪欐牱璁$畻鍑烘潵鐨?
g_timer3_freq = (g_s3c2410_pclk / TIMER3_DIVIDER);
g_timer3_sampleticks = (g_timer3_freq / TSP_SAMPLE_RATE_LOW);
TIMER3_DIVIDER 鐨勫兼槸2, TSP_SAMPLE_RATE_LOW鐨勫兼槸100, 鐢?/p>
v_pPWMregs->TCFG1 &= ~(0xf << 12);
v_pPWMregs->TCFG1 |= (0 << 12);
鍙煡瀹氭椂鍣?/2鍒嗛, 鎵浠ワ紝寰堝鏄撹綆楀嚭錛屾墍璁劇疆鐨勫畾鏃跺櫒鏄瘡10ms浜х敓涓嬈″畾鏃跺櫒涓柇
鑰岃Е鎽稿睆涓柇鏄湪浣犳寜涓嬪拰鎶搗鏃朵駭鐢熺殑.
DdsiTouchPanelGetPoint鏄噰鏍風(fēng)殑涓昏瀹炵幇鍑芥暟錛屽綋MDD媯(gè)嫻嬪埌涓柇浜嬩歡鍙戠敓鏃訛紝璇ュ嚱鏁頒細(xì)琚皟鐢? 瑙︽懜灞忕殑涓柇鏄疭YSINTR_TOUCH, 鑰屽畾鏃跺櫒鐨勪腑鏂槸SYSINTR_TOUCH_CHANGED
璇ュ嚱鏁扮敤if else鍒嗗埆澶勭悊涓ょ涓柇, 濡備笅:
if (v_pINTregs->SUBSRCPND & (1<<IRQ_SUB_TC)) /* 瑙︽懜灞忎腑鏂?/
{
……
}
else /*瀹氭椂鍣ㄤ腑鏂?span style="WHITE-SPACE: pre"> */
{
}
DdsiTouchPanelGetPoint鍑芥暟鐨勫疄鐜頒唬鐮佷腑錛岃皟鐢ㄤ簡涓や釜寰堥噸瑕佺殑鍑芥暟TSP_TransXY鍜孴SP_GetXY
闇瑕佽鏄庣殑鏄紝榪欎袱涓嚱鏁扮殑瀹炵幇璺烲CD鏈韓鐨勫垎杈ㄧ巼鏄病鏈夊叧緋葷殑.
TSP_GetXY鐢ㄦ潵鑾峰埌AD閲囨牱鍊鹼紝TSP_TransXY鎶婂畠杞寲涓哄睆涓婄殑鍧愭爣. 鎴戠Щ妞峵ouch椹卞姩鏃訛紝閬囧埌榪囩偣灞忓箷涓婇潰錛屼笅闈㈡湁鍙嶅簲錛屾垨鑰呯偣宸︿笂瑙掞紝鍙充笂瑙掓湁鍙嶅簲絳夌被浼肩殑闂, 閮芥槸鍥犱負(fù)榪欎袱涓嚱鏁版病瀹炵幇濂?
鍏堟潵鐪婽SP_GetXY鍑芥暟.瀹冪殑瀹炵幇濡備笅:
TSP_GetXY(INT *px, INT *py)
{
INT i;
INT xsum, ysum;
INT x, y;
INT dx, dy;
xsum = ysum = 0;
for (i = 0; i < TSP_SAMPLE_NUM; i++)
{
v_pADCregs->ADCTSC = (0 << 8) | /* UD_Sen*/
(1 << 7) | /* YMON 1 (YM = GND)*/
(1 << 6) | /* nYPON 1 (YP Connected AIN[n])*/
(0 << 5) | /* XMON 0 (XM = Z)*/
(1 << 4) | /* nXPON 1 (XP = AIN[7])*/
(1 << 3) | /* Pull Up Enable*/
(1 << 2) | /* Auto ADC Conversion Mode*/
(0 << 0); /* No Operation Mode*/
v_pADCregs->ADCCON |= (1 << 0); /* Start Auto conversion*/
while (v_pADCregs->ADCCON & 0x1); /* check if Enable_start is low*/
while (!(v_pADCregs->ADCCON & (1 << 15))); /* Check ECFLG*/
y = (0x3ff & v_pADCregs->ADCDAT1);
x = (0x3ff & v_pADCregs->ADCDAT0);
xsum += x;
ysum += y;
}
*px = xsum / TSP_SAMPLE_NUM;
*py = ysum / TSP_SAMPLE_NUM;
v_pADCregs->ADCTSC = (1 << 8) | /* UD_Sen*/
(1 << 7) | /* YMON 1 (YM = GND)*/
(1 << 6) | /* nYPON 1 (YP Connected AIN[n])*/
(0 << 5) | /* XMON 0 (XM = Z)*/
(1 << 4) | /* nXPON 1 (XP = AIN[7])*/
(0 << 3) | /* Pull Up Disable*/
(0 << 2) | /* Normal ADC Conversion Mode*/
(3 << 0); /* Waiting Interrupt*/
dx = (*px > x) ? (*px - x) : (x - *px);
dy = (*py > y) ? (*py - y) : (y - *py);
return((dx > TSP_INVALIDLIMIT || dy > TSP_INVALIDLIMIT) ? FALSE : TRUE);
}
鍏充簬榪欎釜鍑芥暟鏈夊嚑鐐硅璇存槑.
鏍規(guī)嵁2410鐨勬墜鍐? ADCDAT0 淇濆瓨鏄疿鏂瑰悜涓婇噰鏍風(fēng)殑緇撴灉, ADCDAT1 淇濆瓨鏄痀鏂瑰悜涓婇噰鏍風(fēng)殑緇撴灉, 鎵浠? 鎴戜滑鐪嬪埌涓嬮潰鐨勪袱琛屼唬鐮?/p>
y = (0x3ff & v_pADCregs->ADCDAT1);
x = (0x3ff & v_pADCregs->ADCDAT0);
涓庝笂0x3ff, 鏄洜涓? ADCDAT瀵勫瓨鍣ㄥ彧鐢ㄤ簡鍓嶉潰 10浣嶆潵淇濆瓨AD閲囨牱鐨勭粨鏋? 鑰岃繖鍜?410鍐呴儴鐨凙D妯″潡鍙湁10浣嶇簿搴︽槸鐩鎬竴鑷寸殑.鎵浠ワ紝AD杞崲鍚庣殑鏈澶у間笉浼?xì)瓒厴q?024-1.
褰撶劧涓婂湪閭g璁$畻鏂規(guī)硶騫朵笉鏄粷瀵圭殑 錛?鏍規(guī)嵁紜歡鏋勯犵殑涓嶅悓, 姣斿鏈夊彲鑳戒綘x鏂瑰悜鐨勫潗鏍囧煎拰閲囨牱鍊兼垚鍙嶆瘮錛屽氨瑕佹寜涓嬮潰鐨勬柟寮忚綆?
x = 0x3ff - (0x3ff & v_pADCregs->ADCDAT0);
鍐嶇湅TSP_TransXY鍑芥暟. 鎴戠Щ妞嶇殑鐗堟湰鐨勫疄鐜板涓?
PRIVATE void
TSP_TransXY(INT *px, INT *py)
{
*px = (*px >= TSP_MAXX) ? (TSP_MAXX) : *px;
*py = (*py >= TSP_MAXY) ? (TSP_MAXY) : *py;
*px = (*px - TSP_MINX);
*py = (*py - TSP_MINY);
*px = (*px >= 0) ? *px : 0;
*py = (*py >= 0) ? *py : 0;
*px = *px * TSP_LCDY / (TSP_MAXX - TSP_MINX);
*py = *py * TSP_LCDX / (TSP_MAXY - TSP_MINY);
*px = (*px >= TSP_LCDY)? (TSP_LCDY - 1) : *px;
*py = (*py >= TSP_LCDX)? (TSP_LCDX - 1) : *py;
*px = TSP_LCDY - *px - 1;
*py = TSP_LCDX - *py - 1;
}
榪欎釜瀹炵幇鏄垜鍦ㄦā鎷熷櫒鐨勫疄鐜頒唬鐮佸熀紜涓婁慨鏀圭殑. 榪欎釜鍑芥暟璁$畻X,Y鐨勫潗鏍囩敤鐨勬槸涓涓叕寮忥紝鑷充簬榪欎釜鍏紡鏄庝箞鏉ョ殑錛屾垜灝變笉澶竻妤氫簡. 鍙鏄庝竴鐐?
#define TSP_MINX 88
#define TSP_MINY 84
#define TSP_MAXX 952
#define TSP_MAXY 996
涓婇潰鍥涗釜鍊兼槸瀹氫箟X+, X-, Y+, Y-鍥涗釜鏈夋晥鐨勯噰鏍峰? 鐞嗚涓婂簲璇ユ槸0鍜?023(10 bit ADC), 浣嗗疄闄呰偗瀹氭湁鍋忓樊錛屽噯紜潵璁? 鎹簡涓嶅悓鐨勭‖浠跺鉤鍙幫紝榪欏洓涓煎簲璇ユ槸瑕侀噸鏂版祴榪囩殑. 鎴戝氨鐩存帴娌跨敤鍘烞SP涓殑鍊間簡.
int x=1;
銆銆浣嗕綘浠庢病鐢ㄥ埌榪?x銆備篃璁歌繖涓琛屾槸浣犱互鍓嶄嬌鐢?x 鏃剁暀涓嬫潵鐨勶紝鍙垹闄や簡浣跨敤瀹冪殑浠g爜錛岃屽繕浜嗗垹闄よ繖涓彉閲忋俉arning Level 4 鑳芥壘鍒拌繖浜涘皬楹葷儲(chǔ)銆傛墍浠ワ紝涓轟粈涔堜笉璁╃紪璇戝櫒甯姪浣犲畬鎴愬彲鑳芥槸鏈楂樼駭鍒殑涓撲笟鍖栧憿錛熺敤Level 4 緙栬瘧鏄睍紺轟綘宸ヤ綔鎬佸害鐨勪竴縐嶆柟寮忋傚鏋滀綘涓哄叕浼椾嬌鐢ㄨ呯紪鍐欏簱錛孡evel 4 鍒欐槸紺句氦紺艱妭涓婇渶瑕佺殑銆備綘涓嶆兂寮鴻揩浣犵殑寮鍙戜漢鍛樹嬌鐢ㄤ綆綰ч夐」娓呮磥鍦扮紪璇戜粬浠殑浠g爜銆?br>銆銆闂鏄紝Level 4 瀹炲湪鏄お榪囦簬娉ㄦ剰緇嗚妭錛屽湪 Level 4 涓婏紝緙栬瘧鍣ㄨ繛鏈紩鐢ㄥ弬鏁拌繖鏍鋒棤浼ゅぇ闆呯殑浜嬫儏涔熻鎶辨紙褰撶劧錛岄櫎闈炰綘鐪熺殑鏈夋剰浣跨敤榪欎釜鍙傛暟錛岃繖鏃朵究鐩稿畨鏃犱簨錛夈傚亣璁句綘鏈変竴涓嚱鏁板甫鏉ヤ袱涓弬鏁幫紝浣嗕綘鍙嬌鐢ㄥ叾涓竴涓細(xì)
int SomeFunction(int arg1, int arg2){ return arg1+5;}
浣跨敤 /W4錛岀紪璇戝櫒鎶辨細(xì)
“warning C4100: ''arg2'' : unreferenced formal parameter.”
涓轟簡楠楄繃緙栬瘧鍣紝浣犲彲浠ュ姞涓?UNREFERENCED_PARAMETER(arg2)銆傜幇鍦ㄧ紪璇戝櫒鍦ㄧ紪璇戜綘鐨勫紩鐢?arg2 鐨勫嚱鏁版椂渚夸細(xì)浣忓彛銆傚茍涓旂敱浜庤鍙ワ細(xì)
arg2;
瀹為檯涓婁笉鍋氫換浣曚簨鎯咃紝緙栬瘧鍣ㄤ笉浼?xì)湄?fù)涔嬩駭鐢熶換浣曚唬鐮侊紝鎵浠ュ湪絀洪棿鍜屾ц兘涓婁笉浼?xì)鏈変恢M綍鎹熷け銆?/p>
銆銆緇嗗績鐨勪漢鍙兘浼?xì)闂Q氭棦鐒朵綘涓嶄嬌鐢?arg2錛岄偅褰撳垵涓轟綍瑕佸0鏄庡畠鍛紵閫氬父鏄洜涓轟綘瀹炵幇鏌愪釜鍑芥暟浠ユ弧瓚蟲煇浜汚PI鍥烘湁鐨勭講鍚嶉渶瑕侊紝渚嬪錛孧FC鐨?OnSize 澶勭悊渚嬬▼鐨勭講鍚嶅繀欏昏鍍忎笅闈㈣繖鏍鳳細(xì)
void OnSize(UINT nType, int cx, int cy);
銆銆榪欓噷 cx/cy 鏄獥鍙f柊鐨勫/楂橈紝nType 鏄竴涓被浼?SIZE_MAXIMIZED 鎴?SIZE_RESTORED 榪欐牱鐨勭紪鐮侊紝琛ㄧず紿楀彛鏄惁鏈澶у寲鎴栨槸甯歌澶у皬銆備竴鑸綘涓嶄細(xì)鍦ㄦ剰 nType錛屽彧浼?xì)鍏虫?cx 鍜?xy銆傛墍浠ュ鏋滀綘鎯崇敤 /W4錛屽垯蹇呴』浣跨敤 UNREFERENCED_PARAMETER(nType)銆侽nSize 鍙槸涓婂崈涓?MFC 鍜?Windows 鍑芥暟涔嬩竴銆傜紪鍐欎竴涓熀浜?Windows 鐨勭▼搴忥紝鍑犱箮涓嶅彲鑳戒笉紕板埌鏈紩鐢ㄥ弬鏁般?br>銆銆璇翠簡榪欎箞澶氬叧浜?UNREFERENCED_PARAMETER 鍐呭銆侸udy 鍦ㄥス鐨勯棶棰樹腑榪樻彁鍒頒簡鍙︿竴涓?C++ 紼嬪簭鍛樺父鐢ㄧ殑騫朵笖鍏朵綔鐢ㄤ笌 UNREFERENCED_PARAMETER 鐩稿悓鐨勮瘈紿嶏紝閭e氨鏄敞閲婂嚱鏁扮講鍚嶄腑鐨勫弬鏁板悕錛?/p>
void CMyWnd::OnSize(UINT /* nType */, int cx, int cy){}
銆銆鐜板湪 nType 鏄湭鍛藉悕鍙傛暟錛屽叾鏁堟灉灝卞儚浣犳暡鍏?OnSize(UINT, int cx, int cy)涓鏍楓傞偅涔堢幇鍦ㄧ殑鍏抽敭闂鏄細(xì)浣犲簲璇ヤ嬌鐢ㄥ摢縐嶆柟娉曗斺旀湭鍛藉悕鍙傛暟錛岃繕鏄?UNREFERENCED_PARAMETER錛?br>銆銆澶у鏁版儏鍐典笅錛屼袱鑰呮病浠涔堝尯鍒紝浣跨敤鍝竴涓函綺規(guī)槸椋庢牸闂銆傦紙浣犲枩嬈綘鐨?java 鍜栧暋鏄粦鑹茶繕鏄ザ娌圭殑棰滆壊錛燂級(jí)浣嗘垜璁や負(fù)鑷沖皯鏈変竴縐嶆儏鍐靛繀欏諱嬌鐢?UNREFERENCED_PARAMETER銆傚亣璁句綘鍐沖畾紿楀彛涓嶅厑璁告渶澶у寲銆傞偅涔堜綘渚跨鐢?Maximize 鎸夐挳錛屼粠緋葷粺鑿滃崟涓垹闄わ紝鍚屾椂闃繪姣忎竴涓敤鎴瘋兘澶熸渶澶у寲紿楀彛鐨勬搷浣溿傚洜涓轟綘鏄亸鎵х媯錛堝ぇ澶氭暟濂界殑紼嬪簭鍛橀兘鏄亸鎵х媯錛夛紝浣犳坊鍔犱竴涓?ASSERT 錛堟柇璦錛変互紜繚浠g爜鎸夌収浣犵殑鎰忓浘榪愯錛?/p>
void CMyWnd::OnSize(UINT nType, int cx, int cy){ ASSERT(nType != SIZE_MAXIMIZE); ... // use cx, cy}
銆銆璐ㄦ鍥㈤槦绔敖鎵鑳戒互鍚勭鏂瑰紡榪愯浣犵殑紼嬪簭錛孉SSERT 浠庢病鏈夊脊鍑鴻繃錛屼簬鏄綘璁や負(fù)緙栬瘧鐢熸垚 Release 鐗堟湰鏄畨鍏ㄧ殑銆備絾鏄鏃?_DEBUG 瀹氫箟娌℃湁浜嗭紝ASSERT(nType != SIZE_MAXIMIZE)灞曞紑涓?((void)0)錛屽茍涓?nType 涓涓嬪瓙鎴愪簡涓涓湭寮曠敤鍙傛暟錛佽繖鏍瘋繘鍏ヤ綘騫插噣鐨勭紪璇戙備綘鏃犳硶娉ㄩ噴鎺夊弬鏁拌〃涓殑 nType錛屽洜涓轟綘瑕佸湪 ASSERT 涓嬌鐢ㄥ畠銆備簬鏄湪榪欑鎯呭喌涓嬧斺斾綘鍞竴浣跨敤鍙傛暟鐨勫湴鏂規(guī)槸鍦?ASSERT 涓垨鍏跺畠 _DEBUG 鏉′歡浠g爜涓斺斿彧鏈?UNREFERENCED_PARAMETER 浼?xì)淇濇寔缂栬瘧鍣ㄥ?Debug 鍜?Release 鐢熸垚妯″紡涓嬮兘娌℃湁闂銆傜煡閬撲簡鍚楋紵
銆銆緇撴潫璁ㄨ涔嬪墠錛屾垜鎯寵繕鏈変竴涓棶棰樻垜娌℃湁鎻愬強(qiáng)錛屽氨鏄綘鍙互璞′笅闈㈣繖鏍風(fēng)敤 pragma 鎸囦護(hù)鎶戝埗鍗曚竴鐨勭紪璇戝櫒璀﹀憡錛?/p>
#pragma warning( disable : 4100 )
4100 鏄湭寮曠敤鍙傛暟鐨勫嚭閿欎唬鐮併俻ragma 鎶戝埗鍏朵綑鏂囦歡/妯″潡鐨勮璀﹀憡銆傜敤涓嬮潰鏂規(guī)硶鍙互閲嶆柊鍚敤榪欎釜璀﹀憡錛?/p>
#pragma warning( default : 4100 )
銆銆涓嶇鎬庢牱錛岃緝濂界殑鏂規(guī)硶鏄湪紱佺敤鐗瑰畾鐨勮鍛婁箣鍓嶄繚瀛樻墍鏈夌殑璀﹀憡鐘舵侊紝鐒跺悗錛岀瓑浣犲仛瀹屼箣鍚庡啀鍥炲埌浠ュ墠鐨勯厤緗傞偅鏍鳳紝浣犱究鍥炲埌鐨勪互鍓嶇殑鐘舵侊紝榪欎釜鐘舵佷笉涓瀹氭槸緙栬瘧鍣ㄧ殑榛樿鐘舵併?br>銆銆鎵浠ヤ綘鑳借薄涓嬮潰榪欐牱鍦ㄤ唬鐮佺殑鍓嶅悗鐢?pragma 鎸囦護(hù)鎶戝埗鍗曚釜鍑芥暟鐨勬湭寮曠敤鍙傛暟璀﹀憡錛?/p>
#pragma warning( push ) #pragma warning( disable : 4100 )void SomeFunction(...){}#pragma warning( pop )
銆銆褰撶劧錛屽浜庢湭寮曠敤鍙傛暟鑰岃█錛岃繖縐嶆柟娉曟湭鍏嶅啑闀匡紝浣嗗浜庡叾瀹冪被鍨嬬殑璀﹀憡鏉ヨ鍙兘灝變笉鏄繖鏍蜂簡銆傚簱鐢熸垚鑰呴兘鏄敤 #pragma warning 鏉ラ樆濉炶鍛婏紝榪欐牱浠栦滑鐨勪唬鐮佸彲浠ョ敤 /W4 榪涜娓呮磥緙栬瘧銆侻FC 涓厖婊′簡榪欐牱鐨?pragmas 鎸囦護(hù)銆傝繕鏈夊ソ澶氱殑 #pragma warning 閫夐」鎴戞病鏈夊湪鏈枃璁ㄨ銆傛湁鍏沖畠浠殑淇℃伅璇峰弬鑰冪浉鍏蟲枃妗c?/p>
鏈枃鏉ヨ嚜CSDN鍗氬錛岃漿杞借鏍囨槑鍑哄錛?a >http://blog.csdn.net/apunix/archive/2008/01/14/2043945.aspx
DBGPARAM dpCurSettings =
{
TEXT("PCIBUS"), {
TEXT("Errors"),TEXT("Warnings"),TEXT("Functions"),TEXT("Initialization"),
TEXT("Enumeration"),TEXT("Load Order"),TEXT("Resource"),TEXT("Undefined"),
TEXT("Undefined"),TEXT("Undefined"),TEXT("Undefined"),TEXT("Undefined"),
TEXT("Undefined"),TEXT("Undefined"),TEXT("Undefined"),TEXT("Undefined") },
0x20
};
鍏堟潵瑙i噴涓涓?/span>DBGPARAM緇撴瀯錛岃緇撴瀯鍦?/span>Dbgapi.h涓畾涔夛紝鎵浠ュ湪瀹氫箟dpCurSettings鐨勬椂鍊欒繕闇瑕佸寘鍚繖涓ご鏂囦歡錛岃緇撴瀯瀹氫箟濡備笅錛?/span>
typedef struct _DBGPARAM {
WCHAR lpszName[32]; //妯″潡鐨勫悕瀛?/span>
WCHAR rglpszZones[16][32]; //璋冭瘯鍩熺殑鍚嶅瓧
ULONG ulZoneMask; //璋冭瘯鍩熺殑鎺╃爜
}DBGPARAM, *LPDBGPARAM;
鍦ㄤ笂闈㈢殑渚嬪瓙涓彲浠ョ湅鍒幫紝絎竴涓槸妯″潡鐨勫悕瀛楋紝鍙?/span>PCIBUS銆傝屽悗瀹氫箟浜?/span>16涓煙鐨勫悕瀛楋紝鍏朵腑鍙敤鍒頒簡7涓煙錛屽墿涓嬬殑閮藉畾涔変負(fù)Undefined浜嗐傛渶鍚庝竴涓暟瀛椾負(fù)鍩熺殑鎺╃爜錛岃〃紺哄綋鍓嶅摢涓煙鏄嬋媧葷殑錛?/span>0x20琛ㄧず鍙湁絎?/span>6涓煙鏄嬋媧葷殑銆備粠涓婇潰鐨勪緥瀛愯繕鍙互鐪嬪嚭錛屽墠7涓煙鏄湁鎰忎箟鐨勶紝鑰屼笖鎸夌収欏哄簭鍒嗗埆瀵瑰簲1鍒?/span>7銆備笅闈㈤拡瀵硅繖浜涘煙闇瑕佸畾涔夌浉搴?/span>Debug璋冭瘯鐨勫畯瀹氫箟錛?/span>
#define DBGZONE_ERROR 1
#define DBGZONE_WARNING 2
#define DBGZONE_FUNCTION 3
#define DBGZONE_INIT 4
#define DBGZONE_ENUM 5
#define DBGZONE_LOADORDER 6
#define DBGZONE_RESOURCE 7
涓婅堪瀹忓畾涔夊搴斿湪dpCurSettings涓殑7涓煙錛岀劧鍚庡氨鍙互鍦ㄦ墦鍗頒俊鎭殑鏃跺欙紝閫氳繃榪欎簺瀹忓畾涔夋潵瀵瑰簲鐩稿簲鐨勮皟璇曞煙浜嗐備緥濡傦細(xì)
浠庤繖孌典唬鐮佸彲浠ョ湅鍑猴紝濡傛灉dpCurSettings涓殑鎺╃爜瀹氫箟涓?/span>0x20錛岄偅涔堝湪DEBUGMSG鐨勬墦鍗頒腑錛屽彧鏈夋潯浠朵負(fù)DBGZONE_LOADORDER鎵嶄細(xì)琚墦鍗幫紝寰幆涓殑鍓嶄袱涓墦鍗頒俊鎭槸涓嶄細(xì)琚墦鍗扮殑銆傚鏋滄兂璁╀笂闈㈢殑浠g爜涓殑鎵鏈?/span>DEBUGMSG閮借兘鎵撳嵃蹇呴』璁劇疆鎺╃爜濡備笅錛?/span>
dpCurSettings.ulZoneMask = DBGZONE_ERROR | DBGZONE_WARNING | DBGZONE_LOADORDER;
鍦ㄤ竴涓ā鍧椾腑瀹氫箟浜嗚皟璇曞煙錛屽鏋滄兂鍦ㄧ郴緇熶腑鍘諱嬌鐢ㄨ繕蹇呴』娉ㄥ唽璇ヨ皟璇曞煙錛岄渶瑕佺敤鍒扮殑鍑芥暟鍙?/span>DEBUGREGISTER(..)錛屽叾涓鎶婅璋冭瘯妯″潡鐨勫彞鏌勪綔涓哄弬鏁頒紶緇欏畠銆備緥濡傦細(xì)
DllMain(..)
{
switch(op)
{
case DLL_PROCESS_ATTACH:
DEBUGREGISTER(hPCIBUS);
break;
….
}
}
瀹屾垚浜嗕笂榪板伐浣滀互鍚庯紝灝卞彲浠ラ噸鏂扮紪璇戣皟璇曠殑妯″潡錛岀劧鍚庤繍琛岀郴緇熸潵璋冭瘯浜嗐傝皟璇曞煙鐨勪竴涓ソ澶勫氨鏄湪Debug鐨勮繃紼嬩腑錛屼笉闇瑕佺粓姝㈢郴緇熷彲浠ュ姩鎬佺殑鏀瑰彉璋冭瘯鍩燂紝鏂逛究鎴戜滑鍒嗘瀽闂銆傞鍏堬紝鎴戜滑鍙互鍩轟簬Platform. Builder涓殑CE Debug Zones鏉ヨ皟璇曪紝鍦?/span>VS2005鐨勮彍鍗曚腑閫夋嫨Target錛岀劧鍚庨夋嫨CE Debug Zones錛屽鍥撅細(xì)
鐒跺悗浼?xì)鍑虹庮C竴涓?/span>Debug Zones鐨勭獥鍙o紝鍦ㄧ獥鍙e脊鍑轟互鍚庯紝瀹冨彲鑳戒細(xì)鑺變竴鐐規(guī)椂闂存潵鏀墮泦褰撳墠鏀寔Debug Zone鐨勬ā鍧楋紝濡備笅鍥撅細(xì)
璇ュ浘鍙槸涓涓緥瀛愶紝宸﹁竟鏄劇ず浜嗗彲璋冭瘯鐨勬ā鍧楋紝閫夋嫨serial_SMDK2410.dll榪欎釜妯″潡錛屽氨鏄?/span>S3C2410鐨勪覆鍙i┍鍔ㄦā鍧椼傚湪鍙充晶鍙互鐪嬪埌鍚勪釜璋冭瘯鍩熷強(qiáng)鍚嶅瓧錛岀敤鎴峰彲浠ユ牴鎹渶瑕佹潵閫夋嫨鎵撳紑鍜屽叧闂浉搴旂殑璋冭瘯鍩燂紝鏈鍚庣偣鍑?/span>Apply鍜?/span>OK灝卞彲浠ヤ簡銆?/span>
褰撶劧錛岃繕鏈夊叾浠栫殑鏂規(guī)硶鏉ヤ慨鏀硅皟璇曞煙錛屼竴縐嶆柟娉曟槸浣跨敤Target Control涓殑zo鍛戒護(hù)鏉ヤ慨鏀癸紝Target Control灝嗗湪浠ュ悗浠嬬粛銆傝繕鏈変竴縐嶆柟娉曞氨鏄氳繃SetDbgZone(..)鍑芥暟鏉ヤ慨鏀廣傚畾涔夊涓嬶細(xì)
BOOL SetDbgZone(DWORDdwProcid, LPVOIDlpvMod, LPVOIDbaseptr, DWORDzone, LPDBGPARAMlpdbgTgt)
dwProcid錛?/span> 榪涚▼鐨勫彞鏌?/span>
lpvMod錛?/span> 璋冭瘯妯″潡鐨勫彞鏌?/span>
baseptr錛?/span> 璁劇疆涓?/span>NULL
zone錛?/span> 鏂扮殑璋冭瘯鍩熸帺鐮?/span>
lpdbgTgt錛?/span> 榪斿洖鏂扮殑DBGPARAM緇撴瀯
涓婇潰瀵?/span>Debug Zone鐨勫畾涔夛紝浣跨敤浠ュ強(qiáng)璋冭瘯浣滀簡澶ц嚧鐨勪粙緇嶏紝鎸夌収涓婇潰鐨勬楠ゅ彲浠ョ粰涓涓ā鍧楁坊鍔犺皟璇曞煙錛屾敞鍐岃皟璇曞煙騫跺湪緋葷粺榪愯浠ュ悗闅忔椂鏇存敼璋冭瘯鍩燂紝鍏舵牴鏈洰鐨勬棤闈炴槸甯姪鎴戜滑鏉ヨ皟璇曟ā鍧楀拰鍒嗘瀽闂銆備竴鑸儏鍐典笅錛岃皟璇曞煙鍙湪Debug妯″紡涓嬩嬌鐢紝浣嗘槸涔熷彲浠ュ湪Release妯″紡涓嬩嬌鐢ㄣ備絾鏄湁浜涘湴鏂歸渶瑕佷慨鏀癸紝棣栧厛鍓嶉潰宸茬粡浠嬬粛榪?/span>Debug妯″紡涓嬬殑鎵撳嵃鐢?/span>DEBUGMSG錛岃?/span>Release妯″紡涓嬬殑鎵撳嵃搴旇浣跨敤RETAILMSG鍑芥暟銆傛墍浠ュ湪Release妯″紡涓嬶紝鎵撳嵃鍑芥暟搴旇鏀逛負(fù)RETAILMSG鍑芥暟銆傝繕鏈夊湪娉ㄥ唽璋冭瘯鍩熺殑鏃跺欙紝涓嶈兘鍐嶄嬌鐢?/span>DEBUGREGISTER(..)鍑芥暟錛岃屾槸搴旇鏀圭敤RETAILREGISTERZONES(..)鍑芥暟銆?/span>