锘??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美另类一区二区三区,日韩视频不卡中文,国产亚洲精品vhttp://m.shnenglu.com/milkyway/category/3375.html澶氱湅,澶氭兂,澶氬疄楠?/description>zh-cnTue, 20 May 2008 03:36:23 GMTTue, 20 May 2008 03:36:23 GMT60VirtualCopy in WinCE6.0 http://m.shnenglu.com/milkyway/articles/22195.html鐩告濋吀涓湁鐢?/dc:creator>鐩告濋吀涓湁鐢?/author>Wed, 18 Apr 2007 02:56:00 GMThttp://m.shnenglu.com/milkyway/articles/22195.htmlhttp://m.shnenglu.com/milkyway/comments/22195.htmlhttp://m.shnenglu.com/milkyway/articles/22195.html#Feedback1http://m.shnenglu.com/milkyway/comments/commentRss/22195.htmlhttp://m.shnenglu.com/milkyway/services/trackbacks/22195.htmlhttp://blog.csdn.net/fredzeng/archive/2007/04/04/1551898.aspx

鍦–E4.2/5.0閲岄潰婊氭墦澶氬勾鐨勫厔寮熷簲璇ョ粡甯哥敤榪欎釜鍑芥暟鍚с傝繖涓嚱鏁版柟渚塊┍鍔ㄥ拰搴旂敤紼嬪簭鑼冨洿浠諱綍鐨勭墿鐞嗗湴鍧錛屽寘鎷墿鐞嗗唴瀛樺晩錛岃澶囨帶鍒跺櫒鐨勫瘎瀛樺櫒鍟婏紝鐢氳嚦GPIO涔熷彲浠ュ湪AP閲岄潰闅忎究鎷変笂鎷変笅銆?/font>

榪欎釜鍑芥暟铏界劧鏂逛究錛屼絾鏄茍涓嶅畨鍏紝浣犳兂浣犲ソ涓嶅鏄撴妸涓涓姛鑳藉畬鍠勭殑image緇檅uild鍑烘潵浜嗭紝緇撴灉紕板埌浜嗕竴涓啓AP鐨?#8220;楂樻墜”錛屾妸浣犵殑瀵勫瓨鍣ㄥ拰鍏變韓鍐呭瓨涓殑鏁版嵁淇敼寰椾竴濉岀硦娑傦紝鏈鍚庢姤鍑篵ug鏉ヨ浣犻┍鍔ㄧ殑浣犱細涓嶄細鏅曞掞紒

榪樺ソ浠嶤E6.0寮濮嬫垜浠彲浠ュ畨鏋曟棤蹇т簡錛屽洜涓篈P鍐嶄篃涓嶈兘璋冪敤VirtualCopy鍑芥暟鏉ョ洿鎺ヨ闂墿鐞嗗湴鍧浜嗭紝浣嗗洜姝ゅ甫鏉ヤ簡涓浜涘簲鐢ㄤ笂鐨勪笉渚褲?/font>

VirtualCopy鐨勯檺鍒舵潵婧愪簬CE6.0涔嬪悗kernel鐨勫法澶у彉闈╋紝鍦–E5.0涔嬪墠鐨刉indows CE鎿嶄綔緋葷粺涓紝kenrel灝變粎浠呮槸kern.exe錛坣k.exe錛夛紝榪欎釜exe鍏跺疄鏄疧AL銆並ITL鍜孠ernel涓変釜鐨勫悎浣擄紝nk.exe鏄繍琛屼簬鍐呮牳妯″紡錛坘ernel mode錛夛紝涔熷氨鍏鋒湁浜嗚闂壒孌婂湴鍧鐨勬潈闄愶紝鐒跺悗闄ゆ涔嬪鐨勪唬鐮侀粯璁ら兘鏄繍琛屼簬鐢ㄦ埛妯″紡錛坲ser mode錛夛紝鎵浠ュ畠浠殑椹卞姩鍜孉P閮芥槸絳夌駭鐨勶紝閮藉湪鐢ㄦ埛妯″紡榪愯錛岃榪愯鍦╧ernel妯″紡涔熷彲浠ワ紝璋冪敤涓涓狝PI SetKmode錛堬級灝辮浜嗐傚洜涓洪┍鍔ㄦ槸鑲畾瑕佽闂墿鐞嗗湴鍧鐨勶紝鎵浠E5.0浠ュ墠鐨凮S閮芥槸榪愯鐢ㄦ埛妯″紡鐨勭▼寮忚闂墿鐞嗗湴鍧鐨勶紝鐒跺悗鍙堜負浜嗘柟渚垮仛浠庣墿鐞嗗湴鍧鍒拌櫄鎷熷湴鍧鐨勬槧灝勶紝灝辨彁渚涗簡涓緋誨垪鐨勫府鍔╁嚱鏁幫紝virtualcopy灝辨槸鏈甯哥敤鐨勫嚱鏁頒箣涓銆?/font>

CE6.0寮濮嬶紝kernel妯″紡鍙樺緱姣旇緝姝h錛岀被浼間簬鍙板紡鏈轟笂鐨剋indows緋葷粺浜嗭紝椹卞姩鍜宎p鐨勬潈闄愭槸涓ユ牸鍖哄垎鐨勶紝澶ч儴鍒嗙殑椹卞姩紼嬪簭榪愯鍦╧ernel妯″紡錛屽畠浠彲浠ョ敤virtualcopy璇誨啓鐗╃悊鍦板潃瀵瑰簲鐨勭墿鐞嗚澶囷紝浣嗙敤鎴鋒ā寮忕殑AP灝嗕粠姝ゆ病鏈夌洿鎺ヨ闂墿鐞嗗湴鍧鐨勬潈闄愶紝virtualcopy姣忔璋冪敤閮戒細澶辮觸榪斿洖銆?/font>

鍦ㄨ繖閲岃繕瑕佹敞鎰忕殑鏄紝鍏跺疄騫朵笉鏄敤鎴鋒ā寮忓氨涓嶈兘浣跨敤virtualcopy錛寁irtualcopy鍙槸涓嶈兘鍦ㄧ敤鎴鋒ā寮忕殑AP涓嬌鐢紝浣嗘槸鍗磋繕鍙互鍦ㄧ敤鎴鋒ā寮忕殑椹卞姩浣跨敤錛屼絾鏄湪鐢ㄦ埛妯″紡鐨勯┍鍔ㄤ腑浣跨敤涔熸湁鏉′歡錛岄偅灝辨槸蹇呴』鍦ㄥ搴旂殑娉ㄥ唽琛ㄤ腑璁劇疆鍙互璁塊棶鐨勫唴瀛樺湴鍧鐨勮寖鍥存墠琛屻?/font>

鍦ㄦ煇浜涘満鍚堬紝涓浜涚壒孌婂姛鑳界殑AP紜疄闇瑕佽闂墿鐞嗗湴鍧鐨勶紝姣斿璁劇疆淇濆瓨鐗╃悊鍐呭瓨鎸囧畾浣嶇疆鐨勫叏灞鍙橀噺錛屽紑鍙戣鍐橤PIO鐨勬祴璇曞伐鍏風瓑絳夈傚湪榪欑鎯呭喌涓嬩竴縐嶇畝鍗曠殑鏂規硶鏄疄鐜頒竴涓渶綆鍗曠殑璺戝湪kernel妯″紡鐨勬祦椹卞姩錛屾彁渚涗竴涓猟eviceiocontrol鐨勬帴鍙f潵甯姪AP鐢寵瀵瑰簲浜庣墿鐞嗗唴瀛樺湴鍧鐨勮櫄鎷熷唴瀛樺湴鍧銆?/font>

闄や簡virtualcopy涔嬪錛孋E6涓嬭繕鏈夊緢澶欰PI鏄疉P鍜寀ser妯″紡鐨勯┍鍔ㄤ笉鑳借皟鐢ㄧ殑錛岀粰澶у鍙傝冧竴涓嬶紝澶у瑕佹妸CE50涓嬬殑AP縐繪鍒?.0涓嬩竴瀹氳娉ㄦ剰鎵懼埌鏇夸唬

Virtual Memory APIs
CeVirtualSharedAlloc
LockPages
LockPagesEx
UnlockPages
UnlockPagesEx
VirtualAllocCopyEx
VirtualCopyEx
VirtualSetAttributes
CreateStaticMapping
NKDeleteStaticMapping
VirtualCopy

File System APIs
ReadRegistryFromOEM
SetStoreQueueBase
WriteRegistryToOEM

Power APIs
PowerOffSystem 錛堝緢澶氭祴璇旳P鐢ㄥ埌錛?/font>

Miscellaneous APIs
SetOOMEvent



]]>
Windows CE6 鏂扮壒鎬?/title><link>http://m.shnenglu.com/milkyway/articles/22191.html</link><dc:creator>鐩告濋吀涓湁鐢?/dc:creator><author>鐩告濋吀涓湁鐢?/author><pubDate>Wed, 18 Apr 2007 01:57:00 GMT</pubDate><guid>http://m.shnenglu.com/milkyway/articles/22191.html</guid><wfw:comment>http://m.shnenglu.com/milkyway/comments/22191.html</wfw:comment><comments>http://m.shnenglu.com/milkyway/articles/22191.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/milkyway/comments/commentRss/22191.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/milkyway/services/trackbacks/22191.html</trackback:ping><description><![CDATA[鏉ヨ嚜 <a >http://www.winbile.net/BBS/1015270/ShowPost.aspx</a><br><br>閲嶆柊璁捐浜咾ernel錛屾敮鎸佺殑榪涚▼鏁頒粠32涓墿灞曞埌32000 <br>姣忎釜榪涚▼鐨勫湴鍧絀洪棿浠?2MB鎵╁睍鍒?GB <br>寰堝緋葷粺妯″潡錛堝鏂囦歡緋葷粺鍜岃澶囩鐞嗗櫒錛夊皢榪愯鍦╧ernel妯″紡錛孫AL涔熶粠kernel鐙珛鍑烘潵錛宒river鍙互榪愯鍦╧ernel妯″紡鍜寀ser妯″紡 <br>Visual Studio 2005涓撲笟鐗堝皢鍖呮嫭涓涓縐頒負Platform Builder鐨勫姛鑳藉己澶х殑鎻掍歡錛屽畠鏄竴涓笓闂ㄤ負宓屽叆寮忓鉤鍙版彁渚涚殑“闆嗘垚寮鍙戠幆澧?#8221;銆傝繖涓泦鎴愬紑鍙戠幆澧冧嬌寰楁暣涓紑鍙戦摼铻嶄負涓浣擄紝騫舵彁渚涗簡涓涓粠璁懼鍒板簲鐢ㄩ兘鏄撲簬浣跨敤鐨勫伐鍏鳳紝鏋佸ぇ鍦板姞閫熶簡璁懼寮鍙戠殑涓婂競 <br>Windows Embedded CE 6.0鍔犲叆浜嗘柊鐨勫崟鍏冩牳蹇冩暟鎹拰璇煶緇勪歡 <br>Windows Embedded CE 6.0鍖呭惈鐨勭粍浠舵洿渚夸簬寮鍙戣呭垱寤洪氳繃Windows Vista™鍐呯疆鍔熻兘鏃犵嚎榪炴帴鍒拌繙紼嬫闈㈠叡浜綋楠岀殑鎶曞獎浠?br><br>鏉ヨ嚜 <a >http://develop.csai.cn/ebd/200702031135001231.htm</a><br><br><a target=_blank><u><font color=#356299>Windows</font></u></a> CE 6.0澶у箙鏀瑰彉浜嗘牳蹇冨畾鍧浠ュ強<a target=_blank><u><font color=#356299>璧勬簮</font></u></a>鍒嗛厤鐨勬満鍒訛紝鏃х増CE鍚屾椂闂村彧鑳芥湁32涓▼搴忔墽琛屼簬鍚勮嚜鍒嗛厤鐨?2MB铏氭嫙瀛樺偍鍣ㄧ┖闂翠腑錛?.0鐗堝垯鏄ぇ騫呮斁瀹戒簡闄愬埗錛屾渶澶у彲鍚屾椂鎵ц32,000涓▼搴忥紝鑰屼笖姣忎釜紼嬪簭鍙嫢鏈夌嫭绔嬪垎閰嶇殑2GB铏氭嫙瀛樺偍鍣紝鍦ㄦ鍚屾椂錛屾牳蹇冩湇鍔°佺‖浠惰緗殑椹卞姩紼嬪簭銆佽紿楃粯鍥句互鍙婁簨浠跺瓙緋葷粺銆佹。妗堢郴緇熺瓑鏈嶅姟閮借杞Щ鍒扮郴緇熸牳蹇冧繚鐣欑┖闂翠腑銆備笉榪囪繖鏍風殑鏀瑰彉涔熶細甯︾粰浣跨敤鑰呯枒铏戯紝姣曠珶榪囧幓NT 4.0灝辨浘緇忎笂婕旇繃綾諱技鐨勬垙鐮侊紝灝嗛┍鍔ㄧ▼搴忎粠浣跨敤鑰呮ā寮忚漿縐誨埌鏍稿績妯″紡錛岃櫧鐒跺彲浠ュぇ騫呮敼榪涘簲鐢ㄧ殑閫熷害錛屼絾鏄竴涓綋璐ㄤ笉鑹殑椹卞姩紼嬪簭錛屽彲鑳藉氨浼氭嫋鍨暣涓郴緇燂紝鍥犳鍦ㄧ‖浠墮┍鍔ㄧ▼搴忕殑寮鍙戜笂錛屽氨蹇呴渶瑕佹湁涓湁鏁?a target=_blank><u><font color=#356299>鏍囧噯</font></u></a>鏉ヨ鑼冿紝鏈濂借繕瑕佸鍏ュWHQL涔嬬被鐨勯┍鍔ㄧ▼搴忛獙璇佹湇鍔★紝浠ラ伩鍏嶅獎鍝嶆暣涓郴緇熺殑紼沖畾鎬с? <p>銆銆<a target=_blank><u><font color=#356299>Windows</font></u></a> CE 6.0鐨勬柊鍙橀潻</p> <p>銆銆<a target=_blank><u><font color=#356299>Windows</font></u></a> CE 6.0渚濇棫鎶婄溂鍏夋姇娉ㄥ湪ARM鏋舵瀯涓紝鏂扮殑BSP涓庣紪璇戝櫒涔熼兘鏀寔浜咥RM鐨勬渶鏂頒綋緋伙紝浣嗘槸鍏跺畠<a target=_blank><u><font color=#356299>宓屽叆寮?/font></u></a>澶勭悊鍣ㄧ殑鏀寔涔熸病鏈夎蹇借錛屽▉鐩涘叕鍙告渶鏂扮殑澶勭悊鍣ㄤ篃鍦ㄤ笉涔呭墠瀹gО鏀寔浜?a target=_blank><u><font color=#356299>Windows</font></u></a> CE 6.0<a target=_blank><u><font color=#356299>鎿嶄綔緋葷粺</font></u></a>銆傝?.0鐗堜篃鏄?a target=_blank><u><font color=#356299>寰蔣</font></u></a>棣栦釜瀵煎叆嬈′笘浠f。妗堢郴緇烢xFAT鐨?a target=_blank><u><font color=#356299>鎿嶄綔緋葷粺</font></u></a>錛岃櫧鐒跺埌鐩墠涓烘鍏剁粏鑺傝繕涓嶆槑浜嗭紝浣嗘槸鏍規嵁宸叉湁鐨勪俊鎭寚鍑猴紝ExFAT鍦?a target=_blank><u><font color=#356299>Windows</font></u></a> CE 6.0涓紝鎷呭綋浜嗘葷鎵鏈夊鎺ュ偍瀛樺獟浣撶殑涓晫灞傜殑瑙掕壊錛屽箍涓轟駭涓氱晫鎵縐拌禐鐨勬槸錛岃繖鑳藉瑙i櫎榪囧幓浼犵粺FAT妗f緋葷粺鐨?2GB鍗曚竴瀹歸噺闄愬埗銆侲xFAT鍚屾牱涔熻В闄や簡鍗曚竴妗f鍙兘鍦?GB浠ヤ笅鐨勯檺鍒訛紝榪欏浜庣‖浠跺巶鍟嗕互<a target=_blank><u><font color=#356299>Windows</font></u></a> CE鍙戝睍澶у閲忓偍瀛樼鐞嗕己鏈嶆灦鏋勶紝鏈夎憲鐩稿綋澶х殑甯姪銆傚姞涓婁竴浜涘畨鍏ㄦ満鍒訛紝鎴戜滑鍙互鎶奅xFAT瑙嗕負<a target=_blank><u><font color=#356299>Windows</font></u></a> CE 6.0涓婄殑NTFS鍔犲己鐗堛?/p> <p>銆銆VoIP涔熸槸<a target=_blank><u><font color=#356299>Windows</font></u></a> CE 6.0鍙︿竴涓寔緇姞寮虹殑閲嶇偣錛岄櫎浜嗗湪搴旂敤紼嬪簭灞傜殑鏁村悎鏇磋繘涓姝ヤ互澶栵紝<a target=_blank><u><font color=#356299>鎿嶄綔緋葷粺</font></u></a>鏍稿績涔熷叿澶囩洿鎺ユ敮鎸佺殑鑳藉姏錛屽洜姝ょ‖浠跺紑鍙戜笂鍙互鏇村鏄撶殑鍦?a target=_blank><u><font color=#356299>Windows</font></u></a> CE鐜涓婅繘琛屽悇縐嶇綉緇滅殑璇煶閫氳鏈嶅姟銆傝屽洜搴旇繖鏍風殑瓚嬪娍錛?.0鐗堣嚜鐒朵篃鎶婅繃鍘?.0鐗堢殑緙哄け琛ユ榪囨潵錛屽湪緗戠粶鍫嗗彔鍗忓畾鏂歸潰錛岀洿鎺ユ敮鎸佷簡802.11i銆乄AP2銆?02.11e錛堟棤綰縌oS錛夈佽摑鐗橝2DP/AVRCP鐨凙ES鍔犲瘑絳夌瓑錛屼負鏃犵嚎閫氳寤虹珛浜嗕竴涓ǔ瀹氥佸畨鍏ㄤ互鍙婂彲闈犵殑搴旂敤鐜銆?/p> <p>銆銆鑰屼粠浣跨敤鑰呰鐐規潵鐪嬶紝<a target=_blank><u><font color=#356299>Windows</font></u></a> CE 6.0鎵╁睍浜嗚秴瓚婁互寰鐗堟湰鎬誨拰鐨勬壙璇猴紝榪欎簺鍔熻兘鍖呮嫭浜嗘渶鏂扮殑澶氬獟浣撹兘鍔涳紝璇稿<a target=_blank><u><font color=#356299>Windows</font></u></a> Media 10/11鐨勬敮鎸併侊紝瀵逛簬緗戠粶澶氬獟浣撹緗殑鍘熺敓鏁村悎鑳藉姏錛屽湪Platform Builder寮鍙戝伐鍏蜂腑錛岀敋鑷充篃鍔犲叆浜嗚鍔ㄥ獟浣撲腑蹇冪殑鏀寔錛屽彲浠ヨ棄鐢?a target=_blank><u><font color=#356299>Windows</font></u></a> Media Connect 2.0澶у箙寮哄寲澶氬獟浣撳簲鐢ㄧ殑鏀寔鑳藉姏錛屽茍涓斿彲浠ヤ笌鍏跺畠<a target=_blank><u><font color=#356299>寰蔣</font></u></a>鐨?a target=_blank><u><font color=#356299>鎿嶄綔緋葷粺</font></u></a>鎴栫‖浠惰緗仛鍚屾緇熷悎鐨勫姩浣溿傝繖浜涘姛鑳藉寘鍚簡浠ヤ笅欏圭洰錛?/p> <p>銆銆鈻?TIFF緙栬В鐮佸櫒鐨勬敮鎸?br>銆銆鈻?HD-DVD鐨勮В鐮佸櫒鏀寔<br>銆銆鈻?MPEG-2瑙g爜鍣?br>銆銆鈻?鏇村鐨勫獎闊崇紪鐮佷笌鏍煎紡鏀寔<br>銆銆鈻?UDF 2.5鏍煎紡鐨勬敮鎸?br>銆銆鈻?铏氭嫙鐜粫澹伴亾鐨勬敮鎸?br>銆銆鈻?澶氳建闊蟲晥鐨勬敮鎸?br>銆銆鈻?寮哄寲DirectDraw錛屽彲鏀寔鐢佃浣跨敤鐨勪氦閿欐樉紺烘ā寮?br>銆銆鈻?USB OTG鍔熻兘鍔犲叆錛屽彲浣滀負USB鐨勬帶鍒剁</p> <p>銆銆铏界劧鍦ㄦ牳蹇冮儴鍒嗗仛鍑鴻繖涔堝ぇ鐨勬洿鏂幫紝浣嗘槸<a target=_blank><u><font color=#356299>Windows</font></u></a> CE 6.0鐨勫偍瀛樹笂騫舵病鏈夊<a target=_blank><u><font color=#356299>寰蔣</font></u></a>鍏跺畠<a target=_blank><u><font color=#356299>鎿嶄綔緋葷粺</font></u></a>鑸殑椋炴定錛圴ista鐢氳嚦闇瑕佽秴榪?0GB鐨勫垵濮嬪偍瀛樺畨瑁呯┖闂達紒錛夛紝鐩歌緝璧?.0鐗堬紝6.0鍦ㄤ綋縐笂涔熶笉榪囧鍔犱簡5錛呭乏鍙籌紝铏界劧榪欏<a target=_blank><u><font color=#356299>宓屽叆寮?/font></u></a>緋葷粺浜т笟鏉ヨ鏄悊鎵褰撶劧錛屼絾瀵逛簬<a target=_blank><u><font color=#356299>寰蔣</font></u></a>鍙互璇存槸鍙︿竴欏瑰榪廣?/p> <p>銆銆<a target=_blank><u><font color=#356299>Windows</font></u></a> CE 6.0甯︾粰寮鍙戣呯殑濂藉</p> <p>銆銆鍦ㄥ紑鏀懼師濮嬬爜鐨勫巻鍙蹭腑錛?a target=_blank><u><font color=#356299>寰蔣</font></u></a>瑕佸啓涓嬪彟涓涓柊鐨勯噷紼嬬錛?00錛呭浜у搧寮鍙戣呴噴鏀懼嚭鍘熷鐮侊紝涓斿彲鍏佽鍘傚晢榪涜鑷鐨勫彉鏇存垨璁㈠仛錛岃屾棤欏婚噴鏀懼嚭緇忚繃淇敼鐨勭▼搴忕爜錛岃櫧鐒跺湪騫夸箟涓婂茍涓嶈兘瑙嗕負鐪熸寮鏀撅紝浣嗘槸涓鴻繖浜涘枩嬈㈣棌縐佺暀涓鎵嬬殑鍘傚晢鏉ヨ錛屾棤鐤戞槸澧炲姞绔炰簤鍔涚殑鏈浣蟲墜孌典箣涓銆傝屼綔涓哄紑鍙戝伐鍏風殑Visual Studio 2005 PRO灝嗕細浣滀負<a target=_blank><u><font color=#356299>Windows</font></u></a> CE 6.0鐨勬暣浣撳浠朵箣涓錛屽唴寤虹殑璁稿寮鍙戝伐鍏蜂笌瀹氫箟瀵逛簬寮鍙戣呮潵璇寸浉瀵逛究鍒╄澶氥?/p> <p>銆銆<a target=_blank><u><font color=#356299>Windows</font></u></a> CE 6.0鏀寔浜?a target=_blank><u><font color=#356299>Windows</font></u></a> <a target=_blank><u><font color=#356299>.NET</font></u></a> Compact Framework 2.0浣滀負搴旂敤紼嬪簭綆$悊寮鍙戜互鍙奧in32銆?MFC銆?ATL銆?WTL鍜孲TL絳?a target=_blank><u><font color=#356299>紼嬪簭寮鍙?/font></u></a>鐣岄潰鎻愪緵緇欏紑鍙戝師鐢熷簲鐢ㄧ▼搴忕殑寮鍙戣呬嬌鐢ㄣ傚叿澶囦簡濡傛鍔垮姏搴炲ぇ浠ュ強瀹屾暣鐨勫紑鍙戠幆澧冧綔涓烘敮鎸侊紝寮鍙戣呬笌鍒墮犲晢涔熷彲紜繚鍚庣畫鐨勬敮鎸佷笉铏炲尞涔忋?/p> <p>銆銆鑰屽湪紜歡鏂歸潰錛屾牴鎹?a target=_blank><u><font color=#356299>寰蔣</font></u></a>鏂歸潰鐨勮娉曪紝鍦ㄤ笉鍙樻洿鍘熸湁鐨勭‖浠舵灦鏋勪箣涓嬶紝瀵煎叆<a target=_blank><u><font color=#356299>Windows</font></u></a> CE 6.0鍙互澶у箙鏀瑰杽鍘熸湁紼嬪簭鐨勬墽琛屾晥鐜囷紝騫朵笖涔熷璁稿悓鏃墮棿鏈夋洿澶氱▼搴忓悓姝ユ墽琛岋紝鐢變簬姣忎釜紼嬪簭閮藉叿澶囨湁鐙珛鐨勬墽琛岀┖闂達紝鐗瑰畾紼嬪簭褰撴帀錛屼篃涓嶄細褰卞搷鍒板叾瀹冨簲鐢ㄧ▼搴忔垨緋葷粺鎵ц錛屾彁渚涚粰浣跨敤鑰呮瘮璧蜂互寰鏃х増緋葷粺鏇村己鐨勭ǔ鍥烘т笌鏇村ぇ鐨勫脊鎬с傝岀洰鍓嶉愭笎椋庤鐨勫鏍稿績澶勭悊鏋舵瀯涓婏紝<a target=_blank><u><font color=#356299>Windows</font></u></a> CE 6.0涔熷彲浠ュ湪涓嶅彉鏇?a target=_blank><u><font color=#356299>紼嬪簭寮鍙?/font></u></a>鑰呭師鏈夌▼搴忔ā鍨嬬殑鐘跺喌涔嬩笅錛屾彁渚涙渶浣沖寲鐨勬牳蹇冨伐浣滆嚜鍔ㄥ垎閰嶄笌鎸囧畾錛屽綋鐒訛紝濡傛灉鏈夐渶姹傜殑璇濓紝<a target=_blank><u><font color=#356299>紼嬪簭寮鍙?/font></u></a>鑰呬緷鐒跺彲浠ヨ嚜琛屽喅瀹氭寚瀹氭牳蹇冪殑鏂瑰紡銆?/p> <p>銆銆甯傚満涓婄殑瀹為檯搴旂敤涓庣粨璁?/p> <p>銆銆鎴嚦鐩墠涓烘錛屽彴婀懼凡緇忔湁鐮斿崕縐戞妧鍦ㄩ拡瀵圭墿嫻併佷粨鍌ㄧ鐞嗐佸叕鍏辨湇鍔′互鍙婇鍩熺淮鎶ゆ柟闈㈢殑搴旂敤錛岃繘琛屽熀浜?a target=_blank><u><font color=#356299>Windows</font></u></a> CE 6.0<a target=_blank><u><font color=#356299>鎿嶄綔緋葷粺</font></u></a>涓嬬殑宸ヤ笟綰ф帉涓婂瀷緇堢鏈虹殑寮鍙戯紝鑰岀簿鎶璁$畻鏈哄垯鏄紑鍙戜簡鍙簲鐢ㄤ簬鎼滈泦璧勬枡銆丷FID銆丅arCode綆$悊鐨勫瀭鐩村競鍦篜DA錛岄噰鐢?a target=_blank><u><font color=#356299>Windows</font></u></a> CE 6.0涓殑cell core鍏冧歡錛岀緝鐭璆PRS绔殑璧勬枡浼犺緭璁捐鏃剁▼銆傝屽悇澶ф墜鎸佸紡鏅鴻兘瑁呯疆鐨勫紑鍙戣呬篃閮藉凡緇忓湪鐫鎵嬪鍏?a target=_blank><u><font color=#356299>Windows</font></u></a> CE 6.0錛屽疄闄呬駭鍝侀璁″皢浼氫簬2007騫寸浜屽涔嬪悗閫愭笎嫻幇鍙伴潰銆?/p> <p>銆銆100錛呭紑鏀懼師濮嬬爜鐨勫垱涓懼浜?a target=_blank><u><font color=#356299>寰蔣</font></u></a>鏉ヨ鏄釜鐩稿綋澶х殑紿佺牬錛岃櫧鐒惰繖鏈変竴澶ч儴鍒嗘槸鍥犱負<a target=_blank><u><font color=#356299>宓屽叆寮?/font></u></a><a target=_blank><u><font color=#356299>Linux</font></u></a>鎵甯︽潵鐨勭珵浜夋寫鎴樻墍鑷達紝浣嗘槸楣殞鐩鎬簤鐨勭粨鏋滐紝甯︾粰寮鍙戜紮浼寸殑濂藉涔熻繙澶т簬榪囧幓閲囩敤灝侀棴妯″紡鐨勬祦紼嬶紝鑰屽歡緇繃鍘?a target=_blank><u><font color=#356299>Windows</font></u></a> CE 5.0鐨勬垚鏋滐紝<a target=_blank><u><font color=#356299>Windows</font></u></a> CE 6.0涔熷皢浼氱戶緇湪<a target=_blank><u><font color=#356299>宓屽叆寮?/font></u></a>搴旂敤銆佽鍔ㄨ緗丟PS銆佹櫤鑳藉瀷<a target=_blank><u><font color=#356299>鎵嬫満</font></u></a>絳夊競鍦虹戶緇敾鍩庢帬鍦幫紝涓嶈繃鍦ㄩ潰瀵瑰競鍦轟笂璇稿瀵規墜鐨勭珵浜夛紝<a target=_blank><u><font color=#356299>寰蔣</font></u></a>浠嶉』鍋氬嚭鏇村鐨勬敼榪涖傛瘮濡傚湪淇婕忔礊鏂歸潰鍙互鏇村揩閫熺殑鍙嶅簲銆佸茍涓旀彁渚涚粰寮鍙戣呮洿澶х殑鏀寔鍔涘害絳夌瓑錛屽綋寮鍙戣呯敎澶村悆鐨勫澶氾紝鑷劧涔熶細瀵?a target=_blank><u><font color=#356299>Windows</font></u></a> CE<a target=_blank><u><font color=#356299>Windows</font></u></a> CE鏋舵瀯鏇翠負蹇犺瘹錛屽嚭鐜板湪甯傞潰涓婄殑浜у搧鑷劧涔熶細鏇翠負鎴愮啛銆?br></p> <br> <img src ="http://m.shnenglu.com/milkyway/aggbug/22191.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/milkyway/" target="_blank">鐩告濋吀涓湁鐢?/a> 2007-04-18 09:57 <a href="http://m.shnenglu.com/milkyway/articles/22191.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>VirtualAlloc/Copy and MmMapIospacehttp://m.shnenglu.com/milkyway/articles/22123.html鐩告濋吀涓湁鐢?/dc:creator>鐩告濋吀涓湁鐢?/author>Tue, 17 Apr 2007 05:38:00 GMThttp://m.shnenglu.com/milkyway/articles/22123.htmlhttp://m.shnenglu.com/milkyway/comments/22123.htmlhttp://m.shnenglu.com/milkyway/articles/22123.html#Feedback0http://m.shnenglu.com/milkyway/comments/commentRss/22123.htmlhttp://m.shnenglu.com/milkyway/services/trackbacks/22123.htmlKurt Kennett

VirtualCopy can be a bit confusing to use.

http://msdn2.microsoft.com/en-us/library/aa908789.aspx

Let's look at the parameters.  I've commented with -- after each of them.

lpvDest

[in] Pointer to the destination memory, which must be reserved.

-- This means that the destination range of VIRTUAL memory must already be reserved by a call to VirtualAlloc().  You must have allocated a range of virtual memory that you are going to map to some physical range.

lpvSrc

[in] Pointer to committed memory.

-- This is the range of *either* VIRTUAL *or* PHYSICAL memory that you want to map the range specified by the 'lpvDest' parameter to.  

If you specify a VIRTUAL address and omit the PAGE_PHYSICAL flag from the fdwProtect parameter, then you are simply saying "Copy the mapping at the lpvSrc address to the lpvDest address".  This just means that there will be two ranges of virtual memory that point to the same physical range.

If you specify a PHYSICAL address (shifted right 8 bits) and include the PAGE_PHYSICAL flag in the fdwProtect parameter, then you are saying "Map the range at the lpvDest address to this specific physical address".  This sets your new range of virtual memory to point to a piece of physical memory.

cbSize

[in] Size, in bytes, of the region. The allocated pages include all pages containing one or more bytes in the range from lpAddress to lpAddress+cbSize. This means that a 2-byte range straddling a page boundary causes both pages to be included in the allocated region.

-- pretty straight forward here.

fdwProtect

[in] Type of access protection. If the pages are being committed, any one of a number of flags can be specified, along with the PAGE_GUARD and PAGE_NOCACHE, protection modifier flags. The following table shows the flags that can be specified.

-- 'Reserving' a page means you're allocating a range of virtual memory but not pointing it at anything yet.  'Commiting' a page means you are actually taking up physical storage somewhere - be it in RAM or in physical addres space.  For the purposes of our discussion here, you would normally map registers and i/o space with PAGE_NOCACHE.  If you used a physical address (shifted right 8 bits) in the lpvSrc parameter, then you would also specify the PAGE_PHYSICAL flag.


quetion:

If I want to access some physical memory in my driver,  can I do like these way?

Method (1) define static map relationship in OEMAddressTable and reserve difined virtual address in config.bib first, then use VirtualAlloc() and VirtualCopy() without the page_physical parameter.

or (2)  directly use MmMapIoSpace() or VirtualAlloc+Copy() with the page_physical parameter

answer:
Yes, either of those would work I believe.  #2 is the preferred/recommended method


Monday, March 26, 2007 12:07 PM by Kurt Kennett

Wow!  Lots of interest in VirtualCopy!  Ok, I'll try to be super-clear here.

VirtualCopy *copies* or *sets* a range of virtual addresses.  

   - You use it to *copy* an existing Virtual->Physical mapping (no matter where it is).  

OR

   - You use it to *set* a mapping to a range of physical addresses.

In *either* case, the virtual memory you want to create the new map in must already be allocated (via VirtualAlloc()).

OEMAddressTable is a static (unchanging, available at startup without doing any work or setup) table of virtual -> physical mappings.  The kernel is the only thing that has default access to the resources mapped by this table.  If you are operating outside the OAL (i.e. in any kind of driver or application), you must use VirtualCopy() to copy or create memory page mappings.  As mentioned above, you can copy any existing mapping as long as you have access to it.  This includes a static mapping done by the OEMAddressTable.  Some people will map all resources in the OEMAddressTable (so the kernel has access to everything), then just copy those mappings in drivers when they need to.  This is not a best practice because it makes driver code less portable -- it is better to read the physical address of a component from the registry, then use the value found there to map to it. If you do this your driver code does not have to change if it is moved to a different platform or extended to use multiple components in different physical locations.

A mapping does not have to exist in OEMAddressTable in order for you to access the physical resources mapped.  You can create a new mapping unknown to the OEMAddressTable by using VirtualCopy with the PAGE_PHYSICAL flag.

MmMapIoSpace is a CEDDK function -- it simply does the appropriate calls to VirtualAlloc/VirtualCopy.  You could write your own MmMapIoSpace if you wanted to.  Some people have in the past - calling the function "VirtualMemCopyPhysical" or something like that.  Some platforms need to modify the MmMapIoSpace to set Virtual mapping attributes when pages are mapped (hence the original purpose for this blog entry).

Using flags like PAGE_EXECUTE_READWRITE with VirtualCopy are a 'request'.  If the platform/CPU does not have a differentiation between executable pages and non-executable pages, the EXECUTE property will not be able to be set.  For example, the X86 CPUs can explicitly state that memory is executable, but can't be read or written to.  The ARM processors have no notion of this - you can read it or read and write it.



In Windows CE 5.0 and earlier, virtual allocations below 2MB come out of the address space of the process calling it, while allocations above 2MB come out of the shared address space.

Sue




]]>
ce鍐呭瓨鏄犲皠鐨勭偣鐐規淮婊?/title><link>http://m.shnenglu.com/milkyway/articles/18270.html</link><dc:creator>鐩告濋吀涓湁鐢?/dc:creator><author>鐩告濋吀涓湁鐢?/author><pubDate>Fri, 02 Feb 2007 01:27:00 GMT</pubDate><guid>http://m.shnenglu.com/milkyway/articles/18270.html</guid><wfw:comment>http://m.shnenglu.com/milkyway/comments/18270.html</wfw:comment><comments>http://m.shnenglu.com/milkyway/articles/18270.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/milkyway/comments/commentRss/18270.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/milkyway/services/trackbacks/18270.html</trackback:ping><description><![CDATA[ <table style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" cellspacing="1" cellpadding="3" width="98%" bgcolor="#cccccc" border="0"> <tbody> <tr bgcolor="#f8f8f8"> <td>wy12218 鍙戣〃浜?2006-11-9 18:17:00 </td> </tr> <tr bgcolor="#ffffff"> <td height="0"> <table cellspacing="0" cellpadding="0" width="100%" border="0"> <tbody> <tr> <td> <p>OEMAddressTable閲屽畾涔夌殑鏄犲皠鍏崇郴鏄粰ARM MMU鐢ㄧ殑,鏄湪KernelStart(source code鍙傝僿ince420private鐩綍)鏃跺緩绔嬬殑,鍙WINCE榪樺湪璺?灝變笉浼氳В闄? <br />OEMAddressTable閲岀殑Virtual Addr鍜孭hysical Addr鏄ARM鏉ヨ鐨? 鍏跺疄瀵逛簬WINCE,灝卞彧鑳借闂埌瀹冪殑Virtual address. 涔熷氨鏄,OEMAddressTable閲岀殑Virtual address瀵筗INCE 緋葷粺鏉ヨ鎵嶆槸Physical Address. <br /><br />緇忚繃OEMAddressTable鏄犲皠鍚庣殑緋葷粺鐨勭墿鐞嗗湴鍧,鍦?x80000000~0x9fffffff涔嬮棿.鏄痗aching and buffering鐨勫湴鍧,榪欎釜鍦板潃鍔犱笂0x20000000,灝辨槸瀹冪殑cache & buffering disabled鍦板潃.鎵鏈夌殑紜歡瀵勫瓨鍣ㄧ殑鍦板潃閮藉湪榪欎釜鍦板潃孌典笂,鍙桵MU淇濇姢鐨? <br /><br />涓婇潰璁茬殑緋葷粺鐨勭墿鐞嗗湴鍧,浠?x80000000~0xbfffffff,鍦↘ernel Mode涓嬮兘鍙互鐩存帴璁塊棶. ISR鏄湪KERNEL閲?涔熷氨鍙互鐩存帴璁塊棶榪欎簺緋葷粺鐨勭墿鐞嗗湴鍧.鏃犳墍璋?鍥犱負ISR鍙兘璁塊棶闈欐佹槧灝勭殑铏氭嫙鍦板潃". <br /><br />涓婇潰璇磋繃,瀵逛簬ARM鏉ヨ,鏈夎櫄鎷熷湴鍧鍜岀墿鐞嗗湴鍧涔嬪垎,瀵逛簬WINCE鏉ヨ,涔熸湁铏氭嫙鍦板潃鍜岀墿鐞嗗湴鍧涔嬪垎. 鍙互榪欎箞璇?ARM鐨勮櫄鎷熷湴鍧灝辨槸WINCE緋葷粺鐨勭墿鐞嗗湴鍧. <br />32浣嶇殑OS鎬誨叡鏈?G鐨勮櫄鎷熷湴鍧絀洪棿,WINCE涔熶笉渚嬪. 鍏朵腑,0x00000000~0x80000000鏄疉pplication Space; 0x80000000~0xffffffff鏄疭ystem Reserved. 緋葷粺鐨勭墿鐞嗗湴鍧灝卞湪System Reserved鐨勮繖孌?鍙兘鍦↘ERNEL MODE璁塊棶. 閭d箞,褰揂PPLICATION鍜孌RIVER(閮芥槸榪愯鍦║SER MODE)瑕佽闂繖浜涘湪System Reserved鍦板潃孌電殑紜歡瀵勫瓨鍣ㄦ垨MEMORY鎬庝箞鍔炲憿? 鍙ソ鍐嶅緩绔嬩竴灞傛槧灝勫叧緋?鍦ˋpplication Space閲屽垎閰嶄竴孌電┖闂?鎶婂畠鏄犲皠鍒癝ystem Reserved閲岀殑鍦板潃涓?榪欏氨鏄疺irtualAlloc/Copy鍜孧mMapIoSpace騫茬殑浜嬫儏.</p> <p>濡傛灉浣犵殑鍦板潃鏄繖鏍峰0鏄庣殑: <br />#define RTC_COUNTER *((volatile unsigned *)0x91000000) <br />閭d箞鐩存帴璇誨啓灝卞彲浠ヤ簡,姣斿: <br />int nRtc = RTC_COUNTER; <br />RTC_COUNTER = nRtc; <br /><br />鍚﹀垯,鍙互鐢? <br />int nRtc = READ_REGISTER_ULONG(0x91000000); <br />WRITE_REGISTER_ULONG(0X91000000, nRtc); <br /><br />鍏跺疄榪欎袱縐嶆柟寮忕殑鏈川鏄竴鏍風殑,閮芥槸鎶婂湴鍧澹版槑鎴愭煇涓暟鎹被鍨?鐒跺悗灝卞彲浠ョ洿鎺ヨ鍐欎簡.涓嬮潰鏄疪EAD_REGISTER_ULONG()鍜學RITE_REGISTER_ULONG()鐨勫畾涔? <br />#define READ_REGISTER_ULONG(reg) (*(volatile unsigned long * const)(reg)) <br />#define WRITE_REGISTER_ULONG(reg, val) (*(volatile unsigned long * const)(reg)) = (val)</p> <p>聽</p> </td> </tr> </tbody> </table> </td> </tr> </tbody> </table> <img src ="http://m.shnenglu.com/milkyway/aggbug/18270.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/milkyway/" target="_blank">鐩告濋吀涓湁鐢?/a> 2007-02-02 09:27 <a href="http://m.shnenglu.com/milkyway/articles/18270.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>wince涓柇闂http://m.shnenglu.com/milkyway/articles/18268.html鐩告濋吀涓湁鐢?/dc:creator>鐩告濋吀涓湁鐢?/author>Fri, 02 Feb 2007 01:25:00 GMThttp://m.shnenglu.com/milkyway/articles/18268.htmlhttp://m.shnenglu.com/milkyway/comments/18268.htmlhttp://m.shnenglu.com/milkyway/articles/18268.html#Feedback0http://m.shnenglu.com/milkyway/comments/commentRss/18268.htmlhttp://m.shnenglu.com/milkyway/services/trackbacks/18268.html闃呰鍏ㄦ枃

]]>
WinCE涓璒EM閫傞厤灞傜紪紼嬬偣婊翠箣鍒涘緩OALhttp://m.shnenglu.com/milkyway/articles/18267.html鐩告濋吀涓湁鐢?/dc:creator>鐩告濋吀涓湁鐢?/author>Fri, 02 Feb 2007 01:23:00 GMThttp://m.shnenglu.com/milkyway/articles/18267.htmlhttp://m.shnenglu.com/milkyway/comments/18267.htmlhttp://m.shnenglu.com/milkyway/articles/18267.html#Feedback0http://m.shnenglu.com/milkyway/comments/commentRss/18267.htmlhttp://m.shnenglu.com/milkyway/services/trackbacks/18267.html銆銆2001騫磋綆楁満涓撲笟姣曚笟銆備粠姣曚笟璧蜂竴鐩翠粠浜嬭蔣浠跺紑鍙戝伐浣溿傜洰鍓嶄粠浜?Windows CE 涓嬫搷浣滅郴緇熷唴鏍稿畾鍒跺拰搴旂敤紼嬪簭寮鍙戙傚湪瀹為檯宸ヤ綔涓Н绱簡CE涓嬪紑鍙戠殑涓浜涚粡楠屻傚笇鏈涘拰 CE 涓嬪紑鍙戣呬氦嫻併佹帰璁紝鏇村笇鏈涗綘浠兘涓嶅悵璧愭暀銆傛垜鐨凟Mail錛歸indowsce@tom.com

銆銆濡傛灉鎮ㄦ湁鎶鏈棶棰樺悜鎴戝挩璇紝璇風櫥褰?a target="_blank">澶╂瀬緗戝祵鍏ュ紡寮鍙戣鍧?/font>錛屾湰浜哄皢鍦ㄦ璁哄潧鍥炲鎮ㄧ殑闂銆傚湪璁哄潧涓婁氦嫻佷細鏇存柟渚夸簺錛屽叾瀹冪綉鍙嬩篃鍙互鍥炵瓟鍙備笌錛屽譏琛ヤ簡鎴戠殑涓嶈凍銆?/p>

銆銆榪涘叆浣滆呬笓鏍?/font>

銆銆姝f枃

銆銆姝eCE鐨勫府鍔╂枃妗f墍璦錛屽垱寤篛AL鏄竴涓潪甯稿鏉傜殑浠誨姟錛岃岄氬父鐨勫姙娉曟槸澶嶅埗鍘熸湁鐨勭浉鍚屽鉤鍙扮殑OAL浠g爜錛岀劧鍚庝慨鏀規潵閫傚簲騫沖彴鐨勭壒孌婅姹傘備篃灝辨槸璇村浜庢病鏈夌壒孌婅姹傜殑騫沖彴錛屽鍒跺師鏈夌浉鍚屽鉤鍙扮殑OAL浠g爜灝辮凍澶熶簡銆傜敱浜嶰AL鐨勫鏉傛у湪榪欑瘒鏂囩珷涓垜鍙瑙e父鐢ㄧ殑閮ㄥ垎銆?

銆銆涓銆佸疄鐜癐SR

銆銆1. ISR鐨勬蹇?br />
銆銆ISR錛坕nterrupt service routine錛夋槸澶勭悊IRQs錛坕nterrupt request line錛夌殑紼嬪簭銆俉indows CE鐢ㄤ竴涓狪SR鏉ュ鐞嗘墍鏈夌殑IRQ璇鋒眰銆傚綋涓涓腑鏂彂鐢熸椂錛屽唴鏍哥殑寮傚父澶勭悊紼嬪簭鍏堣皟鐢ㄥ唴鏍窱SR錛屽唴鏍窱SR紱佺敤鎵鏈夊叿鏈夌浉鍚屼紭鍏堢駭鍜岃緝浣庝紭鍏堢駭鐨勪腑鏂紝鐒跺悗璋冪敤宸茬粡娉ㄥ唽鐨凮AL ISR紼嬪簭錛屼竴鑸琁SR鏈変笅鍒楃壒寰侊細

銆銆1) 鎵ц鏈灝忕殑涓柇澶勭悊錛屾渶灝忕殑涓柇澶勭悊鎸囪兘澶熸楠屻佺瓟澶嶄駭鐢熶腑鏂殑紜歡錛岃屾妸鏇村鐨勫鐞嗗伐浣滅暀緇橧ST錛坕nterrupt service thread錛夈?br />
銆銆2) 褰揑SR瀹屾垚鏃惰繑鍥炰腑鏂璉D錛堜腑鏂璉D澶ч儴鍒嗘槸棰勫畾涔夌殑錛夈?br />
銆銆2. X86騫沖彴鐨処SR緇撴瀯

銆銆X86騫沖彴鐨処SR淇濆瓨鍦?_WINCEROOT%\PUBLIC\COMMON\OAK\CSP\I486\OAL\fwpc.c涓紝鍑芥暟鍚嶄負PeRPISR銆備笅闈㈠垎鏋愪竴涓嬫鍑芥暟鐨勪富瑕佷唬鐮侊細

ULONG PeRPISR(void)
{
銆ULONG ulRet = SYSINTR_NOP; ///榪斿洖鍊鹼紝鏃腑鏂璉D錛堜互SYSINTR_涓哄墠緙錛?br />銆UCHAR ucCurrentInterrupt; ///褰撳墠涓柇鍙?br />銆if (fIntrTime) ////// fIntrTime 鐢ㄤ簬嫻嬭瘯SR鍜孖ST鐨勫歡鏃舵椂闂達紝嫻嬭瘯宸ュ叿涓篒LTiming.exe銆?br />銆銆......
銆銆ucCurrentInterrupt = PICGetCurrentInterrupt(); ////榪斿洖褰撳墠涓柇IRQ
銆if (ucCurrentInterrupt == INTR_TIMER0) ///IRQ0錛孖RQ0涓虹郴緇熸椂閽燂紙system tick錛変腑鏂紝鍏蜂綋瑙佲滀簩銆佸疄鐜扮郴緇熸椂閽熲?br />銆......
銆if (dwRebootAddress) ////鏄惁闇瑕侀噸鍚姩
銆銆RebootHandler();
銆銆......
銆if(ucCurrentInterrupt == INTR_RTC) ////IRQ8錛宺eal-time clock鐨勪腑鏂?br />銆銆......
銆else if (ucCurrentInterrupt <= INTR_MAXIMUM) ///濡傛灉涓柇灝忎簬 INTR_MAXIMUM
銆{
銆銆ulRet = NKCallIntChain(ucCurrentInterrupt); ////璋冪敤涓柇閾?br />銆銆if (ulRet == SYSINTR_CHAIN) ///濡傛灉涓柇閾炬湭鍖呭惈涓柇
銆銆銆ulRet = OEMTranslateIrq(ucCurrentInterrupt); ////鍦↖RQ 鍜孲YSINTR涔嬮棿杞崲錛屾鍑芥暟榪斿洖IRQ瀵瑰簲鐨凷YSINTR
銆銆銆......
銆銆銆PICEnableInterrupt(ucCurrentInterrupt, FALSE); ///鍚敤闄ゅ綋鍓嶄腑鏂互澶栫殑鎵鏈変腑鏂?br />銆} ///else if
銆OEMIndicateIntSource(ulRet); ///閫氱煡鍐呮牳宸茬粡鍙戠敓SYSINTR涓柇
}

銆銆浠庝互涓婁唬鐮佷笉闅劇湅鍑篒SR鐨勪換鍔″氨鏄繑鍥炰互鈥淪YSINTR_鈥濅負鍓嶇紑鐨勪腑鏂璉D錛屽鏋滀笉闇瑕佽繘涓姝ユ墽琛孖ST錛岄偅涔堝氨榪斿洖SYSINTR_NOP銆?br />
銆銆3. 涓柇娉ㄥ唽姝ラ

銆銆鍙傝僗86騫沖彴鐨勪唬鐮侊紝涓柇娉ㄥ唽姝ラ濡備笅錛?br />
銆銆1) 鐢⊿ETUP_INTERRUPT_MAP瀹忓叧鑱擲YSINTR鍜孖RQ銆備互鈥淪YSINTR_鈥濅負鍓嶇紑鐨勫父閲忕敱鍐呮牳浣跨敤錛岀敤浜庡敮涓鏍囪瘑鍙戠敓涓柇鐨勭‖浠躲傚湪Nkintr.h鏂囦歡涓瀹氫箟浜嗕竴浜汼YSINTR錛孫EM鍙互鍦∣alintr.h鏂囦歡涓嚜瀹氫箟SYSINTR銆?br />
銆銆2) 鐢℉ookInterrupt鍑芥暟鍏寵仈紜歡涓柇鍙峰拰ISR銆傝繖閲岀殑紜歡涓柇鍙蜂負鐗╃悊涓柇鍙鳳紝鑰岄潪閫昏緫涓柇鍙稩RQ銆傚湪InitPICs鍑芥暟錛堝拰涓婅堪ISR浣嶄簬鍚屼竴鏂囦歡錛夌殑鏈鍚庤皟鐢ㄤ簡HookInterrupt鍑芥暟錛屽涓嬶細

for (i = 64; i < 80; i++)
銆HookInterrupt(i, (void *)PeRPISR); ///鐢↖SR鍏寵仈16涓腑鏂彿

銆銆4. 涓柇澶勭悊姝ラ

銆銆1) 璋冪敤InterruptInitialize鍑芥暟鍏寵仈SYSINTR鍜孖ST錛屽叿浣撴槸鍏寵仈IST絳夊緟鐨勪簨浠躲備竴鑸湪椹卞姩紼嬪簭涓寜濡備笅緙栧啓錛?br />
hEvent = CreateEvent(...) ///鍒涘緩涓涓簨浠跺璞?br />InterruptInitialize(SYSINTR_SERIAL, hEvent, ...) ///鍏寵仈涓涓覆鍙d腑鏂璉D鍜岃繖涓簨浠?br />hThd = CreateThread(..., MyISTRoutine, hEvent, ...) ///鍒涘緩涓涓嚎紼嬶紙IST錛?br />CeSetThreadPriority(hThd, 152); ///鎻愰珮姝ょ嚎紼嬬殑浼樺厛綰?/td>

銆銆2) IST鎵цI/O鎿嶄綔錛屼竴鑸琁ST鎸夊涓嬬紪鍐欙細

for(;;) ///椹卞姩紼嬪簭涓鐩村浜庢湇鍔$姸鎬?br />{
銆WaitForSingleObject(hEvent, INFINITE); ////鏃犻檺絳夊緟浜嬩歡
銆...... //// I/O鎿嶄綔
銆InterruptDone(InterruptId); ///緇撴潫褰撳墠涓柇澶勭悊
}

銆銆3) ISR鍜孖ST涔嬮棿鏁版嵁浼犺緭

銆銆鍋囧鎴戜滑瑕佷粠涓涓澶囬綣佺殑璇誨彇鏁版嵁鑰屾瘡嬈¤鍙栭噺闈炲父灝戯紝閭d箞姣忔璇誨彇閮借璋冪敤IST浼氶檷浣庢ц兘銆備綔涓鴻В鍐蟲柟妗堬紝ISR鍙互鍋氳鍙栧伐浣滐紙瀛樻斁鍒扮紦鍐插尯錛夛紝騫跺湪緙撳啿鍖哄瓨鏀炬弧鍚庣敱IST鍒扮紦鍐插尯璇誨彇銆傚洜涓篒SR榪愯鍦ㄥ唴鏍告ā寮忚孖ST榪愯鍦ㄧ敤鎴鋒ā寮忥紝IST涓嶈兘杞繪槗鍦拌闂甀SR鐨勭紦鍐插尯錛屼負姝E鎻愪緵浜嗕竴涓姙娉曪紙鍙傝鏍囬涓衡淧assing Data between an ISR and an IST鈥濈殑甯姪鏂囨。錛夛紝鎮ㄤ篃鍙互鍒?a target="_blank">澶╂瀬緗戝祵鍏ュ紡寮鍙戣鍧?/font>璇㈤棶銆?br />
銆銆浜屻佸疄鐜扮郴緇熸椂閽?/b>

銆銆1. 緋葷粺鏃墮挓錛坰ystem tick錛夋蹇?br />
銆銆緋葷粺鏃墮挓鏄唴鏍擱渶瑕佺殑鍞竴涓柇錛圛RQ0錛夛紝緋葷粺鏃墮挓姣忔縐掍駭鐢熶竴涓腑鏂紝褰撳彂鐢熶腑鏂椂鍐呮牳鍦↖SR涓瘡璁★紝鍒?000鐨勫嶆暟灝辨槸榪囦簡涓縐掗挓銆傚湪澶勭悊緋葷粺鏃墮挓鐨処SR涓笉浠呰绱璁℃暟錛岃繕瑕佸喅瀹氭槸鍚﹂氱煡鍐呮牳寮濮嬮噸鏂拌皟搴﹀綋鍓嶆墍鏈夌殑綰跨▼銆傝瀹炵幇涓涓狾AL錛岀郴緇熸椂閽熸槸絎竴涓繀欏誨仛鐨勪簨銆?br />
銆銆2. X86騫沖彴緋葷粺鏃墮挓涓柇鐨勫鐞嗗伐浣?緋葷粺鏃墮挓鐢盜nitClock鍑芥暟璐熻矗鍒濆鍖栧伐浣滐紝涓鑸槸鍦∣EMInit鍑芥暟涓皟鐢ㄣ傚綋鍙戠敓涓柇鏃訛紝ISR棣栧厛鐢ㄤ笅鍒楄鍙ョ瘡璁¤鏁幫細

CurMSec += SYSTEM_TICK_MS; /////SYSTEM_TICK_MS = 1

銆銆鐒跺悗鏍規嵁涓嬪垪璇彞鍒ゆ柇搴旇榪斿洖浠涔堝鹼細

if ((int) (dwReschedTime 鈥?CurMSec) >= 0)
銆return SYSINTR_RESCHED; ///閲嶆柊璋冨害
else
銆return SYSINTR_NOP; ///涓嶅啀鎵ц浠諱綍鎿嶄綔

銆銆涓婅堪浠g爜涓叏灞鍙橀噺dwReschedTime鍦╯chedule.c涓畾涔夛紝涔熷氨鏄敱鍐呮牳鐨勮皟搴︽ā鍧楀喅瀹氬湪浣曟椂寮濮嬮噸鏂拌皟搴︾嚎紼嬨侰urMSec绱浜嗕粠WindowsCE鍚姩鍒板綋鍓嶆誨叡浜х敓浜嗗灝戜釜system tick銆傚疄鐜扮郴緇熸椂閽熷悗榪樿瀹炵幇OEMIdle鍑芥暟錛屽綋娌℃湁綰跨▼鍑嗗榪愯鏃禣EMIdle琚皟鐢紝OEMIdle鍑芥暟灝咰PU緗簬絀洪棽妯″紡錛屼絾鍦ㄧ┖闂叉ā寮忎笅浠嶇劧瑕佺瘡璁$郴緇熸椂閽熴?br />
銆銆涓夈両/O鎺у埗浠g爜

銆銆1. I/O鎺у埗浠g爜浣滅敤

銆銆搴旂敤杞歡鎴栬呴┍鍔ㄧ▼搴忓彲浠ヨ皟鐢↘ernelIoControl鍑芥暟涓嶰AL灞傞氫俊錛岃孠ernelIoControl鍦ㄥ唴閮ㄨ皟鐢∣EMIoControl鍑芥暟銆侽EMIoControl鏄竴涓狾AL API錛孫EM鍙互鍦∣EMIoControl涓紪鍐欒嚜宸辯殑I/O鎺у埗浠g爜瀹炵幇涓浜涘姛鑳斤紝鎴栬呰涓庡簲鐢ㄨ蔣浠墮氫俊銆侷/O鎺у埗浠g爜甯哥敤鐨勪緥瀛愬閲嶅惎璁$畻鏈恒佸緱鍒扮郴緇熶俊鎭佽緗甊TC銆佸緱鍒拌澶嘔D絳夈傝繕鏈変竴浜涚郴緇熺▼搴忎嬌鐢ㄧ殑鐗規畩鐨処/O鎺у埗浠g爜銆傚湪榪欓噷璇存槑涓涓嬶紝鎴戠粡榪囧疄楠岃瘉瀹濩E鎻愪緵鐨勫緱鍒拌澶嘔D鏂規硶騫墮潪鏈夋晥銆?br />
銆銆2. 緙栧啓鑷繁鐨処/O鎺у埗浠g爜姝ラ

銆銆1) 鍦╬kfuncs.h鎴栬呮柊緙栧啓涓涓?h鏂囦歡涓寜濡備笅鏍煎紡瀹氫箟錛?br />
#define IOCTL_MY_CONTROL CTL_CODE(FILE_DEVICE_HAL, 3000, METHOD_NEITHER, FILE_ANY_ACCESS)

銆銆2) 鍦╫emioctl.c涓慨鏀筄EMIoControl鍑芥暟錛屾坊鍔犲涓嬩唬鐮侊細

case IOCTL_MY_CONTROL:

......

銆銆3) 鍦ㄥ簲鐢ㄧ▼搴忎腑璋冪敤KernelIoControl鍑芥暟錛屽叿浣撳弬鏁板弬瑙佸府鍔╂枃妗?img src ="http://m.shnenglu.com/milkyway/aggbug/18267.html" width = "1" height = "1" />

]]>
NAND and NOR and XIPhttp://m.shnenglu.com/milkyway/articles/18266.html鐩告濋吀涓湁鐢?/dc:creator>鐩告濋吀涓湁鐢?/author>Fri, 02 Feb 2007 01:20:00 GMThttp://m.shnenglu.com/milkyway/articles/18266.htmlhttp://m.shnenglu.com/milkyway/comments/18266.htmlhttp://m.shnenglu.com/milkyway/articles/18266.html#Feedback0http://m.shnenglu.com/milkyway/comments/commentRss/18266.htmlhttp://m.shnenglu.com/milkyway/services/trackbacks/18266.htmlhttp://www.student.buct.edu.cn/snc/blog/blog.asp?name=wy12218&month=2003-9

NOR鍜孨AND鏄幇鍦ㄥ競鍦轟笂涓ょ涓昏鐨勯潪鏄撳け闂瓨鎶鏈侷ntel浜?988騫撮鍏堝紑鍙戝嚭NOR flash鎶鏈紝褰誨簳鏀瑰彉浜嗗師鍏堢敱EPROM鍜孍EPROM涓緇熷ぉ涓嬬殑灞闈€傜揣鎺ョ潃錛?989騫達紝涓滆姖鍏徃鍙戣〃浜哊AND flash緇撴瀯錛屽己璋冮檷浣庢瘡姣旂壒鐨勬垚鏈紝鏇撮珮鐨勬ц兘錛屽茍涓旇薄紓佺洏涓鏍峰彲浠ラ氳繃鎺ュ彛杞繪澗鍗囩駭銆備絾鏄粡榪囦簡鍗佸騫翠箣鍚庯紝浠嶇劧鏈夌浉褰撳鐨勭‖浠跺伐紼嬪笀鍒嗕笉娓匩OR鍜孨AND闂瓨銆?
鐩糕渇lash瀛樺偍鍣ㄢ濈粡甯稿彲浠ヤ笌鐩糕淣OR瀛樺偍鍣ㄢ濅簰鎹嬌鐢ㄣ傝澶氫笟鍐呬漢澹篃鎼炰笉娓呮NAND闂瓨鎶鏈浉瀵逛簬NOR鎶鏈殑浼樿秺涔嬪錛屽洜涓哄ぇ澶氭暟鎯呭喌涓嬮棯瀛樺彧鏄敤鏉ュ瓨鍌ㄥ皯閲忕殑浠g爜錛岃繖鏃禢OR闂瓨鏇撮傚悎涓浜涖傝孨AND鍒欐槸楂樻暟鎹瓨鍌ㄥ瘑搴︾殑鐞嗘兂瑙e喅鏂規銆?
NOR鐨勭壒鐐規槸鑺墖鍐呮墽琛?XIP, eXecute In Place)錛岃繖鏍峰簲鐢ㄧ▼搴忓彲浠ョ洿鎺ュ湪flash闂瓨鍐呰繍琛岋紝涓嶅繀鍐嶆妸浠g爜璇誨埌緋葷粺RAM涓侼OR鐨勪紶杈撴晥鐜囧緢楂橈紝鍦?锝?MB鐨勫皬瀹歸噺鏃跺叿鏈夊緢楂樼殑鎴愭湰鏁堢泭錛屼絾鏄緢浣庣殑鍐欏叆鍜屾摝闄ら熷害澶уぇ褰卞搷浜嗗畠鐨勬ц兘銆?
NAND緇撴瀯鑳芥彁渚涙瀬楂樼殑鍗曞厓瀵嗗害錛屽彲浠ヨ揪鍒伴珮瀛樺偍瀵嗗害錛屽茍涓斿啓鍏ュ拰鎿﹂櫎鐨勯熷害涔熷緢蹇傚簲鐢∟AND鐨勫洶闅懼湪浜巉lash鐨勭鐞嗗拰闇瑕佺壒孌婄殑緋葷粺鎺ュ彛銆?

鎬ц兘姣旇緝
flash闂瓨鏄潪鏄撳け瀛樺偍鍣紝鍙互瀵圭О涓哄潡鐨勫瓨鍌ㄥ櫒鍗曞厓鍧楄繘琛屾摝鍐欏拰鍐嶇紪紼嬨備換浣昮lash鍣ㄤ歡鐨勫啓鍏ユ搷浣滃彧鑳藉湪絀烘垨宸叉摝闄ょ殑鍗曞厓鍐呰繘琛岋紝鎵浠ュぇ澶氭暟鎯呭喌涓嬶紝鍦ㄨ繘琛屽啓鍏ユ搷浣滀箣鍓嶅繀欏誨厛鎵ц鎿﹂櫎銆侼AND鍣ㄤ歡鎵ц鎿﹂櫎鎿嶄綔鏄崄鍒嗙畝鍗曠殑錛岃孨OR鍒欒姹傚湪榪涜鎿﹂櫎鍓嶅厛瑕佸皢鐩爣鍧楀唴鎵鏈夌殑浣嶉兘鍐欎負0銆?
鐢變簬鎿﹂櫎NOR鍣ㄤ歡鏃舵槸浠?4锝?28KB鐨勫潡榪涜鐨勶紝鎵ц涓涓啓鍏?鎿﹂櫎鎿嶄綔鐨勬椂闂翠負5s錛屼笌姝ょ浉鍙嶏紝鎿﹂櫎NAND鍣ㄤ歡鏄互8锝?2KB鐨勫潡榪涜鐨勶紝鎵ц鐩稿悓鐨勬搷浣滄渶澶氬彧闇瑕?ms銆?
鎵ц鎿﹂櫎鏃跺潡灝哄鐨勪笉鍚岃繘涓姝ユ媺澶т簡NOR鍜孨ADN涔嬮棿鐨勬ц兘宸窛錛岀粺璁¤〃鏄庯紝瀵逛簬緇欏畾鐨勪竴濂楀啓鍏ユ搷浣?灝ゅ叾鏄洿鏂板皬鏂囦歡鏃?錛屾洿澶氱殑鎿﹂櫎鎿嶄綔蹇呴』鍦ㄥ熀浜嶯OR鐨勫崟鍏冧腑榪涜銆傝繖鏍鳳紝褰撻夋嫨瀛樺偍瑙e喅鏂規鏃訛紝璁捐甯堝繀欏繪潈琛′互涓嬬殑鍚勯」鍥犵礌銆?
鈼?NOR鐨勮閫熷害姣擭AND紼嶅揩涓浜涖?
鈼?NAND鐨勫啓鍏ラ熷害姣擭OR蹇緢澶氥?
鈼?NAND鐨?ms鎿﹂櫎閫熷害榪滄瘮NOR鐨?s蹇?
鈼?澶у鏁板啓鍏ユ搷浣滈渶瑕佸厛榪涜鎿﹂櫎鎿嶄綔銆?
鈼?NAND鐨勬摝闄ゅ崟鍏冩洿灝忥紝鐩稿簲鐨勬摝闄ょ數璺洿灝戙?

鎺ュ彛宸埆
NOR flash甯︽湁SRAM鎺ュ彛錛屾湁瓚沖鐨勫湴鍧寮曡剼鏉ュ鍧錛屽彲浠ュ緢瀹規槗鍦板瓨鍙栧叾鍐呴儴鐨勬瘡涓涓瓧鑺傘?
NAND鍣ㄤ歡浣跨敤澶嶆潅鐨処/O鍙f潵涓茶鍦板瓨鍙栨暟鎹紝鍚勪釜浜у搧鎴栧巶鍟嗙殑鏂規硶鍙兘鍚勪笉鐩稿悓銆?涓紩鑴氱敤鏉ヤ紶閫佹帶鍒躲佸湴鍧鍜屾暟鎹俊鎭?
NAND璇誨拰鍐欐搷浣滈噰鐢?12瀛楄妭鐨勫潡錛岃繖涓鐐規湁鐐瑰儚紜洏綆$悊姝ょ被鎿嶄綔錛屽緢鑷劧鍦幫紝鍩轟簬NAND鐨勫瓨鍌ㄥ櫒灝卞彲浠ュ彇浠g‖鐩樻垨鍏朵粬鍧楄澶囥?

瀹歸噺鍜屾垚鏈?
NAND flash鐨勫崟鍏冨昂瀵稿嚑涔庢槸NOR鍣ㄤ歡鐨勪竴鍗婏紝鐢變簬鐢熶駭榪囩▼鏇翠負綆鍗曪紝NAND緇撴瀯鍙互鍦ㄧ粰瀹氱殑妯″叿灝哄鍐呮彁渚涙洿楂樼殑瀹歸噺錛屼篃灝辯浉搴斿湴闄嶄綆浜嗕環鏍箋?
NOR flash鍗犳嵁浜嗗閲忎負1锝?6MB闂瓨甯傚満鐨勫ぇ閮ㄥ垎錛岃孨AND flash鍙槸鐢ㄥ湪8锝?28MB鐨勪駭鍝佸綋涓紝榪欎篃璇存槑NOR涓昏搴旂敤鍦ㄤ唬鐮佸瓨鍌ㄤ粙璐ㄤ腑錛孨AND閫傚悎浜庢暟鎹瓨鍌紝NAND鍦–ompactFlash銆丼ecure Digital銆丳C Cards鍜孧MC瀛樺偍鍗″競鍦轟笂鎵鍗犱喚棰濇渶澶с?

鍙?鎬у拰鑰愮敤鎬?
閲囩敤flahs浠嬭川鏃朵竴涓渶瑕侀噸鐐硅冭檻鐨勯棶棰樻槸鍙?鎬с傚浜庨渶瑕佹墿灞昅TBF鐨勭郴緇熸潵璇達紝Flash鏄潪甯稿悎閫傜殑瀛樺偍鏂規銆傚彲浠ヤ粠瀵垮懡(鑰愮敤鎬?銆佷綅浜ゆ崲鍜屽潖鍧楀鐞嗕笁涓柟闈㈡潵姣旇緝NOR鍜孨AND鐨勫彲*鎬с?
瀵垮懡(鑰愮敤鎬?
鍦∟AND闂瓨涓瘡涓潡鐨勬渶澶ф摝鍐欐鏁版槸涓鐧句竾嬈★紝鑰孨OR鐨勬摝鍐欐鏁版槸鍗佷竾嬈°侼AND瀛樺偍鍣ㄩ櫎浜嗗叿鏈?0姣?鐨勫潡鎿﹂櫎鍛ㄦ湡浼樺娍錛屽吀鍨嬬殑NAND鍧楀昂瀵歌姣擭OR鍣ㄤ歡灝?鍊嶏紝姣忎釜NAND瀛樺偍鍣ㄥ潡鍦ㄧ粰瀹氱殑鏃墮棿鍐呯殑鍒犻櫎嬈℃暟瑕佸皯涓浜涖?
浣嶄氦鎹?
鎵鏈塮lash鍣ㄤ歡閮藉彈浣嶄氦鎹㈢幇璞$殑鍥版壈銆傚湪鏌愪簺鎯呭喌涓?寰堝皯瑙侊紝NAND鍙戠敓鐨勬鏁拌姣擭OR澶?錛屼竴涓瘮鐗逛綅浼氬彂鐢熷弽杞垨琚姤鍛婂弽杞簡銆?
涓浣嶇殑鍙樺寲鍙兘涓嶅緢鏄庢樉錛屼絾鏄鏋滃彂鐢熷湪涓涓叧閿枃浠朵笂錛岃繖涓皬灝忕殑鏁呴殰鍙兘瀵艱嚧緋葷粺鍋滄満銆傚鏋滃彧鏄姤鍛婃湁闂錛屽璇誨嚑嬈″氨鍙兘瑙e喅浜嗐?
褰撶劧錛屽鏋滆繖涓綅鐪熺殑鏀瑰彉浜嗭紝灝卞繀欏婚噰鐢ㄩ敊璇帰嫻?閿欒鏇存(EDC/ECC)綆楁硶銆備綅鍙嶈漿鐨勯棶棰樻洿澶氳浜嶯AND闂瓨錛孨AND鐨勪緵搴斿晢寤鴻浣跨敤NAND闂瓨鐨勬椂鍊欙紝鍚屾椂浣跨敤EDC/ECC綆楁硶銆?
榪欎釜闂瀵逛簬鐢∟AND瀛樺偍澶氬獟浣撲俊鎭椂鍊掍笉鏄嚧鍛界殑銆傚綋鐒訛紝濡傛灉鐢ㄦ湰鍦板瓨鍌ㄨ澶囨潵瀛樺偍鎿嶄綔緋葷粺銆侀厤緗枃浠舵垨鍏朵粬鏁忔劅淇℃伅鏃訛紝蹇呴』浣跨敤EDC/ECC緋葷粺浠ョ‘淇濆彲*鎬с?
鍧忓潡澶勭悊
NAND鍣ㄤ歡涓殑鍧忓潡鏄殢鏈哄垎甯冪殑銆備互鍓嶄篃鏇炬湁榪囨秷闄ゅ潖鍧楃殑鍔姏錛屼絾鍙戠幇鎴愬搧鐜囧お浣庯紝浠d環澶珮錛屾牴鏈笉鍒掔畻銆?
NAND鍣ㄤ歡闇瑕佸浠嬭川榪涜鍒濆鍖栨壂鎻忎互鍙戠幇鍧忓潡錛屽茍灝嗗潖鍧楁爣璁頒負涓嶅彲鐢ㄣ傚湪宸插埗鎴愮殑鍣ㄤ歡涓紝濡傛灉閫氳繃鍙?鐨勬柟娉曚笉鑳借繘琛岃繖欏瑰鐞嗭紝灝嗗鑷撮珮鏁呴殰鐜囥?

鏄撲簬浣跨敤
鍙互闈炲父鐩存帴鍦頒嬌鐢ㄥ熀浜嶯OR鐨勯棯瀛橈紝鍙互鍍忓叾浠栧瓨鍌ㄥ櫒閭f牱榪炴帴錛屽茍鍙互鍦ㄤ笂闈㈢洿鎺ヨ繍琛屼唬鐮併?
鐢變簬闇瑕両/O鎺ュ彛錛孨AND瑕佸鏉傚緱澶氥傚悇縐峃AND鍣ㄤ歡鐨勫瓨鍙栨柟娉曞洜鍘傚鑰屽紓銆?
鍦ㄤ嬌鐢∟AND鍣ㄤ歡鏃訛紝蹇呴』鍏堝啓鍏ラ┍鍔ㄧ▼搴忥紝鎵嶈兘緇х畫鎵ц鍏朵粬鎿嶄綔銆傚悜NAND鍣ㄤ歡鍐欏叆淇℃伅闇瑕佺浉褰撶殑鎶宸э紝鍥犱負璁捐甯堢粷涓嶈兘鍚戝潖鍧楀啓鍏ワ紝榪欏氨鎰忓懗鐫鍦∟AND鍣ㄤ歡涓婅嚜濮嬭嚦緇堥兘蹇呴』榪涜铏氭嫙鏄犲皠銆?

杞歡鏀寔
褰撹璁鴻蔣浠舵敮鎸佺殑鏃跺欙紝搴旇鍖哄埆鍩烘湰鐨勮/鍐?鎿︽搷浣滃拰楂樹竴綰х殑鐢ㄤ簬紓佺洏浠跨湡鍜岄棯瀛樼鐞嗙畻娉曠殑杞歡錛屽寘鎷ц兘浼樺寲銆?
鍦∟OR鍣ㄤ歡涓婅繍琛屼唬鐮佷笉闇瑕佷換浣曠殑杞歡鏀寔錛屽湪NAND鍣ㄤ歡涓婅繘琛屽悓鏍鋒搷浣滄椂錛岄氬父闇瑕侀┍鍔ㄧ▼搴忥紝涔熷氨鏄唴瀛樻妧鏈┍鍔ㄧ▼搴?MTD)錛孨AND鍜孨OR鍣ㄤ歡鍦ㄨ繘琛屽啓鍏ュ拰鎿﹂櫎鎿嶄綔鏃墮兘闇瑕丮TD銆?
浣跨敤NOR鍣ㄤ歡鏃舵墍闇瑕佺殑MTD瑕佺浉瀵瑰皯涓浜涳紝璁稿鍘傚晢閮芥彁渚涚敤浜嶯OR鍣ㄤ歡鐨勬洿楂樼駭杞歡錛岃繖鍏朵腑鍖呮嫭M-System鐨凾rueFFS椹卞姩錛岃椹卞姩琚玏ind River System銆丮icrosoft銆丵NX Software System銆丼ymbian鍜孖ntel絳夊巶鍟嗘墍閲囩敤銆?
椹卞姩榪樼敤浜庡DiskOnChip浜у搧榪涜浠跨湡鍜孨AND闂瓨鐨勭鐞嗭紝鍖呮嫭綰犻敊銆佸潖鍧楀鐞嗗拰鎹熻楀鉤琛?img src ="http://m.shnenglu.com/milkyway/aggbug/18266.html" width = "1" height = "1" />

]]>
WINCE鐨勫唴瀛橀厤緗?/title><link>http://m.shnenglu.com/milkyway/articles/17845.html</link><dc:creator>鐩告濋吀涓湁鐢?/dc:creator><author>鐩告濋吀涓湁鐢?/author><pubDate>Sat, 20 Jan 2007 13:25:00 GMT</pubDate><guid>http://m.shnenglu.com/milkyway/articles/17845.html</guid><wfw:comment>http://m.shnenglu.com/milkyway/comments/17845.html</wfw:comment><comments>http://m.shnenglu.com/milkyway/articles/17845.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/milkyway/comments/commentRss/17845.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/milkyway/services/trackbacks/17845.html</trackback:ping><description><![CDATA[ <p>by聽 microsun<br /><br />WINCE鐨勫唴瀛橈紙鍖呮嫭SDRAM鍙奆LASH錛夌殑閰嶇疆鍖呭惈涓や釜鏂歸潰錛氭簮浠g爜(鍖呮嫭C鍜屾眹緙?涓殑瀹氫箟,鍙婄郴緇熼厤緗枃浠禖ONFIG.BIB涓殑瀹氫箟銆傛簮浠g爜涓渶瑕佸畾涔夊唴瀛樼殑鐗╃悊鍙婅櫄鎷熷湴鍧錛屽ぇ灝忥紝騫跺垵濮嬪寲鍚嶄負OEMAddressTable鐨勭粨鏋勬暟緇勶紝浠ュ憡鐭ョ郴緇熺墿鐞嗗湴鍧涓庤櫄鎷熷湴鍧鐨勫搴斿叧緋伙紝緋葷粺鏍規嵁鍏惰緗敓鎴怣MU欏佃〃銆傝孋ONFIG.BIB涓竴鑸細灝嗗唴瀛樺畾涔夋垚涓嶅悓鐨勬錛屽悇孌電敤浣滀笉鍚岀殑鐢ㄩ斻?br /><br />CONFIG.BIB鏂囦歡<br />CONFIG.BIB鏂囦歡鍒嗕袱涓儴鍒嗭紝鎴戜滑涓旂О涔嬩負孌碉紝MEMORY孌靛拰CONFIG孌點侻EMORY孌靛畾涔夊唴瀛樼殑鍒嗙墖鏂規硶錛孋ONFIG孌靛畾涔夌郴緇熷叾瀹冪殑涓浜涘睘鎬с備互涓嬫槸涓涓狢ONFIG銆侭IB鏂囦歡MEMORY孌電殑渚嬪瓙錛?br />MEMORY<br />錛?鍚嶇О 璧峰鍦板潃 澶у皬 灞炴?br />RESERVED 80000000 00008000 RESERVED<br />DRV_GLB 80008000 00001000 RESERVED<br />CS8900 80010000 00030000 RESERVED<br />EDBG 80040000 00080000 RESERVED<br />NK 800C0000 00740000 RAMIMAGE<br />RAM 81000000 00800000 RAM<br /><br />鍚嶇О鍘熷垯涓婂彲浠ュ彇浠繪剰瀛楃涓詫紝ROMIMAGE閫氳繃涓涓唴瀛樼墖鐨勫睘鎬ф潵鍒ゆ柇瀹冪殑鐢ㄩ斻俁ESERVE灞炴ц〃鏄庤鐗囧唴瀛樻槸BSP鑷繁浣跨敤鐨勶紝緋葷粺涓嶅繀鍏沖績鍏剁敤閫旓紱RAMIMAGE璇存槑瀹冩槸涓鐗囧瓨鏀綩S IMAGE鐨勫唴瀛橈紱鑰孯AM鍒欒〃紺轟簺鐗囧唴瀛樹負RAM錛岀郴緇熷彲浠ュ湪鍏朵腑鍒嗛厤絀洪棿錛岃繍琛岀▼搴忋?br />浣嗗瓨鏀綬OM鐨勮繖鐗囧唴瀛樼殑鍚嶇О錛屽嵆NK涓鑸笉瑕佹敼鍔ㄣ傚洜涓築IB鏂囦歡涓畾涔夊皢涓涓枃浠跺姞鍏ュ埌鍝釜ROM鐗囷紙WINCE鏀寔灝哛OM銆IMAGE瀛樻斁鍦ㄤ笉榪炵畫鐨勫嚑涓唴瀛樼墖涓級涓椂浼氱敤鍒拌繖涓悕縐幫紝濡備笅鐜拌繖琛孊IB鏂囦歡欏瑰氨瀹氫箟灝唗ouch.dll鏀懼湪鍚嶇О涓篘K榪欑墖ROM涓紝<br />touch.dll $(_FLATRELEASEDIR)\touch.dll NK SH<br />鍥犺岋紝濡傛灉灝哊K鏀逛負鍏跺畠鍚嶇О錛屽垯緋葷粺涓墍鏈夌殑BIB鏂囦歡涓殑榪欎釜NK涓查兘闇瑕佹敼鍔ㄣ?br />娉ㄦ剰錛氫繚璇佸悇鐗囧唴瀛樹笉瑕侀噸鍙狅紱鑰屼笖涓棿涓嶈鐣欑┖媧烇紝浠ヨ妭綰﹀唴瀛橈紱涓ょ璁懼濡傛灉涓嶈兘鍚屾椂琚姞杞斤紝灝卞簲璇ュ彧涓哄叾淇濈暀涓鐗囦粠鑰岃妭綰﹀唴瀛橈紝渚嬪錛屾湰渚嬩腑鐨凜S8950鏄負緗戝崱椹卞姩紼嬪簭淇濈暀鐨勶紝EDBG鏄負緗戝崱浣滆皟璇曪紙KITL錛夌敤鏃朵繚鐣欑殑錛岃岀郴緇熻璁℃垚榪欎袱涓▼搴忎笉浼氬悓鏃跺姞杞斤紙CS8950鍦ㄥ惎鍔ㄦ椂鍒ゆ柇濡傛灉EDBG鍦ㄨ繍琛屽氨浼氳嚜鍔ㄩ鍑猴級錛岃繖鏍蜂負榪欎袱涓┍鍔ㄧ▼搴忓悇淇濈暀涓鐗囧唴瀛樺疄鍦ㄦ氮璐硅屼笖涔熸病鏈夊繀瑕併?br />RAM鐗囧繀欏誨湪鐗╃悊涓婃槸榪炵畫鐨勶紝濡傛灉緋葷粺鐨勭墿鐞嗗唴瀛樿鍒嗘垚浜嗗嚑鐗囷紝鍒欏湪RAM鐗囧彧鑳藉0鏄庝竴鐗囷紝鍏跺畠鐨勫唴瀛樺湪鍚姩闃舵鐢監EMGetExtensionDRAM鎶ュ憡緇欑郴緇燂紝濡傛灉鏈夊浜庝竴涓殑鍐呭瓨鐗囷紝搴旇鐢∣EMEnumExtensionDRAM鎶ュ憡銆侼K鐗囧垯娌℃湁姝ら檺鍒訛紝鍙槸NK璺ㄨ秺涓や釜浠ヤ笂鐗╃悊鍐呭瓨鐗囨椂錛岀郴緇熷惎鍔ㄦ椂浼氭樉紺鴻繖涓狾S鍖呰法瓚婁簡澶氫釜鐗╃悊鍐呭瓨鐗囷紝璁や負鏄釜閿欒錛屼絾騫朵笉褰卞搷緋葷粺鐨勬墽琛屼笌紼沖畾鎬э紝鍥犱負緋葷粺鍚姩涔嬫椂渚夸細鎵撳紑MMU鑰屼嬌鐢ㄨ櫄鎷熷湴鍧錛屼粠鑰岀湅鍒拌繛緇殑鍐呭瓨絀洪棿銆傚綋鐒訛紝濡傛灉鍐呮牳鑷繁閮借鏀懼湪浜嗕袱涓唴瀛樼墖涓婏紝閭g郴緇熷簲璇ュ氨鏃犳硶鍚姩浜嗐傝屽叾瀹冧繚鐣欒搗鏉ョ殑鍐呭瓨鐗囨槸涓鑸槸緇欓┍鍔ㄧ▼搴廌MA鐢紝搴旇淇濊瘉瀹冧滑鍦ㄧ墿鐞嗕笂鐨勮繛緇э紝鍥犱負DMA鏄洿鎺ョ敤鐗╃悊鍦板潃鐨勩?br />CONFIG孌典腑浠ヤ笅鍑犱釜闇瑕佹牸澶栨敞鎰忥細<br />ROMSTART錛屽畠瀹氫箟ROM鐨勮搗濮嬩綅緗紝搴旇鍜孨K鐗囩殑璧峰浣嶇疆鐩稿悓銆?br />ROMSIZE錛屽畾涔塕OM鐨勫ぇ灝忥紝搴旇鍜孨K鐗囩殑澶у皬鐩稿悓銆?br />濡傛灉涓嶉渶瑕丯K銆侭IN鏂囦歡錛屽垯鍙互涓嶈榪欎袱涓箋?br />ROMWIDTH錛屽畠鍙槸瀹氫箟ROMIMAG鐢熸垚ROM鍖呮椂濡備綍緇勭粐鏂囦歡錛岃岄潪鍏跺瓧闈㈠惈涔夛細ROM鐨勫搴︼紝鎵浠ヤ竴鑸兘搴旇涓?2<br />COMPRESSION錛屼竴鑸畾涔変負ON錛屼互鎵撳紑鍘嬬緝鍔熻兘錛屼粠鑰屽噺灝廈IN鏂囦歡鐨勫昂瀵搞?br />AUTOSIZE錛屼竴鑸簲璇ヨ涓篛N錛屼互浣跨郴緇熷皢瀹氫箟緇橰OM浣嗘病鏈夌敤鎺夌殑鍐呭瓨褰撳仛RAM浣跨敤錛岃屾彁楂楻AM鐨勪嬌鐢ㄧ巼銆傛敞鎰忥紝濡傛灉ROM鏄疐LASH錛屽垯涓嶈兘璁句負ON錛屽洜涓篎LASH涓嶈兘褰撲綔RAM浣跨敤銆?br />ROMOFFSET錛屽畠瀹氫箟OS璧峰浣嶇疆錛堝嵆ROMSTART錛夌殑鐗╃悊鍦板潃鍜岃櫄鎷熷湴鍧鐨勫樊鍊鹼紝鏈変簺BSP涓茍娌℃湁浣跨敤榪欎釜瀹氫箟銆?br />OEMAddressTable鍙婂叾瀹?br />OEMAddressTable鐢ㄦ潵鍒濆鍖栫郴緇熶腑鍚勭璁懼鐨勮櫄鎷熷湴鍧涓庣墿鐞嗗湴鍧鐨勫鏄犲叧緋匯傚湪鎴戜嬌鐢ㄧ殑BSP涓紝瀹冩槸榪欐牱瀹氫箟騫跺垵濮嬪寲鐨勶細<br />typedef struct<br />{<br />ULONG ulVirtualAddress;<br />ULONG ulPhysicalAddress;<br />ULONG ulSizeInMegs;<br />} AddressTableStruct;<br /><br />#define MEG(A) (((A - 1)>>20) + 1)<br /><br />const AddressTableStruct OEMAddressTable[] =<br />{<br />{ SDRAM_VIRTUAL_MEMORY, //铏氭嫙鍦板潃<br />PHYSICAL_ADDR_SDRAM_MAIN, //鐗╃悊鍦板潃<br />MEG(SDRAM_MAIN_BLOCK_SIZE) //榪欐絀洪棿鐨勫ぇ灝忥紝浠璁?br />},<br />鈥︹︹︹︹︹︹︹︹?br />{<br />0,<br />0,<br />0<br />}<br />}錛?br />濡備緥瀛愭墍紺猴紝OEMAddressTable涓轟竴涓粨鏋勬暟緇勶紝姣忛」鐨勭涓涓垚鍛樹負铏氭嫙鍦板潃錛岀浜屼釜鎴愬憳涓哄搴旂殑鐗╃悊鍦板潃錛屾渶鍚庝竴涓垚鍛樹負璇ユ絀洪棿鐨勫ぇ灝忋傝繖涓暟緇勭殑鏈鍚庝竴欏瑰繀欏誨叏閮ㄤ負0錛屼互紺烘暣涓暟緇勭殑緇撴潫銆傚唴鏍稿惎鍔ㄦ椂浼氳鍙栬繖涓暟緇勭殑鍐呭浠ュ垵濮嬪寲MMU欏佃〃錛屽惎鐢∕MU錛屼粠灝斾嬌紼嬪簭鍙互鐢ㄨ櫄鎷熷湴鍧鏉ヨ闂澶囥傚綋鐒訛紝OEMAddressTable涓墍鐢ㄥ埌鐨勬瘡涓墿鐞嗗湴鍧鍙婅櫄鎷熷湴鍧閮介渶瑕佸湪澶存枃浠朵腑瀹氫箟錛屾瘡涓狟SP涓畾涔夎繖浜涘肩殑鏂囦歡涓嶅敖鐩稿悓錛屾墍浠ワ紝鍦ㄦ涓嶈兘璇存槑鍏蜂綋鍦ㄥ摢涓枃浠訛紝璇昏呮湅鍙嬪彲浠ュ弬鑰冨叿浣揃SP鐨勬枃妗e強浠g爜銆?br /><br />涓嶈繛緇唴瀛樼殑澶勭悊<br />濡傛灉鍐呭瓨鍦ㄧ墿鐞嗕笂鏄繛緇殑錛屽垯OEMAddressTable涓彧闇瑕佷竴欏瑰氨鍙互瀹屾垚瀵瑰唴瀛樼殑鍦板潃鏄犲皠銆備絾濡傛灉BSP榪愯鍦⊿DRAM鐗╃悊涓婁笉榪炵畫鐨勭郴緇熶笂鏃訛紝OEMAddressTable涓渶瑕佹洿澶氱殑欏規潵灝哠DRAM鏄犲皠鍒拌繛緇殑铏氭嫙鍦板潃涓婏紝褰撶劧涔熷彲浠ュ皢瀹冧滑鏄犲皠鍒頒笉榪炵畫鐨勮櫄鎷熷湴鍧涓婏紝浣嗕技涔庢病鏈夌悊鐢遍偅涔堝仛銆傝屼笖錛屽綋鍏剁墿鐞嗗湴鍧涓嶈繛緇椂緋葷粺闇瑕佸仛鏇村鐨勫伐浣溿備緥濡傦紝鎴戞湁榪欐牱涓涓郴緇燂細32M SDRAM錛?6M FLASH錛孲DRAM鍦ㄧ墿鐞嗕笂涓嶈繛緇紝琚垎鎴愪簡4涓?M鐨勫唴瀛樺潡錛屾垜鐨凷DRAM鐨勪嬌鐢ㄦ儏鍐靛涓嬪浘鎵紺猴細<br /><br /><br /><br />CONFIG銆侭IB鏂囦歡鐨凪EMORY孌靛涓嬫墍紺猴細<br />MEMORY<br />RESERVED 80000000 00008000 RESERVED<br />DRV_GLB 80008000 00001000 RESERVED<br />CS8900 80010000 00030000 RESERVED<br />EDBG 80040000 00080000 RESERVED<br />NK 800C0000 00940000 RAMIMAGE<br />RAM 81800000 00800000 RAM<br /><br />鍦ㄨ繖32M鐨勭┖闂翠腑錛孊SP淇濈暀浜嗗墠0x80000瀛楄妭錛屾帴涓嬫潵鏄疦K錛屽畠鍗犵敤浜?x940000瀛楄妭錛岃屼笖瀹冭法瓚婁簡涓や釜鍐呭瓨鐗?榪欎簺鍜屽叾瀹傿SP鐨勮緗兘娌℃湁澶氬ぇ宸埆,鎺ヤ笅鏉ョ湅RAM鐗?瀹冨彧鍗犵敤浜嗘渶鍚庣殑8M絀洪棿,鍓嶉潰璇磋繃錛屽湪榪欑鐗╃悊鍐呭瓨涓嶈繛緇殑緋葷粺涓紝RAM鐗囦笉鑳借法瓚婁袱涓墿鐞嗗唴瀛樺潡錛屾墍浠ュ畠琚璁℃垚鍙崰鐢ㄨ緋葷粺涓殑鏈鍚庝竴涓墿鐞嗗唴瀛樼墖錛岃屽叾瀹冧袱鐗囧垯鐢監EMEnumExtensionDRAM鍦ㄨ繍琛屾椂鍒繪姤鍛婄粰緋葷粺錛岃鍑芥暟鐨勫唴瀹瑰涓?<br /><br />pMemSections[0].dwFlags=0;<br />pMemSections[0].dwStart=(SDRAM_VIRTUAL_MEMORY + 0x1000000);<br />pMemSections[0].dwLen=0x800000;<br /><br />pMemSections[1].dwFlags=0;<br />pMemSections[1].dwStart=(SDRAM_VIRTUAL_MEMORY + 0x0A00000);<br />pMemSections[1].dwLen=0x600000;<br />return 2;<br />榪欐牱,緋葷粺鎵鏈夌殑鍐呭瓨閮借嬋媧?緋葷粺鍙敤鍐呭瓨灝卞彉鎴愪簡8+8+6=24M錛屽彲浠ュ皢RAM瀹氫箟涓鴻繖涓夌墖涓殑浠繪剰涓鐗囷紝鑰屽湪OEMEnumExtensionDRAM涓姤鍛婂叾瀹冧袱鐗囥備絾鎶奟AM鏀懼湪鏈鍚庝竴鐗囩墿鐞嗗唴瀛樹笂鏈変竴涓緢澶х殑濂藉錛屽嵆濡傛灉NK鍙樺ぇ錛屼緥濡傜紪璇戜竴涓狣EBUG鐗堢殑緋葷粺鏃訛紝榪欐椂錛屽彧闇瑕佸皢OEMEnumExtensionDRAM涓殑鍐呭娉ㄩ噴鎺夛紝CONFIG.BIB鏂囦歡涓嶇敤鍋氫換浣曟敼鍔紝緋葷粺灝卞彲榪愯錛屽彧鏄湪MAKEIMG鏃朵細鏈変竴涓鍛婅緋葷粺鍖呭お澶э紝鍙兘鏃犳硶榪愯錛屼絾瀹為檯涓嶄細褰卞搷緋葷粺鐨勬墽琛屼笌紼沖畾鎬э紝鍥犱負NK涔嬪悗鐨勯偅孌靛唴瀛樺茍娌℃湁琚嬌鐢紝姝eソ琚定澶х殑緋葷粺鍗犵敤錛岃繖鍦ㄨ皟璇曟椂鏋佸叾鏂逛究銆?br />鑰屽鏋滅郴緇熺墿鐞嗗唴瀛樻槸榪炵畫鐨勶紝閭e皢鍙樺緱綆鍗曠殑澶氾紝榪樹互涓婇潰鐨勮緗負渚嬶紝濡傛灉榪?2M鐨凷DRAM鏄墿鐞嗕笂榪炵畫鐨勶紝鍐呭瓨鐨勪嬌鐢ㄦ儏鍐靛氨鍙互琛ㄧず濡備笅鍥撅細<br /><br /><br />鎵鏈夎呯郴緇熷彲鐢ㄥ唴瀛橀兘鍙互瀹氫箟鍦≧AM鐗囦腑銆?br />瀵圭‖浠剁煡璇嗕簡瑙d笉澶氱殑鏈嬪弸璇鋒敞鎰忥細SDRAM鏄惁鍦ㄧ墿鐞嗕笂榪炵畫錛屼笌鎴戜滑鐨勬澘涓婃湁鍑犵墖SDRAM娌℃湁鍏崇郴錛屽簲璇ュ悜紜歡宸ョ▼甯堜簡瑙DRAM鐨勫湴鍧鍒嗗竷鎯呭喌銆?/p> <img src ="http://m.shnenglu.com/milkyway/aggbug/17845.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/milkyway/" target="_blank">鐩告濋吀涓湁鐢?/a> 2007-01-20 21:25 <a href="http://m.shnenglu.com/milkyway/articles/17845.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>ARM寮鍙戣繃紼嬩腑鏈鏈闇瑕佹敞鎰忕殑闂http://m.shnenglu.com/milkyway/articles/17844.html鐩告濋吀涓湁鐢?/dc:creator>鐩告濋吀涓湁鐢?/author>Sat, 20 Jan 2007 13:24:00 GMThttp://m.shnenglu.com/milkyway/articles/17844.htmlhttp://m.shnenglu.com/milkyway/comments/17844.htmlhttp://m.shnenglu.com/milkyway/articles/17844.html#Feedback0http://m.shnenglu.com/milkyway/comments/commentRss/17844.htmlhttp://m.shnenglu.com/milkyway/services/trackbacks/17844.html
騫蟲椂澶у鎺ヨЕ鏈澶氱殑鍙兘鏄疿86騫沖彴錛屽湪榪欑緋葷粺涓婂啓紼嬪簭鍑犱箮涓嶉渶瑕佽冭檻澶闂錛屼絾ARM涓婂氨涓嶄竴鏍蜂簡錛屾渶甯歌涔熸渶瀹規槗琚拷鐣ョ殑闂鍙兘灝辨槸瀛楄妭鐨勫榻愶紝鍗充嬌鍍忔垜榪欐牱鏈夊叚涓冨勾紼嬪簭寮鍙戠粡楠岀殑鎵嶆墜涔熸椂甯擱毦浜庢彁闃詫紝鏈榪戝氨鏈変竴涓狟UG錛岃姳浜嗕竴澶╂椂闂存渶緇堝彂鐜版槸瀵歸綈寮曞彂鐨勶紝鍦ㄦ涓庡ぇ瀹跺垎浜紝浣嗘効澶у鑳藉娉ㄦ剰鍒般?br />
銆銆鎴戝湪EBOOT涓鍙栧瓨鍦℉ARD銆DISK涓婄殑nk.bin鏂囦歡錛屼粠鑰屼粠HARD銆DISK涓奓OAD銆WINCE緋葷粺錛屽湪榪欎釜榪囩▼涓繪槸鏈塩heck sum閿欒錛屼絾浠巈thernet涓嬭澆鏃朵笉浼氭湁閿欙紝鎵浠ラ棶棰樺簲璇ヨ繕鏄湪鎴戝姞鐨勮繖閮ㄥ垎浠g爜涓婏紝鑰屼笖鍚屾牱鐨勪唬鐮佸湪PC涓婅兘姝e父榪愯銆傜粡榪囨鏌ヤ唬鐮佺殑閫昏緫鍏崇郴鏄紜殑銆傛帴鐫鎴戝湪鍑洪敊鏃跺皢閭d簺鏁版嵁鍏ㄩ儴鐢ㄨ皟璇曚俊鎭墦鍑烘潵錛屽彂鐜頒粠鏂囦歡寮濮嬬畻璧風4096涓瓧鑺傝涓㈡帀浜嗭紝鑰屽叾瀹冪殑瀛楄妭閮芥槸瀵圭殑銆傚垵姝ュ垽鏂槸瀵歸綈寮曞彂鐨勯棶棰橈紝鎵浠ュ幓鏌ユ瘡涓涓狟UFFER錛屾渶緇堝彂鐜版槸鍦ㄨ鍙栫‖鐩樻暟鎹椂BUFFERR騫舵病鏈夋寜鍙屽瓧鑺傚榻愶紝鑰岀‖鐩樹互16BIT璇誨彇鏁版嵁錛岃屽紩鍙戜簡閿欒銆?br />
瀹為檯涓婏紝榪欑被闂鍦ˋRM緋葷粺涓婂緢甯歌錛岃浜洪槻涓嶈儨闃詫紝浠ヤ笅鏄垜鐨勪竴浜涗緥瀛愩?br />
1錛岃В鏋愭暟鎹祦鏃跺簲璇ユ椂鍒繪敞鎰忋傚鏋滈渶瑕佹妸涓涓暟鎹祦錛圔UFFER錛夎漿鍖栨垚緇撴瀯榪涜鍙栧鹼紝灝卞簲璇ユ妸榪欎釜緇撴瀯瀹氫箟涓烘寜瀛楄妭瀛樺彇.鑰冭檻濡備笅緇撴瀯錛?br />
struct a{

char a;
short b;
long c;
};
濡傛灉鏌愪釜鏁版嵁嫻佷腑鍖呭惈榪欐牱鐨勭粨鏋勶紝鑰屼笖鎴戜滑瑕佺洿鎺ュ皢鏁版嵁嫻佺殑鎸囬拡杞寲鎴愯緇撴瀯鐨勬寚閽堬紝鐒跺悗鐩存帴鍙栫粨鏋勬垚鍛樼殑鍊鹼紝鎴戜滑灝卞簲璇ュ皢榪欎釜緇撴瀯瀹氫箟鎴愭寜瀛楄妭璁塊棶錛屽嵆灝嗗叾澶瑰湪璇彞
#pragma pack(push,1)
...

#pragma pack(pop)
涔嬩腑銆傚鏋滄垜浠笉榪欐牱鍋氾紝緙栬瘧鍣ㄤ細灝嗘垚鍛榖鐨勫湴鍧瀵歸綈鍒皊hort鎸囬拡鐨勫湴鍧錛屽嵆鍦╝涔嬪悗鍔犱笂涓涓猚har鍗?浣嶇殑鎴愬憳錛屽皢C瀵歸綈鍒癓ONG錛屽嵆鍦˙涔嬪悗鍐嶅姞涓涓猚har鎴愬憳銆傚姝や竴鏉ワ紝鎴愬憳B鍜屾垚鍛楥灝卞緱涓嶅埌姝g‘鐨勫間簡銆?br />
濡傛灉鎴戜滑瀹氫箟涓涓櫘閫氱殑緇撴瀯鐢ㄦ潵瀛樻斁涓浜涙暟鎹紝鍒欎笉鐢ㄥ畾涔夋垚鎸夊瓧鑺傚瓨鍙栵紝緙栬瘧鍣ㄤ細鍔犱笂涓浜涘崰浣嶆垚鍛橈紝浣嗗茍涓嶄細褰卞搷紼嬪簭鐨勮繍琛屻備粠榪欎釜鎰忎箟涓婅錛屽湪ARM涓紝灝嗙粨鏋勬垚鍛樺畾涔夋垚CHAR鍜孲HORT鏉ヨ妭綰﹀唴瀛樻槸娌℃湁鎰忎箟鐨勩?br />
涓涓吀鍨嬬殑渚嬪瓙灝辨枃浠剁郴緇熺殑椹卞姩紼嬪簭錛屾枃浠舵槸浠ヤ竴浜涘凡緇忓畾涔夊ソ鐨勭粨鏋勫瓨鏀懼湪瀛樺偍浠嬭川涓婄殑錛屽畠浠璇誨彇鍒頒竴涓狟UFFER涓紝鑰屽叿浣撳彇鏌愪釜鏂囦歡銆佺洰褰曠粨鏋勬椂錛屾垜浠細灝嗗湴鍧杞寲鎴愮粨鏋勮岃鍙栧叾涓殑鍊箋?br />

2錛岃闂璁炬椂銆?br />渚嬪錛岀鐩橀┍鍔ㄩ氬父浠?6BIT鐨勬柟寮忓瓨鍙栨暟鎹紝鍗蟲瘡嬈″瓨鍙栦袱涓瓧鑺傦紝榪欐牱灝辮姹備紶緇欏畠鐨凚UFFER鏄弻瀛楄妭瀵歸綈鐨勶紝椹卞姩紼嬪簭搴旇鑷充笂灞備紶鏉ョ殑鎸囬拡鍋氬嚭姝g‘鐨勫鐞嗕互淇濊瘉鏁版嵁鐨勬紜с?br />

3.鏈夋椂錛屾垜浠病鏈夊皢鏁版嵁嫻佹寚閽堣漿鍖栦負緇撴瀯鎸囬拡鍙栧鹼紝浣嗗鏋滄垜浠鍙栫殑鏄弻瀛楄妭鎴栬呮槸鍥涘瓧鑺傜殑鏁版嵁錛屽悓鏍烽渶瑕佹敞鎰忓榻愮殑闂錛屼緥濡傦紝濡傛灉浠庝竴涓狟UFFER鐨勫亸縐?0澶勮鍙栦竴涓洓瀛楄妭鍊鹼紝鍒欏疄闄呭緱鍒扮殑鍊兼槸鍋忕Щ8澶勭殑
鍦板潃涓婄殑DWORD鍊箋?img src ="http://m.shnenglu.com/milkyway/aggbug/17844.html" width = "1" height = "1" />

]]>
鍔犻烠E鐨勭紪璇戣繃紼?/title><link>http://m.shnenglu.com/milkyway/articles/17842.html</link><dc:creator>鐩告濋吀涓湁鐢?/dc:creator><author>鐩告濋吀涓湁鐢?/author><pubDate>Sat, 20 Jan 2007 13:22:00 GMT</pubDate><guid>http://m.shnenglu.com/milkyway/articles/17842.html</guid><wfw:comment>http://m.shnenglu.com/milkyway/comments/17842.html</wfw:comment><comments>http://m.shnenglu.com/milkyway/articles/17842.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/milkyway/comments/commentRss/17842.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/milkyway/services/trackbacks/17842.html</trackback:ping><description><![CDATA[ <p>鏉ヨ嚜<a >http://winceblog.blogspot.com/2006_11_01_archive.html</a><br /><br />涓涓父瑙佺殑鍔炴硶灝辨槸鎵ц鑿滃崟鍛戒護錛欱uild->Open Release Directory鍘繪墦寮涓涓懡浠よ紿楀彛錛岀劧鍚庡湪榪欎釜紿楀彛涓跡錛ゅ埌鎯沖埌緙栬瘧鐨勭洰褰曪紝鎵цBuild.濡傛灉瑕侀噸鏂扮紪璇戝氨榪愯Build -c,<br />鐒跺悗鎵懼埌鐢熸垚鐨勶激錛棘鏂囦歡錛屽皢鍏舵嫹鍒癛elease 鐩綍涓嬶紝鍐嶆墽琛宮akeimg灝辮浜嗭紟</p> <img src ="http://m.shnenglu.com/milkyway/aggbug/17842.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/milkyway/" target="_blank">鐩告濋吀涓湁鐢?/a> 2007-01-20 21:22 <a href="http://m.shnenglu.com/milkyway/articles/17842.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>windowsCE甯哥敤緙栬瘧鍙傛暟 鍙婄紪璇戝櫒鍒楄〃 http://m.shnenglu.com/milkyway/articles/17674.html鐩告濋吀涓湁鐢?/dc:creator>鐩告濋吀涓湁鐢?/author>Tue, 16 Jan 2007 02:13:00 GMThttp://m.shnenglu.com/milkyway/articles/17674.htmlhttp://m.shnenglu.com/milkyway/comments/17674.htmlhttp://m.shnenglu.com/milkyway/articles/17674.html#Feedback0http://m.shnenglu.com/milkyway/comments/commentRss/17674.htmlhttp://m.shnenglu.com/milkyway/services/trackbacks/17674.htmlhttp://www.cnblogs.com/nasiry/archive/2004/11/09/61958.aspx

---------------by nasiry聽

RELEASETYPE
鎸囧畾鍙戝竷鐨勭被鍨?瀹為檯涓婂氨鏄紪璇戝悗鐨勬枃浠剁殑瀛樻斁浣嶇疆鍙夐」涓?
SDK|DDK|PLATFORM|LOCAL|CUSTOM 鍏朵綑閫夐」絳夋晥OAK

DLLENTRY|EXEENTRY|NODLLENTRY
鎸囧畾鍏ュ彛鐐?

_TGTCPUFAMILY聽

鎸囧畾澶勭悊鍣ㄦ墍灞炲鏃忓彲閫墄86|MIPS|SH|ARM


LINT_TYPE
鍙塧ll | lob | ind

TARGETEXEFILES
鎺у埗杈撳嚭鏂囦歡 鍙塏OLINK---涓嶉摼鎺?


TARGETTYPE
杈撳嚭鏂囦歡鐨勭被鍨?鍙塂YNLINK|PROGRAM|LIBRARY

WINCEDEBUG
鏂囦歡鍙戝竷綾誨瀷 鍙塺etail|debug 絀?debug

CDEBUG_DEFINES
璋冭瘯緙栬瘧閫夐」 WINCE_LMEM_DEBUG|DISABLE_OPTIMIZER|WINCESHIP|WINCE_OVERRIDE_CFLAGS

TARGET_PDB_NAME
PDB鏂囦歡鍚?

WINCEPROFILE
鍙?|1

TGTCPUISANAME
澶勭悊鍣ㄥ悕縐?


緙栬瘧鍣?
x86

cxx cl386 -nologo
asm ml -nologo
-machine:iX86

SH3

cxx clsh -nologo
asm shasm
-machine:sh3

SH4
cxx clsh -nologo
asm shasm
-machine:sh4

MIPSII
cxx clmips -nologo
asm mipsasm
-machine:mips /-machine:-machine:mipsfpu

ARMV4聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 :

cxx聽clarm -nologo
asm armasm -coff
-machine:arm

ARMV4T
ARMV4I
clthumb -nologo
asm armasm -coff
-machine:thumb



]]>
Kitl鏄庢牱宸ヤ綔鐨勶紵http://m.shnenglu.com/milkyway/articles/17673.html鐩告濋吀涓湁鐢?/dc:creator>鐩告濋吀涓湁鐢?/author>Tue, 16 Jan 2007 02:08:00 GMThttp://m.shnenglu.com/milkyway/articles/17673.htmlhttp://m.shnenglu.com/milkyway/comments/17673.htmlhttp://m.shnenglu.com/milkyway/articles/17673.html#Feedback1http://m.shnenglu.com/milkyway/comments/commentRss/17673.htmlhttp://m.shnenglu.com/milkyway/services/trackbacks/17673.html聽聽聽聽聽鏉ヨ嚜 http://www.cnblogs.com/nasiry/archive/2004/09/22/45473.aspx聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
---------------------------------
娉細鐢變簬鎴戜滑涓昏鏄垎鏋恔itl鐨勫伐浣滃師鐞嗘垜浠氨鐢墊簮綆$悊鐨勪唬鐮佷笉鍋氬垎鏋愶紝浠ュ姞鐢靛惎鍔ㄧ殑紼嬪簭嫻佽繘琛屽垎鏋愩?
part1.
kitl鍒濆鍖?
-------------
Kitl鐨勫姞杞戒簬鍏朵粬璋冭瘯鏈嶅姟涔嬪墠錛屼互鎻愪緵涓鴻繖浜涜皟璇曟湇鍔″彂甯冭皟璇曚俊鎭拰鎺ユ敹涓繪満璋冭瘯鍛戒護鐨勭殑閫氶亾銆傞氬父kitl鍦ㄧ郴緇烪AL鍒濆鍖栧伐浣滃畬鎴愬悗榪涜鍔犺澆錛孧S寤鴻鍦∣EMInit涓惎鍔╧itl銆傝繖鏍峰氨鍙互浣跨敤NIC鎴栬呮槸serial/Pal浣滀負kitl鐨勭墿鐞嗕紶杈撲粙璐ㄣ?
kitl鐨勫垵濮嬪寲鐢盞itlInit瀹屾垚錛岃繖閮ㄥ垎浠g爜涓昏璐熻矗錛?to be fill later)
涓嬮潰鎴戜滑鏉ョ湅鐪媖itl鐨勫叿浣撲唬鐮侊紝榪欎簺浠g爜浣嶄簬%CEROOT%\PRIVATE\WINCEOS\COREOS\NK\KITL涓嬨?
BOOL KitlInit (BOOL fStartKitl)
{
聽聽聽 // just initialize function pointers
聽聽聽 pKITLRegisterDfltClient聽 = KITLRegisterDfltClient;
聽聽聽 pKITLIoCtl = KITLIoctl;
聽聽聽 pfnIsDesktopDbgrExist = IsDesktopDbgrExist;

聽聽聽 // Initialize default clients
聽聽聽 NewClient (KITL_SVC_DBGMSG, KITL_SVCNAME_DBGMSG, FALSE);
聽聽聽 NewClient (KITL_SVC_PPSH,聽聽 KITL_SVCNAME_PPSH,聽聽 FALSE);
聽聽聽 NewClient (KITL_SVC_KDBG,聽聽 KITL_SVCNAME_KDBG,聽聽 FALSE);


聽聽聽 return fStartKitl? StartKitl (TRUE) : TRUE;
}
榪欐浠g爜涓昏瀹屾垚涓や釜鍔ㄤ綔錛?
1.瑁呰澆鍑芥暟鎸囬拡錛屼負鍚庣畫浠g爜鐨勬墽琛岃杞藉叆鍙g偣銆?
2.娉ㄥ唽kitl瀹㈡埛绔紝榪欎簺瀹㈡埛绔疄鐜頒紶杈撳眰浠ュ悗灝辨槸鎴戜滑鎵闇瑕佺殑璋冭瘯鐣岄潰銆?
杈撳叆鍙傛暟鍐沖畾鏄惁绔嬪嵆鍚姩KITL鏈嶅姟錛屽鏋渇alse鐨勮瘽灝變粎浠呰繘琛屽垵濮嬪寲絳夊緟鍚庣畫鍔ㄤ綔浣跨敤startKitl鏉ュ惎鍔╧itl.

鎴戜滑鍐嶆潵鐪嬬湅NewClient鐨勫師鍨?
static PKITL_CLIENT NewClient (UCHAR uId, LPCSTR pszSvcName, BOOL fAlloc)
{
聽聽聽 DEBUGCHK(IS_VALID_ID(uId));
聽聽聽 DEBUGCHK (!KITLClients[uId]);
聽聽聽 if (!fAlloc) {
聽聽聽聽聽聽聽 DEBUGCHK(IS_DFLT_SVC(uId));
聽聽聽聽聽聽聽 KITLClients[uId] = &DfltClnts[uId];
聽聽聽 } else if (!(KITLClients[uId] = (PKITL_CLIENT) AllocMem (HEAP_KITLCLIENT))) {
聽聽聽聽聽聽聽 return NULL;
聽聽聽 }
聽聽聽 memset (KITLClients[uId], 0, sizeof(KITL_CLIENT));
聽聽聽 KITLClients[uId]->ServiceId = uId;
聽聽聽 strcpy (KITLClients[uId]->ServiceName, pszSvcName);

聽聽聽 return KITLClients[uId];
}
榪欎釜琚О涓篘ewClient鐨勫嚱鏁版墍瀹屾垚鐨勫姛鑳藉崄鍒嗙殑綆鍗曪紝鍏堟鏌ユ墍闇瑕佸垱寤虹殑緇撴瀯鏄惁鏄郴緇熼粯璁ゆ湇鍔℃墍闇瑕佺殑錛屽鏋滄槸鐨勮瘽灝辯洿鎺ュ皢璇ョ粨鏋勭殑鎸囬拡鎸囧悜鍏ㄥ眬緇撴瀯DfltClnts騫跺垵濮嬪寲緇撴瀯錛屽鏋滀笉鏄氨鐢寵鐩稿簲鐨勭┖闂村畬鎴愯緇撴瀯鐨勫垵濮嬪寲銆傞粯璁ょ殑鏈嶅姟鏈?KITL_SVCNAME_DBGMSG錛?KITL_SVCNAME_PPSH錛?KITL_SVCNAME_KDBG鍒嗗埆瀵瑰簲Debug淇℃伅鐨勫彂甯冮氶亾(Debug message)錛屾枃鏈帶鍒跺彴鐣岄潰(PPshell)錛屽拰鍐呮牳璋冭瘯鐣岄潰(kernel debug),鍦ㄨ繖閲屽ぇ瀹跺彲鑳戒細闂細涓轟粈涔堜笉緇熶竴浣跨敤鍥哄畾鐨勫叏灞緇撴瀯鏉ュ瓨鏀捐繖浜涙湇鍔$殑淇℃伅鍛紵鍘熷洜寰堢畝鍗曪紝鍥犱負榪欎簺"client"鍦╓indowSCE涓嬫槸鍙互娉ㄥ唽鎵╁厖鍜屾敞閿鐨勶紝榪欐牱鐢ˋllocMem鎵鍒嗛厤鐨勫唴瀛樼┖闂村湪涓嶅啀闇瑕佽繖浜涙湇鍔$殑鏃跺欏彲浠ラ噴鏀炬帀錛屽氨鍙互閬垮厤涓嶅繀瑕佺殑嫻垂銆傚彟澶朘ITLClients鏄繖鏍峰畾涔夌殑PKITL_CLIENT KITLClients[MAX_KITL_CLIENTS];鎵浠itl鎵鑳芥敞鍐岀殑client榪炲悓3涓粯璁ょ殑鏈嶅姟涓鍏辨渶澶氬彲浠ユ湁MAX_KITL_CLIENTS--128涓?

涓嬮潰緇х畫娌跨潃紼嬪簭嫻佸線涓嬬湅鍚э紝kitlInit瀹屾垚鏈鍩烘湰鐨勫垵濮嬪寲鍔ㄤ綔鍗沖彲鍚姩kitl鏈嶅姟浜嗐傚啀鐪嬩竴涓嬭繖涓嚱鏁扮殑鍘熷瀷銆?
static BOOL StartKitl (BOOL fInit)
{
聽聽聽 // KITL already started?
聽聽聽 if (!fInit && (KITLGlobalState & KITL_ST_DESKTOP_CONNECTED)) {
聽聽聽聽聽聽聽 return TRUE;
聽聽聽 }

聽聽聽 /*
聽聽聽聽 * When this function is called, the kernel hasn't yet been initialized,
聽聽聽聽 * so can't make any system calls.聽 Once the system has come up far
聽聽聽聽 * enough to handle system calls, KITLInitializeInterrupt() is called to complete
聽聽聽聽 * initialization.聽 This is indicated by the KITL_ST_MULTITHREADED flag in KITLGlobalState.
聽聽聽聽 */
聽聽聽 // Detect/initialize ethernet hardware, and return address information
聽聽聽 if (!OEMKitlInit (&Kitl))
聽聽聽聽聽聽聽 return FALSE;

聽聽聽 // verify that the Kitl structure is initialized.
聽聽聽 if (!Kitl.pfnDecode || !Kitl.pfnEncode || !Kitl.pfnEnableInt || !Kitl.pfnRecv || !Kitl.pfnSend
聽聽聽聽聽聽聽 || !Kitl.dwPhysBuffer || !Kitl.dwPhysBufLen || !Kitl.WindowSize || !Kitl.pfnGetDevCfg || !Kitl.pfnSetHostCfg) {
聽聽聽聽聽聽聽 return FALSE;
聽聽聽 }

聽聽聽 // Validate that address is not in free RAM area - the HAL should put it in a reserved
聽聽聽 // section of memory conditional on some environment var.
聽聽聽 if ((pTOC->ulRAMStart < Kitl.dwPhysBuffer + Kitl.dwPhysBufLen)
聽聽聽聽聽聽聽 && (pTOC->ulRAMEnd > Kitl.dwPhysBuffer)) {
聽聽聽聽聽聽聽 KITLOutputDebugString("\r\n!Debug Ethernet packet buffers in free RAM area - must set IMGEBOOT=1\r\n");
聽聽聽聽聽聽聽 return FALSE;
聽聽聽 }

聽聽聽 if (Kitl.dwPhysBufLen < (DWORD) 3 * KITL_BUFFER_POOL_SIZE) {
聽聽聽聽聽聽聽 KITLOutputDebugString("\r\n!Debug Ethernet buffer size too small, must be at least 0x%x bytes (3 * WindowSize * 2 * KITL_MTU)\r\n",
聽聽聽聽聽聽聽聽聽聽聽 3 * KITL_BUFFER_POOL_SIZE);
聽聽聽聽聽聽聽 return FALSE;
聽聽聽 }

聽聽聽 KITLGlobalState |= KITL_ST_KITLSTARTED; // indicate (to kdstub) that KITL has started

聽聽聽 // If the initialized flag is already set, we are being called from the power on routine,
聽聽聽 // so reinit the HW, but not any state.
聽聽聽 if (!(KITLGlobalState & KITL_ST_ADAPTER_INITIALIZED)) {
聽聽聽聽聽聽聽 // perform the initial handshake with the desktop
聽聽聽聽聽聽聽 if (!KITLConnectToDesktop ()) {
聽聽聽聽聽聽聽聽聽聽聽 KITLOutputDebugString ("\r\n!Unable to establish KITL connection with desktop!\r\n");
聽聽聽聽聽聽聽聽聽聽聽 return FALSE;
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽
聽聽聽聽聽聽聽 // Set up kernel function pointers
聽聽聽聽聽聽聽 pKITLInitializeInterrupt = KITLInitializeInterrupt;
聽聽聽聽聽聽聽 pKITLSend = KITLSend;
聽聽聽聽聽聽聽 pKITLRecv = KITLRecv;

聽聽聽聽聽聽聽 KITLGlobalState |= KITL_ST_ADAPTER_INITIALIZED;

聽聽聽聽聽聽聽 if (Kitl.dwBootFlags & KITL_FL_DBGMSG)
聽聽聽聽聽聽聽聽聽聽聽 SetKernelCommDev (KERNEL_SVC_DBGMSG, KERNEL_COMM_ETHER);
聽聽聽聽聽聽聽 if (Kitl.dwBootFlags & KITL_FL_PPSH)
聽聽聽聽聽聽聽聽聽聽聽 SetKernelCommDev (KERNEL_SVC_PPSH, KERNEL_COMM_ETHER);
聽聽聽聽聽聽聽 if (Kitl.dwBootFlags & KITL_FL_KDBG)
聽聽聽聽聽聽聽聽聽聽聽 SetKernelCommDev (KERNEL_SVC_KDBG, KERNEL_COMM_ETHER);

聽聽聽聽聽聽聽 // only perform cleanboot if it's connected at boot. Cleanboot flag is
聽聽聽聽聽聽聽 // ignored if it's started dynamically.
聽聽聽聽聽聽聽 if (fInit && (Kitl.dwBootFlags & KITL_FL_CLEANBOOT)) {
聽聽聽聽聽聽聽聽聽聽聽 extern ROMHDR *const volatile pTOC;聽聽聽聽 // Gets replaced by RomLoader with real address
聽聽聽聽聽聽聽聽聽聽聽 // just clear the magic nOEMKitlInitumber (see SC_SetCleanRebootFlag)
聽聽聽聽聽聽聽聽聽聽聽 // NOTE: We can NOT call SC_SetCleanRebootFlag here since logPtr isn't
聽聽聽聽聽聽聽聽聽聽聽 // initialized yet.
聽聽聽聽聽聽聽聽聽聽聽 ((fslog_t *)((pTOC->ulRAMFree + MemForPT) | 0x20000000))->magic1 = 0;
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 // if OEM calls KitlInit (FALSE), KITLInitializeInterrupt will
聽聽聽聽聽聽聽 // not be called in SystemStartupFuc. We need to initialize
聽聽聽聽聽聽聽 // interrupt here (when RegisterClient is called)
聽聽聽聽聽聽聽 if (fKITLcsInitialized && !InSysCall ()) {
聽聽聽聽聽聽聽聽聽聽聽 KITLInitializeInterrupt ();
聽聽聽聽聽聽聽 }
聽聽聽 }

聽聽聽 LOG (KITLGlobalState);
聽聽聽 return TRUE;
}
鍚姩浠g爜棣栧厛鍒ゆ柇鏄惁宸茬粡鍚姩kitl鏈嶅姟錛屼箣鍚庤皟鐢∣EMKitlInit錛岃鍑芥暟騫朵笉鍦╬rivate鐩綍涓嬪疄鐜幫紝閫氬父windowsCE闇瑕佺敤鎴峰畾鍒剁殑浠g爜閮芥槸榪欑緇撴瀯---MS鎻愪緵鐨勪唬鐮佹帴鍙o紝鐢ㄦ埛鑷繁瀹屾垚鐩稿簲鐨凮EM閮ㄥ垎錛岄氬父榪欎簺浠g爜閮芥槸涓庡叿浣撶殑紜歡騫沖彴鐩稿叧鐨勪唬鐮併俴itl鐨凮EM浠g爜鍦℉AL涓疄鐜幫紝閫氬父鍦╬latform\kernel\hal\.涓嬶紝榪欓儴鍒嗙殑浠g爜鎴戜滑鍏堣煩榪囷紝鐪嬪畬startkitl鐨勫叏璨屽啀鍥炶繃澶撮愪釜璇存槑銆侽EMkitlInit涓簁itl鍒濆鍖栫‖浠朵紶杈撲粙璐紝鍚屾椂鍒嗛厤鍒濆鍖栦竴浜沰itl鎵闇瑕佺殑鍏ㄥ眬緇撴瀯銆傞殢鍚巗tartkitl緇х畫媯鏌EMkitlInit鎵鍒嗛厤鍜屽垵濮嬪寲鐨凨ITL緇撴瀯鍜屽唴瀛樺尯鍩熸槸鍚︽湁鏁堝悗璁劇疆kitl鐨勫叏灞鏍囩ずKITL_ST_KITLSTARTED錛涗箣鍚庤緗粓绔湇鍔$▼搴忎互鍙婃帴鏀跺拰鍙戦佺▼搴忕殑鍏ュ彛鐐瑰悗璁劇疆鍏ㄥ眬鏍囩ずKITL_ST_ADAPTER_INITIALIZED銆傜幇鍦ㄤ紶杈撲粙璐ㄥ凡緇忓叏閮ㄥ氨緇紝閫氳繃SetKernelCommDev璁劇疆kernel閫氳繃ethernet浼犻佽皟璇曚俊鎭紝璋冭瘯杈撳叆錛屼互鍙奀ESH鎺у埗鍙般傚啀鍚庤皟鐢↘ITLInitializeInterrupt瀹屾垚涓柇鐨勫垵濮嬪寲kitl鍚姩鐨勮繃紼嬪氨緇撴潫浜嗐?
聽聽 绱ф帴鐫鎴戜滑鏉ョ湅鐪嬶紝OEMkitlInit閮介』瑕佹垜浠共浠涔堛備笅闈㈢敤SMDK2440鐨刱itl涓哄疄渚嬫潵榪涜鍒嗘瀽錛?
BOOL OEMKitlInit (PKITLTRANSPORT pKitl)
{
聽聽聽 KITLOutputDebugString ("+OEMKitlInit\n");
聽聽聽 RETAILMSG(1, (_T("+OEMKitlInit\r\n")));
聽聽聽 // try to find a transport available
聽聽聽 if (!InitEther (pKitl)
聽聽聽聽聽聽聽 && !InitParallelSerial (pKitl)) {
聽聽聽聽聽聽聽 KITLOutputDebugString ("Unable to initialize KITL Transports!\n");
聽聽聽聽聽聽聽 return FALSE;
聽聽聽 }

聽聽聽 gpKitl = pKitl;
聽聽聽 KITLOutputDebugString ("-OEMKitlInit\n");
聽聽聽 RETAILMSG(1, (_T("-OEMKitlInit\r\n")));
聽聽聽 return TRUE;
}

浜嬪疄涓婂伐浣滃緢綆鍗曪紝璋冪敤InitEther (pKitl) 鍜?!InitParallelSerial (pKitl)鍒濆鍖栫綉鍗$洿鎺ユ妸鍒濆鍖栫殑KITL鍏ㄥ眬緇撴瀯榪斿洖灝辨槸鎵鏈夌殑宸ヤ綔銆傝繖鍎跨殑InitParallelSerial鏄竴涓猟ummy姘歌繙榪斿洖false,涔熷氨鏄榪欓噷娌℃湁瀵箂erial&parallel transport榪涜鏀寔銆傜湡姝g殑宸ヤ綔閲忛泦涓湪InitEther涔嬪悗銆備簨瀹炰笂InitEther 鍜?InitParallelSerial鍙浠繪剰鐨勫疄鐜頒竴涓氨鍙互杈懼埌寤虹珛浼犺緭鐣岄潰鐨勭洰鐨?涓嬮潰錛屾垜浠戶緇湅鍚庨潰鐨勪唬鐮併?
BOOL InitEther(PKITLTRANSPORT pKitl)
{
聽聽聽 EDBG_ADAPTER adp;
聽聽聽 DWORD dwDHCPLeaseTime;
聽聽聽 DWORD dwSubnetMask;

聽聽聽 KITLOutputDebugString ("+InitEther\n");

聽聽聽 memset (&adp, 0, sizeof(adp));
聽聽聽 memset (pKitl, 0, sizeof (KITLTRANSPORT));

聽聽聽 // use existing code for ether initialization
聽聽聽 if (!OEMEthInit (&adp))
聽聽聽聽聽聽聽 return FALSE;

聽聽聽 // we are going to completely ignore the info in bootargs and the adaptor info
聽聽聽 // returned from OEMEthInit, except MAC address. Just to prove that KITL will connect standalone

聽聽聽 // get the MAC address
聽聽聽 MyAddr.wMAC[0] = adp.Addr.wMAC[0];
聽聽聽 MyAddr.wMAC[1] = adp.Addr.wMAC[1];
聽聽聽 MyAddr.wMAC[2] = adp.Addr.wMAC[2];
聽聽聽 //MyAddr = adp.Addr;
聽聽聽
聽聽聽 CreateDeviceName(&MyAddr, pKitl->szName);
聽聽聽 KITLOutputDebugString ("Using device name: %s\n", pKitl->szName);

聽聽聽 // If we haven't been given an IP address from our loader (or if we're not using static IP), get an IP address
聽聽聽 // from a DHCP server.
聽聽聽 if (adp.Addr.dwIP)
聽聽聽 {
聽聽聽聽聽聽聽 // Static IP or we got the IP from our bootloader...
聽聽聽聽聽聽聽 MyAddr.dwIP聽聽聽聽 = adp.Addr.dwIP;
聽聽聽聽聽聽聽 dwSubnetMask聽聽聽 = 0;聽聽聽 // Don't care about subnet mask...
聽聽聽聽聽聽聽 dwDHCPLeaseTime = adp.DHCPLeaseTime;
聽聽聽 }
聽聽聽 else
聽聽聽 {
聽聽聽聽聽聽聽 // Get a DHCP address...
聽聽聽聽聽聽聽 if (!EbootGetDHCPAddr (&MyAddr, &dwSubnetMask, &dwDHCPLeaseTime))
聽聽聽聽聽聽聽聽聽聽聽 return FALSE;
聽聽聽 }
聽聽聽
聽聽聽 MyAddr.wPort = htons (EDBG_SVC_PORT);
聽聽聽 KITLOutputDebugString ("Device %s, IP %s, Port %d\n", pKitl->szName, inet_ntoa (MyAddr.dwIP), htons (MyAddr.wPort));

聽聽聽 // initialize KITL Ethernet transport layer
聽聽聽 if (!KitlEtherInit (&MyAddr, dwDHCPLeaseTime)) {
聽聽聽聽聽聽聽 KITLOutputDebugString ("Unable to initialize KITL Ether transport\n");
聽聽聽聽聽聽聽 return FALSE;
聽聽聽 }
聽聽聽
聽聽聽 // fill in the blanks in KITLTRANSPORT structure.
聽聽聽 pKitl->FrmHdrSize = KitlEtherGetFrameHdrSize ();
聽聽聽 pKitl->Interrupt = (UCHAR) adp.SysIntrVal;
聽聽聽 pKitl->dwPhysBuffer = EDBG_PHYSICAL_MEMORY_START;
聽聽聽 pKitl->dwPhysBufLen = 0x20000;聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 128K of buffer available
聽聽聽 pKitl->dwBootFlags = 0;
聽聽聽 pKitl->WindowSize = EDBG_WINDOW_SIZE;
聽聽聽 pKitl->pfnDecode = KitlEtherDecodeUDP;
聽聽聽 pKitl->pfnEncode = KitlEtherEncodeUDP;
聽聽聽 pKitl->pfnSend = EthSend;
聽聽聽 pKitl->pfnRecv = OEMEthGetFrame;
聽聽聽 pKitl->pfnEnableInt = KitlEthEnableInts;
聽聽聽 pKitl->pfnSetHostCfg = SetHostCfg;
聽聽聽 pKitl->pfnGetDevCfg = GetDevCfg;

聽聽聽 KITLOutputDebugString ("-InitEther\n");


聽聽聽 return TRUE;
}
榪欎釜鍑芥暟瀹屾垚鐨勫伐浣滀富瑕佹槸璋冪敤OEMEthInit鍒濆鍖栫綉鍗$殑鏈嶅姟紼嬪簭鍙婅幏寰楃浉搴旂殑IP鍜孧AC錛屽鏋淚P鏃犳晥鍒欑敤DHCP鍔ㄦ佽幏寰桰P.閫氳繃MAC鍊間駭鐢熶竴涓爣紺猴紝榪欎釜鏍囩ず鐢ㄦ潵緇橮B鐨処DE浣跨敤銆傚垰鎵嶇殑鎴戜滑鍦╧itlInit涓湅鍒伴櫎浜嗘鏌EMkitlInit鐨勮繑鍥炲間箣澶栬繕媯鏌ヤ簡KITL緇撴瀯錛岃緇撴瀯鐨勮繖浜涚壒寰佸兼鏄湪榪欏効璁劇疆鐨勩傚湪榪欏効鍙互鐪嬪埌pKitl->pfnDecode pKitl->pfnEncode pKitl->pfnSetHostCfg pKitl->pfnGetDevCfg 浠ュ強kitl鎵鐢ㄧ殑涓柇鍙瘋繖浜涢兘鏄疧EM浠g爜錛屼篃灝辨槸鐢ㄤ簬浼犺緭鐨勭紪鐮佸拰瑙g爜褰㈠紡浠ュ強閰嶇疆鍑芥暟閮芥槸鍙互鑷繁瀹氫箟鐨勶紝榪欐牱涓鏉ヤ篃灝辨棤鎵璋撲嬌鐢ㄤ粈涔堜紶杈撲粙璐ㄤ綔涓篕ITK
鐨則ransport浜嗭紝榪欏氨涓轟嬌鐢?394鎴栬呮槸USB榪欎竴綾葷殑浼犺緭閾捐礬涔熻兘鍏呭綋浼犺緭鐣岄潰浣滀簡鍑嗗銆?OEMEthInit鍑芥暟鏄敤浜庡垵濮嬪寲浼犺緭浠嬭川--浠ュお緗戝崱銆傝繖閮ㄥ垎浠g爜鐩存帴鏄‖浠舵帶鍒朵唬鐮侊紝鎴戜滑鏉ョ畝鍗曠殑鐪嬩竴涓嬨?
BOOL
OEMEthInit(EDBG_ADAPTER *pAdapter)
{
聽PBYTE pBaseIOAddress;

聽// Driver globals from the bootloader.
聽//
聽if (pDriverGlobals->eth.EbootMagicNum == EBOOT_MAGIC_NUM)
聽{
聽聽memcpy(pAdapter, &pDriverGlobals->eth.TargetAddr, sizeof(EDBG_ADAPTER));

聽聽switch(pDriverGlobals->misc.EbootDevice)
聽聽{
聽聽case(DOWNLOAD_DEVICE_PCMCIA):聽// NE2000 CF card.
聽聽聽pBaseIOAddress聽 = (PBYTE)PCMCIA_Init();
聽聽聽if (pBaseIOAddress)
聽聽聽{
聽聽聽聽// Initialize the built-in Ethenet controller.
聽聽聽聽//
聽聽聽聽if (!NE2000Init((PBYTE)pBaseIOAddress, 1, pAdapter->Addr.wMAC))
聽聽聽聽{
聽聽聽聽聽EdbgOutputDebugString("ERROR: OEMEthInit: Failed to initialize Ethernet controller.\r\n");
聽聽聽聽聽return(FALSE);
聽聽聽聽}
聽聽聽}
聽聽聽pfnEDbgInit聽聽聽聽聽聽聽聽聽聽 聽= NE2000Init;
聽聽聽pfnEDbgEnableInts聽聽聽聽 聽= NE2000EnableInts;
聽聽聽pfnEDbgDisableInts聽聽聽 聽= NE2000DisableInts;
聽聽聽pfnEDbgGetPendingInts 聽= NE2000GetPendingInts;
聽聽聽pfnEDbgGetFrame聽聽聽聽聽聽 聽= NE2000GetFrame;
聽聽聽pfnEDbgSendFrame聽聽聽聽聽 聽= NE2000SendFrame;
聽聽聽pfnEDbgReadEEPROM聽聽聽聽 聽= NE2000ReadEEPROM;
聽聽聽pfnEDbgWriteEEPROM聽聽聽 聽= NE2000WriteEEPROM;
聽聽聽pfnEDbgSetOptions聽聽聽聽 聽= NE2000SetOptions;
聽聽#ifdef IMGSHAREETH
聽聽聽pfnCurrentPacketFilter聽= Ne2000CurrentPacketFilter;
聽聽聽pfnMulticastList聽聽= NE2000MulticastList;
聽聽#endif聽// IMGSHAREETH.
聽聽聽break;
聽聽case(DOWNLOAD_DEVICE_CS8900):聽// CS8900A.
聽聽聽// Initialize the CS8900.
聽聽聽//
聽聽聽if (!CS8900DBG_Init((PBYTE)CS8900DBG_IOBASE, CS8900DBG_MEMBASE, pAdapter->Addr.wMAC))
聽聽聽{
聽聽聽聽EdbgOutputDebugString("ERROR: OEMEthInit: CS8900 initialization failed.\r\n");
聽聽聽聽return(FALSE);
聽聽聽}

聽聽聽pfnEDbgInit聽聽= CS8900DBG_Init;
聽聽聽pfnEDbgEnableInts聽聽聽聽 聽= CS8900DBG_EnableInts;
聽聽聽pfnEDbgDisableInts聽聽聽 聽= CS8900DBG_DisableInts;
聽聽聽pfnEDbgGetFrame聽聽= CS8900DBG_GetFrame;
聽聽聽pfnEDbgSendFrame聽= CS8900DBG_SendFrame;
聽聽聽pfnEDbgGetPendingInts 聽= CS8900DBG_GetPendingInts;
聽聽#ifdef IMGSHAREETH
聽聽聽pfnCurrentPacketFilter聽= CS8900DBG_CurrentPacketFilter;
聽聽聽pfnMulticastList聽= CS8900DBG_MulticastList;
聽聽#endif聽// IMGSHAREETH.
聽聽聽break;
聽聽default:
聽聽聽EdbgOutputDebugString("ERROR: OEMInit: Unknown download NIC (0x%x).\r\n", pDriverGlobals->misc.EbootDevice);
聽聽聽return(FALSE);

聽}}
聽else
聽{
聽聽// TODO - retrieve CS8900 MAC address from flash...
聽聽// TODO - intialize the CS8900 from scratch...
聽}

聽EdbgOutputDebugString("::: OEMEthInit() IP Address : %s\r\n", inet_ntoa(pAdapter->Addr.dwIP));
聽EdbgOutputDebugString("::: OEMEthInit() Netmask聽聽聽 : %s\r\n", inet_ntoa(pDriverGlobals->eth.SubnetMask));

聽if (pDriverGlobals->misc.EbootDevice == DOWNLOAD_DEVICE_PCMCIA)
聽聽pAdapter->SysIntrVal聽聽聽 = SYSINTR_PCMCIA_LEVEL;
聽else
聽聽pAdapter->SysIntrVal聽聽聽 = SYSINTR_ETHER;

聽pAdapter->DHCPLeaseTime = DEFAULT_DHCP_LEASE;
聽pAdapter->EdbgFlags聽聽聽聽 = pDriverGlobals->eth.EdbgFlags;
聽聽
#ifdef IMGSHAREETH
聽聽聽 VBridgeInit();
聽聽聽 VBridgeKSetLocalMacAddress((char *)pAdapter->Addr.wMAC);
#endif聽// IMGSHAREETH.

聽return(TRUE);
}
聽 聽
榪欎釜鍑芥暟鐪嬭搗鏉ュ緢澶嶆潅鍏跺疄鐪熸鐨勫伐浣滃茍涓嶅錛岄鍏堝垽鏂槸涓嶆槸鐢眅boot鍚姩鐨勶紝濡傛灉宸茬粡eboot涓凡緇忓畬鎴愪簡瀵逛互澶綉鍗$殑鍒濆鍖栧姩浣滃氨鐩存帴浣跨敤緗戝崱騫惰杞?鎸傛帴緗戝崱鎵闇鐨勫嚱鏁板拰緗戝崱淇℃伅錛屽惁鍒欏氨闇瑕佽嚜宸辮緗綉鍗$殑MAC鍦板潃鍜屽垵濮嬪寲緗戝崱(浜嬪疄涓婁互涓婂嚱鏁板茍娌℃湁瀵硅繖閮ㄥ垎浠g爜榪涜瀹炵幇錛岃繖灝辨槸寰堝浣跨敤2410/2440鐨勭敤鎴峰湪涓嶄嬌鐢╡boot鍚姩鐨勬儏鍐典笅鎬繪槸涓嶈兘浣跨敤kitl鐨勫師鍥?-鎵句笉鍒癳boot鍦―riverGlobal涓暀涓嬬殑magic NUMBER)銆傝繖鍎夸箣鎵浠ユ湁NE2000鍜孋s8900鐨勫尯鍒嗘槸鍥犱負SMDK2440鍙互浣跨敤PCMICA鎸傛帴Ne2000鍏煎鐨凬IC鎴栨澘杞紺S8900錛屽悗闈㈣緗腑鏂爣紺烘湁涓や釜鍒嗘敮涔熸槸榪欎釜鍘熷洜銆?
IMGSHAREETH鐨勯儴鍒嗘槸Vbridge鐨勯儴鍒?涓轟粈涔堣浣跨敤榪欎釜鍙玽bridge鐨勪笢瑗垮憿錛熸垜浠湅鐪嬩笅闈㈢殑鍋囪銆?
涓轟簡寤虹珛kitl鍗犵敤浜嗕竴涓綉鍗¤祫婧愶紝鑰岃璧勬簮濡傛灉鍦╳indowsCE涓嬪鐢?璇ヨ澶囧悓鏃惰涓や釜椹卞姩浣跨敤1.kitl 2.windowsCE NIC driver)鐨勮瘽浼氫笉浼氬鑷撮棶棰樺憿錛熺湅鐪嬩笅闈㈢殑涓や釜鍑芥暟銆?
聽聽聽 VBridgeInit();
聽聽聽 VBridgeKSetLocalMacAddress((char *)pAdapter->Addr.wMAC);
聽聽聽 璇ュ嚱鏁板湪鍐呮牳璋冭瘯浼犺緭閫氶亾鍜宼cp/ip&windsock涔嬮棿寤虹珛涓涓櫄鎷熺殑緗戞ˉv-bridge錛屽湪澶栭儴鐪嬫潵vbridge灝卞儚鍦╩ac灞備竴鏍鳳紝vbridge涓鏂歸潰鍜岀‖浠墮氳寤虹珛浼犺緭鐨勭墿鐞嗙晫闈紝鍙︿竴鏂歸潰鍜岃皟璇曟墍闇鐨凟DBG鍜寁mini.dll鎻愪緵鐩稿悓鐨勯昏緫鐣岄潰錛屽湪鏇撮珮鐨勫眰闈mini.dll灝卞儚涓涓笓闂ㄧ殑緗戝崱涓鏍鋒敮鎸丯DIS浠ヨ嚦浜巘cp/ip鍗忚鏍堛傝繖鏍鋒垜浠氨鍙互涓鏂歸潰浣跨敤緗戝崱鍋氳皟璇曞彟澶栦竴鏂歸潰浠嶇劧鑳借windowsCE浣跨敤緗戝崱閫氳錛屽浜巜indowCE鑰岃█鎵浣跨敤鐨勭綉鍗′笉鍦ㄦ槸涓庡簳灞傚搴旂殑緗戠粶璁懼錛岃屾槸閫氳繃vbridge铏氭嫙鍑烘潵鐨勭綉緇滆澶囷紝鎵浠ュ湪鐩存帴浣跨敤SMDK24XX鐨刡sp緙栬瘧鍑烘潵鐨勭郴緇熺綉鍗℃樉紺轟負vmini灝辨槸榪欎釜鍘熷洜銆傝繖涓椂鍊欑綉鍗¢┍鍔ㄦ庝箞閰嶇疆鍛紵絳旀寰堢畝鍗曪紝灝辨槸涓嶈緗戝崱椹卞姩錛屽洜涓烘垜浠凡緇忎粠vbridge涓娊璞?铏氭嫙---鐢ㄤ竴涓綉鍗?鍑轟竴涓綉鍗′簡錛屽師鏉ョ殑緗戝崱椹卞姩涔熷氨涓嶅湪闇瑕佷簡銆?
聽聽聽
浠庝笂闈㈢殑OemKitlInit鍒癐nitEther閮芥槸OEM浠g爜錛岀洰鐨勫湪浜庝嬌Kitl涓庣浉搴旂殑transport鐨勭墿鐞嗕粙璐ㄨ仈緋昏搗鏉ワ紝涔熷氨鏄瀯寤簁itl鐨勭‖浠舵娊璞″眰錛屽湪涓涓猭itl鍒濆鍖栦唬鐮佷腑涓彧鏈夎繖閮ㄥ垎宸ヤ綔(OEM浠g爜)鏄繀瑕佺殑錛屽叾浣欑殑浠g爜鐩存帴浣跨敤MS緙栬瘧濂界殑lib灝卞彲浠ヤ簡銆傚敖綆″姝ゆ垜浠繕鏄戶緇湅涓嬮潰鐨勪唬鐮侊紝铏界劧榪欏鎴戜滑鏉ヨ涓嶆槸蹇呴』鐨勪笉榪囧涓涓▼搴忚鏈夊叏闈㈢殑璁よ瘑錛屾鏋朵笂鐨勯噸瑕佹ā鍧楅兘鏄渶瑕佷簡瑙e拰璁よ瘑鐨勩?


鐪嬪畬浜嗚繖涓緋誨垪鐨凮EM浠g爜錛岀戶緇湅鐪婼tartKitl閲岄潰鎴戜滑娌℃湁鐪嬪畬鐨勯儴鍒嗗湪璁劇疆鍚姩鏍囩ず浣嶄箣鍓嶅仛浜?涓鏌ュ垎鍒槸媯鏌uffer鐨勪綅緗槸鍚﹀湪緙栬瘧緋葷粺鐨勬椂鍊欓鐣欎笅鏉ヤ互鍙婃槸鍚︽湁瓚沖鐨勯暱搴﹀彲鐢ㄣ傝繖涓唴瀛樺尯鍩熶笉鏄姩鎬佸垎閰嶇殑錛岃屾槸鍦╞sp鐨勫唴瀛橀厤緗枃浠朵腑鎸囧畾騫朵繚鐣欎笅鏉ョ殑(瑙乥sp file鐩綍涓嬬殑config.bib)銆傚啀涓嬫潵榪涜涓涓狵ITLConnectToDesktop鐨勫姩浣滐紝榪欎釜鐪嬪悕瀛楀氨鐭ラ亾浣滅敤浜嗐傚氨鏄拰PC榪炴帴銆傚悓鏍風湅鐪嬩唬鐮侊細
static BOOL KITLConnectToDesktop (void)
{
聽聽聽 // we'll use the PpfsFmtBuf for send buffer since ppfs can't be started yet at this stage
聽聽聽 //
聽聽聽 PKITL_HDR pHdr = (PKITL_HDR) (PpfsFmtBuf + Kitl.FrmHdrSize);
聽聽聽 PKITL_DEV_TRANSCFG pCfg = (PKITL_DEV_TRANSCFG) KITLDATA(pHdr);
聽聽聽 USHORT cbData = sizeof (PpfsFmtBuf) - Kitl.FrmHdrSize - sizeof (KITL_HDR) - sizeof (KITL_DEV_TRANSCFG);

聽聽聽 if (!Kitl.pfnGetDevCfg ((LPBYTE) (pCfg+1), &cbData))
聽聽聽聽聽聽聽 return FALSE;

聽聽聽 memset (pHdr, 0, sizeof (KITL_HDR));
聽聽聽 pHdr->Id = KITL_ID;
聽聽聽 pHdr->Service = KITL_SVC_ADMIN;
聽聽聽 pHdr->Cmd = KITL_CMD_TRAN_CONFIG;
聽聽聽 cbData += sizeof (KITL_DEV_TRANSCFG);
聽聽聽 pCfg->wLen = cbData;
聽聽聽 pCfg->wCpuId = KITL_CPUID;
聽聽聽 memcpy (pCfg->szDevName, Kitl.szName, KITL_MAX_DEV_NAMELEN);
聽聽聽 cbData += sizeof (KITL_HDR);

聽聽聽 return KitlSendFrame (PpfsFmtBuf, cbData)
聽聽聽聽聽聽聽 && KITLPollResponse (FALSE, ChkCnxDsktp, TranCnxDsktp, (LPVOID) cbData);
}
緇撴瀯PKITL_HDR灝辨槸kilt鐨勪紶杈撳ご鏍煎紡錛岃孭KITL_DEV_TRANSCFG淇℃伅鍒欐槸浼犺緭璁懼鐨勮緗傞鍏堥氳繃璋冪敤Kitl.pfnGetDevCfg寰楀埌浼犺緭璁懼鐨勪俊鎭紝Kitl.pfnGetDevCfg鏄嚱鏁版寚閽堬紝鍦ㄥ浠ュお緗戝崱鍒濆鍖栫殑鏃跺欐寚鍚慜EM浠g爜涓殑GetDevCfg鍑芥暟銆傞氳繃榪欎釜鍑芥暟寰楀埌璁懼淇℃伅(smdk2410鐨刡sp涓繖鍎胯繑鍥炵殑灝辨槸IP鍦板潃)銆傜劧鍚庡啀緇х畫璁劇疆浼犺緭澶寸殑鏍囩ず錛岀被鍨嬶紝鍛戒護絳夌瓑淇℃伅錛岀劧鍚庡氨鏄彂閫佹暟鎹簡錛屽叿浣撶殑鍔ㄤ綔灝辨槸璋冪敤KitlSendFrame銆?To be continue...)

BOOL KitlSendFrame (LPBYTE pbFrame, WORD cbData)
{
聽聽聽 if (!Kitl.pfnEncode (pbFrame, cbData)) {
聽聽聽聽聽聽聽 KITLOutputDebugString ("!KitlSendFrame: transport failed to encode the data frame\r\n");
聽聽聽聽聽聽聽 return FALSE;
聽聽聽 }

聽聽聽 return KitlSendRawData (pbFrame, (USHORT) (cbData + Kitl.FrmHdrSize + Kitl.FrmTlrSize));
}
榪欎釜鍑芥暟棣栧厛璋冪敤KitlEtherEncodeUDP瀵規暟鎹撫榪涜緙栫爜涓篣DP鍗忚闇瑕佺殑鏍煎紡銆傜劧鍚庤皟鐢?KitlSendRawData灝嗘暟鎹佸嚭鑷砅C.
BOOL KitlSendRawData (LPBYTE pbData, WORD wLength)
{
聽聽聽 BOOL fRet;
聽聽聽 if (!(KITLGlobalState & KITL_ST_MULTITHREADED) || InSysCall())
聽聽聽聽聽聽聽 fRet = Kitl.pfnSend (pbData, wLength);
聽聽聽 else if (IsDesktopDbgrExist ())
聽聽聽聽聽聽聽 fRet = KCall((PKFN) Kitl.pfnSend, pbData, wLength);
聽聽聽 else {
聽聽聽聽聽聽聽 EnterCriticalSection (&KITLKCallcs);
聽聽聽聽聽聽聽 fRet = Kitl.pfnSend (pbData, wLength);
聽聽聽聽聽聽聽 LeaveCriticalSection (&KITLKCallcs);
聽聽聽 }
聽聽聽 return fRet;
}
棣栧厛鍒ゅ畾緋葷粺娌℃湁鍦ㄨ皟搴︿腑涓斿綋鍓嶄唬鐮佸湪涓嶅彲鍓ュず鐘舵佺姸鎬佽繍琛岋紝閫氳繃EthSend璋冪敤OEMEthSendFrame灝嗘暟鎹佸嚭灝卞畬鎴愪簡宸ヤ綔銆傚彟澶栦袱涓垎鏀笌鎴戜滑鍒嗘瀽鐨勭▼搴忔祦娌℃湁鍏崇郴鍏堟斁涓涓嬨?
BOOL
OEMEthSendFrame(
聽聽聽 BYTE *pData,聽聽聽聽 // IN - Data buffer
聽聽聽 DWORD dwLength)聽 // IN - Length of buffer
{
聽聽聽 int retries = 0;

聽聽聽 while (retries++ < 4) {
聽聽聽聽聽聽聽 if (!pfnEDbgSendFrame(pData, dwLength))
聽聽{
#ifdef IMGSHAREETH
聽聽聽ProcessVMiniSend();
#endif //IMGSHAREETH
聽聽聽聽聽聽聽聽聽聽聽 return TRUE;
聽聽}
聽聽聽聽聽聽聽 else
聽聽聽聽聽聽聽聽聽聽聽 EdbgOutputDebugString("!OEMEthSendFrame failure, retry %u\n",retries);
聽聽聽 }
聽聽聽 return FALSE;
}
鍦ㄥ彂閫佹暟鎹撫鐨勮繃紼嬩腑涓撻棬鏈夊鐞唙Mini鍙戦佺殑榪囩▼銆傜敱浜巏itl鏈韓灝變笉鏄緢綆鍗曟垜浠互鍚庡悗闈㈠啀鐢ㄤ笓闂ㄧ殑鏂囩珷璇存槑vbridge鐨勫伐浣滆繃紼嬨傚畬鎴愪簡鍙戦侊紝鎴戜滑緇х畫涓嬮潰鐨勮繃紼嬨?
BOOL KITLPollResponse (BOOL fUseSysCalls, PFN_CHECK pfnCheck, PFN_TRANSMIT pfnTransmit, LPVOID pData)
{
聽聽聽 DWORD dwLoopCnt = 0, dwLoopMax = MIN_POLL_ITER;
聽聽聽 DWORD dwStartTime = CurMSec;
聽聽聽 int聽聽 nTimeMax = MIN_POLL_TIME;聽 // start with 1 sec
聽聽聽 BOOL聽 fUseIter = FALSE, fUseTick = FALSE;

聽聽聽 while (!pfnCheck (pData)) {
聽聽聽聽聽聽聽 //
聽聽聽聽聽聽聽 // if we've already connected with desktop, use the desktop
聽聽聽聽聽聽聽 // "Retransmit" package to determine if we need to retransmit
聽聽聽聽聽聽聽 //
聽聽聽聽聽聽聽 if (!(KITLGlobalState & KITL_ST_DESKTOP_CONNECTED)) {
聽聽聽聽聽聽聽聽聽聽聽 if (fUseTick) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if ((int) (CurMSec - dwStartTime) > nTimeMax) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // retransmit
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (!pfnTransmit (pData, fUseSysCalls))
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 return FALSE;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 dwStartTime = CurMSec;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (nTimeMax < MAX_POLL_TIME)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 nTimeMax <<= 1;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽 } else if (fUseIter || (dwStartTime == CurMSec)) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // if time isn't moving for a while, we'll
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // use iteration.
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (dwLoopCnt ++ > dwLoopMax) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (!pfnTransmit (pData, fUseSysCalls))
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 return FALSE;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (dwLoopMax < MAX_POLL_ITER)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 dwLoopMax <<= 1;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 dwLoopCnt = 0;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 fUseIter = TRUE;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽 } else {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // time is moving, just use tick from here
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 fUseTick = TRUE;
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 if (!KITLPollData(fUseSysCalls, pfnTransmit, pData)) {
聽聽聽聽聽聽聽聽聽聽聽 return FALSE;
聽聽聽聽聽聽聽 }
聽聽聽 }
聽聽聽 return TRUE;
}
static BOOL TranCnxDsktp (LPVOID pParam, BOOL fUseSysCalls)
{
聽聽聽 return KitlSendFrame (PpfsFmtBuf, (WORD) (DWORD) pParam);
}
榪欎釜鍑芥暟鐨勪富浣撴槸涓涓驚鐜紝緇堟鐨勬潯浠舵槸!pfnCheck (pData)錛岃繖涓嚱鏁版槸鐢卞墠闈紶閫掕繘鏉ョ殑錛岃繑鍥炲間負KITLGlobalState & KITL_ST_DESKTOP_CONNECTED錛屼篃灝辨槸璇村湪寰楀埌妗岄潰榪炴帴涔嬪墠鏄笉浼氳繑鍥炵殑涔熷氨鏄鍚姩kitl浠ュ悗涓嶄笌妗岄潰璁$畻鏈鴻繛鎺indowsCE鐨勬槸鏃犳硶鍚姩鐨勩傜敱浜庝粠dwStartTime瀹氫箟鍒癲wStartTime == CurMSec鐨勫垽瀹氫粎浠呴渶瑕佸緢灝戠殑鏃墮棿灝卞彲浠ュ畬鎴愯繖孌墊椂闂村唴CurMSec鏄笉浼氳鏀瑰啓鐨勫氨鍙互閫氳繃寰幆榪涜瓚呮椂媯鏌?
騫墮氳繃TranCnxDsktp閲嶆柊鍙戦佹暟鎹紝鐩村埌KITLPollData璁劇疆KITLGlobalState銆?
static BOOL KITLPollData(BOOL fUseSysCalls, PFN_TRANSMIT pfnTransmit, LPVOID pData)
{
聽聽聽 LPBYTE pRecvBuf = PollRecvBuf;
聽聽聽
聽聽聽 if (fUseSysCalls && (KITLGlobalState & KITL_ST_MULTITHREADED)
聽聽聽聽聽聽聽 && !(pRecvBuf = _alloca(KITL_MTU))) {
聽聽聽聽聽聽聽 KITLOutputDebugString("!KITLPollData: STACK OVERFLOW!\r\n");
聽聽聽聽聽聽聽 return FALSE;
聽聽聽 }
聽聽聽 HandleRecvInterrupt(pRecvBuf, fUseSysCalls, pfnTransmit, pData);
聽聽聽 return TRUE;
}
鐢變簬鎴戜滑涓婇潰浼犳潵鐨刦UseSysCalls鍙傛暟涓篺alse鎵浠ュ墠涓孌墊鏌ユ搷浣滃茍涓嶈繘琛屻傜洿鎺ヨ皟鐢?HandleRecvInterrupt銆?

void HandleRecvInterrupt(UCHAR *pRecvBuf, BOOL fUseSysCalls, PFN_TRANSMIT pfnTransmit, LPVOID pData)
{
聽聽聽 WORD wLen = KITL_MTU;
聽聽聽 BOOL fFrameRecvd;

聽聽聽 // Receive data into buffer
聽聽聽 do {
聽聽聽聽聽聽聽 if (!fUseSysCalls)
聽聽聽聽聽聽聽聽聽聽聽 fFrameRecvd = Kitl.pfnRecv (pRecvBuf, &wLen);
聽聽聽聽聽聽聽 else if (IsDesktopDbgrExist ())
聽聽聽聽聽聽聽聽聽聽聽 fFrameRecvd = KCall((PKFN) Kitl.pfnRecv, pRecvBuf, &wLen);
聽聽聽聽聽聽聽 else {
聽聽聽聽聽聽聽聽聽聽聽 EnterCriticalSection (&KITLKCallcs);
聽聽聽聽聽聽聽聽聽聽聽 fFrameRecvd = Kitl.pfnRecv (pRecvBuf, &wLen);
聽聽聽聽聽聽聽聽聽聽聽 LeaveCriticalSection (&KITLKCallcs);
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 if (fFrameRecvd) {
聽聽聽聽聽聽聽聽聽聽聽 ProcessRecvFrame (pRecvBuf,wLen,fUseSysCalls, pfnTransmit, pData);
聽聽聽聽聽聽聽聽聽聽聽 wLen = KITL_MTU;
聽聽聽聽聽聽聽 }
聽聽聽 } while (fFrameRecvd);
}
閫氳繃Kitl.pfnRecv璋冪敤pfnEDbgGetFrame鎸囧悜鐨凜S8900DBG_GetFrame璇誨彇褰撳墠鐨勬暟鎹撫閫佷氦ProcessRecvFrame澶勭悊銆傛敞鎰忥紝榪欏効鐨刾fnEDbgGetFrame騫朵笉鏄氳繃DMA鎴栬呮槸緗戝崱浼犳潵鐨勪腑鏂惎鍔ㄧ殑鑰屾槸浣跨敤鏌ヨ鐨勬柟娉曡繘琛岀殑錛岃繖灝辨槸涓轟粈涔堣繖鍎垮茍娌℃湁鍚姩涓柇浠嶇劧鑳藉浣跨敤浠ュお緗戝崱榪涜鏁版嵁浼犺緭鏁版嵁鐨勫師鍥犮傞殢鍚庯紝鎴戜滑灝嗚綆楁満绔佹潵鐨勬暟鎹佷氦ProcessRecvFrame澶勭悊銆?

static BOOL ProcessRecvFrame(UCHAR *pFrame, WORD wMsgLen, BOOL fUseSysCalls, PFN_TRANSMIT pfnTransmit, LPVOID pData)
{
聽聽聽 KITL_HDR *pMsg;
聽聽聽 KITL_CLIENT *pClient = NULL;
聽聽聽 BOOL fRet = TRUE;
聽聽聽 UCHAR RxBufOffset;
聽聽聽 WORD聽 wDataLen;
聽聽聽 UCHAR ClientIdx;
聽聽聽 // let the transport layer decode the frame
聽聽聽 if (!(pMsg = (KITL_HDR *) Kitl.pfnDecode (pFrame, &wMsgLen))) {
聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_RECV, ("ProcessRecvFrame: Received Unhandled frame\n"));
聽聽聽聽聽聽聽 return FALSE;
聽聽聽 }

聽聽聽 // is it a valid KITL message?
聽聽聽 if (pMsg->Id != KITL_ID) {
聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_WARNING,("KITL: Got unrecognized Id: %X\r\n",pMsg->Id));
聽聽聽聽聽聽聽 return FALSE;
聽聽聽 }
聽聽聽
聽聽聽 // Validate length
聽聽聽 if (wMsgLen < KITL_DATA_OFFSET) {
聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_WARNING,("KITL: Invalid length %u\n",wMsgLen));
聽聽聽聽聽聽聽 return FALSE;
聽聽聽 }
聽聽聽 if (KITLDebugZone & ZONE_FRAMEDUMP)
聽聽聽聽聽聽聽 KITLDecodeFrame("<<KITLRecv",pMsg, wMsgLen);
聽聽聽
聽聽聽 // Check for administrative messages
聽聽聽 if (pMsg->Service == KITL_SVC_ADMIN)
聽聽聽聽聽聽聽 return ProcessAdminMsg(pMsg, wMsgLen, fUseSysCalls, pfnTransmit, pData);

聽聽聽 // Service Id is index into KITLClients array
聽聽聽 ClientIdx = pMsg->Service;
聽聽聽 if (ClientIdx >= MAX_KITL_CLIENTS) {
聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_WARNING,("!ProcessKITLMsg: Invalid ServiceId: %u\n",pMsg->Service));
聽聽聽聽聽聽聽 return FALSE;
聽聽聽 }

聽聽聽 pClient = KITLClients[ClientIdx];
聽聽聽
聽聽聽 // Until we complete registering, only handle administrative messages
聽聽聽 if (!pClient || !(pClient->State & KITL_CLIENT_REGISTERED)) {
聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_WARNING,("!ProcessKITLMsg: Client %u not registered\n",ClientIdx));
聽聽聽聽聽聽聽 return FALSE;
聽聽聽 }
聽聽聽 if (pMsg->Service != pClient->ServiceId) {
聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_WARNING,("!ProcessKITLMsg: Mismatch in service Id for Client %u (Got %u, expect %u)\n",
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ClientIdx,pMsg->Service,pClient->ServiceId));
聽聽聽聽聽聽聽 return FALSE;
聽聽聽 }

聽聽聽 if (pClient->State & KITL_USE_SYSCALLS) {
聽聽聽聽聽聽聽 if (fUseSysCalls)聽
聽聽聽聽聽聽聽聽聽聽聽 EnterCriticalSection(&pClient->ClientCS);
聽聽聽聽聽聽聽 else if (pClient->ClientCS.OwnerThread) {
聽聽聽聽聽聽聽聽聽聽聽 // We can't get the client CS, and it is owned - just toss frame
聽聽聽聽聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_WARNING,("!KITL(%u) tossing msg %u (Can't get CS)\n",ClientIdx, pMsg->SeqNum));
聽聽聽聽聽聽聽聽聽聽聽 return FALSE;
聽聽聽聽聽聽聽 }
聽聽聽 }

聽聽聽 // we've being in sync with the desktop
聽聽聽 pClient->State |= KITL_SYNCED;
聽聽聽
聽聽聽 // Put flags and seq # to LEDs
聽聽聽 KITL_DEBUGLED(LED_PEM_SEQ, ((DWORD) pMsg->Flags << 24) | pMsg->SeqNum);
聽聽聽
聽聽聽 // OK, valid message, see if it's an ACK
聽聽聽 if (pMsg->Flags & KITL_FL_ACK) {
聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_RECV,("KITL(%u): Received ack for msg %u, Tx window: %u,%u\n",
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ClientIdx,pMsg->SeqNum, pClient->AckExpected,pClient->TxSeqNum));
聽聽聽聽聽聽聽 // ACKs acknowledge all data up to the ACK sequence #
聽聽聽聽聽聽聽 while (SEQ_BETWEEN(pClient->AckExpected, pMsg->SeqNum, pClient->TxSeqNum)) {聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽 if ((pClient->State & KITL_USE_SYSCALLS) &&
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ((pClient->CfgFlags & KITL_CFGFL_STOP_AND_WAIT) ||
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 (SEQ_DELTA(pClient->AckExpected, pClient->TxSeqNum) >= pClient->WindowSize-1) ||
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 !(KITLGlobalState & KITL_ST_INT_ENABLED))) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (fUseSysCalls)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 SetClientEvent(pClient,pClient->evTxFull);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 else {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // Can't process message at this time...
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_WARNING,("!KITL(%u): Tossing ACK %u (Can't set event)\n",
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ClientIdx, pMsg->SeqNum));
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 return FALSE;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽 // Stop retransmission timer.
聽聽聽聽聽聽聽聽聽聽聽 TimerStop(pClient, (UCHAR)(pClient->AckExpected % pClient->WindowSize),fUseSysCalls);
聽聽聽聽聽聽聽聽聽聽聽 SEQ_INC(pClient->AckExpected);
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 goto ProcessKITLMsg_exit;
聽聽聽 }

聽聽聽 // Handle NACKs - retransmit requested frame if it is in our Tx window
聽聽聽 if (pMsg->Flags & KITL_FL_NACK) {
聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_WARNING,("KITL(%u): Received NACK for msg %u, Tx window: %u,%u\n",
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ClientIdx,pMsg->SeqNum, pClient->AckExpected,pClient->TxSeqNum));
聽聽聽聽聽聽聽 if (SEQ_BETWEEN(pClient->AckExpected, pMsg->SeqNum, pClient->TxSeqNum)) {
聽聽聽聽聽聽聽聽聽聽聽 UCHAR Index = pMsg->SeqNum % pClient->WindowSize;
聽聽聽聽聽聽聽聽聽聽聽 if (pClient->TxFrameLen[Index]) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // Restart retransmission timer (note we can't start timers if syscalls
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // are disabled, but this shouldn't screw us up, we'll just potentially
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // retransmit an extra frame if the timer fires before we get the ACK)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (fUseSysCalls)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 TimerStop(pClient,Index,fUseSysCalls);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 RetransmitFrame(pClient, Index, fUseSysCalls);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (fUseSysCalls)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 TimerStart(pClient,Index,KITL_RETRANSMIT_INTERVAL_MS,fUseSysCalls);
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽 else
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_WARNING,("!KITL(%u): NACK in window, but TxFrameLen empty!\n",ClientIdx));
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 else
聽聽聽聽聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_WARNING,("!KITL(%u): Received NACK outside of TX window: Seq: %u, Window: %u,%u\n",
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ClientIdx,pMsg->SeqNum,pClient->AckExpected,pClient->TxSeqNum));
聽聽聽聽聽聽聽 goto ProcessKITLMsg_exit;
聽聽聽 }
聽聽聽
聽聽聽 // Data frame.聽 Place in appropriate slot in Rx buffer pool. Note that we defer acking
聽聽聽 // received frames until they are read from the buffer, in KITLRecv.
聽聽聽 RxBufOffset = pMsg->SeqNum % pClient->WindowSize;

聽聽聽 if (! SEQ_BETWEEN(pClient->RxSeqNum, pMsg->SeqNum, pClient->RxWinEnd)) {
聽聽聽聽聽聽聽 UCHAR uLastACK = (UCHAR) (pClient->RxWinEnd - pClient->WindowSize - 1);

聽聽聽聽聽聽聽 KITL_DEBUGMSG (ZONE_WARNING, ("KITL(%u): Received msg outside window: Seq:%u, Win:%u,%u\n",
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ClientIdx,pMsg->SeqNum,pClient->RxSeqNum,pClient->RxWinEnd));

聽聽聽聽聽聽聽 // Special case to handle lost ACKs - if an ack is dropped, our Rx window will have
聽聽聽聽聽聽聽 // advanced beyond the seq # of the retransmitted frame.聽 Since ACKs ack all messages
聽聽聽聽聽聽聽 // up to the ack #, we only need to check the last frame.
聽聽聽聽聽聽聽 if (pMsg->SeqNum == uLastACK) {
聽聽聽聽聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_WARNING,("KITL(%u): Lost ACK (seq: %u, win: %u,%u)\n",ClientIdx,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 pMsg->SeqNum,uLastACK,pClient->RxWinEnd));
聽聽聽聽聽聽聽聽聽聽聽 SendAckNack (TRUE, pClient, uLastACK);
聽聽聽聽聽聽聽 }
聽聽聽 } else if (pClient->RxFrameLen[RxBufOffset] != 0) {
聽聽聽聽聽聽聽 // If all our buffers are full, toss frame (will be acked when data is read in KITLRecv)
聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_WARNING,("KITL(%u): Received duplicate (Seq:%u), slot %u already full. Win: %u,%u\n",
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ClientIdx,pMsg->SeqNum,RxBufOffset,pClient->RxSeqNum,pClient->RxWinEnd));
聽聽聽 } else {
聽聽聽聽聽聽聽 DWORD OldProcPerms;

聽聽聽聽聽聽聽 // If we're in non-preemptible mode, can't set the receive event, so just toss message
聽聽聽聽聽聽聽 // and wait for retry.
聽聽聽聽聽聽聽 if (!fUseSysCalls && (pClient->State & KITL_USE_SYSCALLS)) {
聽聽聽聽聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_WARNING,("KITL(%u): Tossing frame %u (Can't signal Rx event)\n",
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ClientIdx,pMsg->SeqNum));
聽聽聽聽聽聽聽聽聽聽聽 return FALSE;
聽聽聽聽聽聽聽 }

聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_RECV,("KITL(%u): Received frame Seq: %u, len: %u, putting in slot %u\n",
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ClientIdx, pMsg->SeqNum, wMsgLen, RxBufOffset));
聽聽聽聽聽聽聽 // If frames were dropped, send NACK (only allow one outstanding NACK)
聽聽聽聽聽聽聽 if (pMsg->SeqNum != pClient->RxSeqNum) {
聽聽聽聽聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_WARNING,("!KITL(%u): Dropped frame (seq: %u, win: %u,%u)\n",
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ClientIdx,pMsg->SeqNum,pClient->RxSeqNum, pClient->RxWinEnd));

聽聽聽聽聽聽聽聽聽聽聽 if (!(pClient->State & KITL_NACK_SENT)) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 SendAckNack(FALSE, pClient, pClient->RxSeqNum);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 pClient->State |= KITL_NACK_SENT;聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 else
聽聽聽聽聽聽聽聽聽聽聽 pClient->State &= ~KITL_NACK_SENT;
聽聽聽聽聽聽聽
聽聽聽聽聽聽聽 // Copy data to receive buffer, unblock anyone waiting, and close receive window
聽聽聽聽聽聽聽 wDataLen = wMsgLen - (WORD)KITL_DATA_OFFSET;
聽聽聽聽聽聽聽 if (wDataLen == 0)
聽聽聽聽聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_WARNING,("!KITL: Received data message with 0 length!\n"));
聽聽聽聽聽聽聽 if (pClient->ProcPerms) {
聽聽聽聽聽聽聽聽聽聽聽 // acquire permission of pClient and add it to current thread
聽聽聽聽聽聽聽聽聽聽聽 ACCESSKEY aKey = GETCURKEY() | pClient->ProcPerms;
聽聽聽聽聽聽聽聽聽聽聽 SWITCHKEY (OldProcPerms, aKey);
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 memcpy(pClient->pRxBufferPool + RxBufOffset*KITL_MTU,KITLDATA(pMsg), wDataLen);
聽聽聽聽聽聽聽 if (pClient->ProcPerms) {
聽聽聽聽聽聽聽聽聽聽聽 SETCURKEY (OldProcPerms);聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 pClient->RxFrameLen[RxBufOffset] = wDataLen;

聽聽聽聽聽聽聽 if (pClient->State & KITL_USE_SYSCALLS)
聽聽聽聽聽聽聽聽聽聽聽 // If we get here, we know that fUseSysCalls is TRUE
聽聽聽聽聽聽聽聽聽聽聽 SetClientEvent(pClient,pClient->evRecv);
聽聽聽聽聽聽聽
聽聽聽聽聽聽聽 // Close receive window
聽聽聽聽聽聽聽 while (pClient->RxFrameLen[pClient->RxSeqNum % pClient->WindowSize] &&
聽聽聽聽聽聽聽聽聽聽聽聽聽聽 (SEQ_DELTA(pClient->RxSeqNum, pClient->RxWinEnd) >= 1)) {
聽聽聽聽聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_RECV,("Rx win: %u,%u, usesyscalls: %u\n",pClient->RxSeqNum, pClient->RxWinEnd, fUseSysCalls));
聽聽聽聽聽聽聽聽聽聽聽 SEQ_INC(pClient->RxSeqNum);
聽聽聽聽聽聽聽 }
聽聽聽 }
聽聽聽
ProcessKITLMsg_exit:

聽聽聽 if (fUseSysCalls && (pClient->State & KITL_USE_SYSCALLS))
聽聽聽聽聽聽聽 LeaveCriticalSection(&pClient->ClientCS);
聽聽聽
聽聽聽 return fRet;
}
ProcessRecvFramed鏄竴涓繎200琛岀殑鍑芥暟錛屾牱瀛愬緢鍚撲漢銆傚畠鏄暟鎹撫鐨勮В鏋愬拰澶勭悊妯″潡鐨勪富浣撱傛垜浠粠涓婂埌涓嬬湅鐪嬮兘騫蹭簡浜涗粈涔堛傚厛璋冪敤KitlEtherDecodeUDP灝嗘潵鑷富鏈虹殑鏁版嵁甯цВ鐮佷負KITL_HDR緇撴瀯錛岀劧鍚庢晥楠岄瓟娉曟暟KITL_ID錛岀‘璁よ甯х殑淇℃伅鐨勬湁鏁堟т互鍙婃暟鎹暱搴︽槸鍚︽湁鏁堬紝濡傛灉ZONE_FRAMEDUMP鏍囩鏄墦寮鐨勫垯闇瑕佸垯瑙f瀽Frame鐨勫唴瀹瑰茍璁板綍涓嬫潵(杈撳嚭鍒拌皟璇曠晫闈紝鍒濆鍖栨祦紼嬪茍涓嶅寘鍚淇℃伅)錛岀劧鍚庡垽瀹氳鏁版嵁甯ф弿榪扮殑淇℃伅鏄惁灞炰簬綆$悊鍛戒護(榪炴帴妗岄潰錛屾柊寤篶lient絳夌瓑),濡傛灉鏄垯璋冪敤ProcessAdminMsg榪涜澶勭悊銆?
static BOOL ProcessAdminMsg(KITL_HDR *pHdr, WORD wMsgLen, BOOL fUseSysCalls, PFN_TRANSMIT pfnTransmit, LPVOID pData)
{
聽聽聽 KITL_CLIENT *pClient = NULL;聽聽聽
聽聽聽
聽聽聽 switch (pHdr->Cmd)
聽聽聽 {
聽聽聽聽聽聽聽 case KITL_CMD_SVC_CONFIG:
聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽 KITL_SVC_CONFIG_DATA *pCfg = (KITL_SVC_CONFIG_DATA *) KITLDATA (pHdr);
聽聽聽聽聽聽聽聽聽聽聽 int i, iStart;
聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽 if (wMsgLen != (KITL_DATA_OFFSET + sizeof(KITL_SVC_CONFIG_DATA))) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_WARNING,("!ProcessAdminMsg: Invalid legnth for CONFIG msg: %u\n",wMsgLen));
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 return FALSE;
聽聽聽聽聽聽聽聽聽聽聽 }

聽聽聽聽聽聽聽聽聽聽聽 // Find client struct
聽聽聽聽聽聽聽聽聽聽聽 if ((i = ChkDfltSvc (pCfg->ServiceName)) < 0)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 i = HASH(pCfg->ServiceName[0]);

聽聽聽聽聽聽聽聽聽聽聽 iStart = i;

聽聽聽聽聽聽聽聽聽聽聽 while (KITLClients[i]) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // For multi instanced services, skip clients that are already registered
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (!strcmp(KITLClients[i]->ServiceName,pCfg->ServiceName) &&
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 (!(KITLClients[i]->State & KITL_CLIENT_REGISTERED) || !(KITLClients[i]->CfgFlags & KITL_CFGFL_MULTIINST))) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 pClient = KITLClients[i];
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (i < NUM_DFLT_KITL_SERVICES)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // no dups for default services
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break;

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (MAX_KITL_CLIENTS == ++ i)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 i = NUM_DFLT_KITL_SERVICES;

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (iStart == i)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break;聽 // couldn't find a client
聽聽聽聽聽聽聽聽聽聽聽 }

聽聽聽聽聽聽聽聽聽聽聽 if (!pClient || !(pClient->State & (KITL_CLIENT_REGISTERING|KITL_CLIENT_REGISTERED))) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_WARNING,("!Received config for unrecognized service %s\n",
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 pCfg->ServiceName));
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 return TRUE;
聽聽聽聽聽聽聽聽聽聽聽 }

聽聽聽聽聽聽聽聽聽聽聽 if (fUseSysCalls)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 EnterCriticalSection(&pClient->ClientCS);

聽聽聽聽聽聽聽聽聽聽聽 // Send config to peer, unless this was a response to our cmd
聽聽聽聽聽聽聽聽聽聽聽 if (!(pHdr->Flags & KITL_FL_ADMIN_RESP)) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // ack this config message
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 SendConfig(pClient,TRUE);

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // Stop any pending transfers, reset sequence #s, etc

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // WARNING - can cause lost transmit data if the other side doesn't get
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // our config, and retries the config command.
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (pClient->State & KITL_SYNCED) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ResetClientState(pClient);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽 }

聽聽聽聽聽聽聽聽聽聽聽 //
聽聽聽聽聽聽聽聽聽聽聽 // we got the response from desktop, connecting the client
聽聽聽聽聽聽聽聽聽聽聽 //
聽聽聽聽聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_INIT, ("ProcessAdminMsg: Receive Config message for service %s\n", pClient->ServiceName));
聽聽聽聽聽聽聽聽聽聽聽 pClient->State &= ~(KITL_WAIT_CFG|KITL_CLIENT_REGISTERING);
聽聽聽聽聽聽聽聽聽聽聽 pClient->State |= KITL_CLIENT_REGISTERED;
聽聽聽聽聽聽聽聽聽聽聽 // Set our event in case anyone is waiting for config info
聽聽聽聽聽聽聽聽聽聽聽 if (fUseSysCalls)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 SetClientEvent(pClient,pClient->evCfg);

聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽 if (fUseSysCalls)聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 LeaveCriticalSection(&pClient->ClientCS);
聽聽聽聽聽聽聽聽聽聽聽 break;
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 case KITL_CMD_RESET:
聽聽聽聽聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 KITL_RESET_DATA *pResetData =聽 (KITL_RESET_DATA *) KITLDATA (pHdr);

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 KITLOutputDebugString("KITL: Got RESET command\n");

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // Set for clean boot if requested
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (pResetData->Flags & KITL_RESET_CLEAN)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 SC_SetCleanRebootFlag();
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // This function never returns
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 KernelIoctl(IOCTL_HAL_REBOOT, NULL,0,NULL,0,NULL);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 KITLOutputDebugString("KITL: IOCTL_HAL_REBOOT not supported on this platform\n");
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 break;
聽聽聽聽聽聽聽聽聽聽聽 }

聽聽聽聽聽聽聽 case KITL_CMD_DEBUGBREAK:
聽聽聽聽聽聽聽聽聽聽聽 if (fUseSysCalls && IsDesktopDbgrExist ())
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 DebugBreak ();
聽聽聽聽聽聽聽聽聽聽聽 break;

聽聽聽聽聽聽聽 case KITL_CMD_TRAN_CONFIG:
聽聽聽聽聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 int i;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 PKITL_HOST_TRANSCFG pCfg = (PKITL_HOST_TRANSCFG) KITLDATA(pHdr);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 wMsgLen -= KITL_DATA_OFFSET;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (pCfg->dwLen != wMsgLen) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 KITLOutputDebugString ("!Host config message size mismatch %d, %d\r\n", pCfg->dwLen, wMsgLen);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 return FALSE;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 wMsgLen -= sizeof (KITL_HOST_TRANSCFG);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (!Kitl.pfnSetHostCfg ((LPBYTE) (pCfg+1), wMsgLen))
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 return FALSE;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 Kitl.dwBootFlags = pCfg->dwFlags;

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (pCfg->dwKeySig == HOST_TRANSCFG_KEYSIG) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 for (i = 0; i < HOST_TRANSCFG_NUM_REGKEYS; i++) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 g_dwKeys[i] = pCfg->dwKeys[i];
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 KITL_DEBUGMSG (ZONE_INIT, (" KeyIndex %d = %d \n", i, g_dwKeys[i]));
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 }聽聽聽
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 KITLGlobalState |= KITL_ST_DESKTOP_CONNECTED;
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽 break;

聽聽聽聽聽聽聽 // in case we're polling (pfnTransmit && pData only set to non-null if we're polling)
聽聽聽聽聽聽聽 // we'll use desktop as our timer (desktop sends a retransmit packet to us every 2 seconds).
聽聽聽聽聽聽聽 case KITL_CMD_RETRASMIT:
聽聽聽聽聽聽聽聽聽聽聽 if (pfnTransmit && pData) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // KITLOutputDebugString ("Retrasmitting packets....\n");
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 pfnTransmit (pData, fUseSysCalls);
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽 break;
聽聽聽聽聽聽聽 default:
聽聽聽聽聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_WARNING,("!ProcessAdminMsg: Unhandled command 0x%X\n",pHdr->Cmd));
聽聽聽聽聽聽聽聽聽聽聽 return FALSE;
聽聽聽 }
聽聽聽 return TRUE;
}
鎴戜滑鐩存帴鐪婯ITL_CMD_TRAN_CONFIG鍒嗘敮錛岀洰鍓嶆垜浠殑涓昏宸ヤ綔浠嶇劧鏄厤緗繛鎺ャ傞鍏堝緱鍒癙KITL_HOST_TRANSCFG緇撴瀯鎸囬拡錛屽茍閫丼etHostCfg璁劇疆涓繪満淇℃伅涔嬪悗錛岃鍏ヤ粠涓繪満閫佸嚭鐨?涓猭ey鍊煎悗璁劇疆浠ュ強kitl鍚姩閫夐」鍜孠ITL_ST_DESKTOP_CONNECTED鏍囩ず浣嶃傜粫浜嗚繖涔堝ぇ涓鍦堜篃灝卞共浜嗕釜鍒濆鍖栬繛鎺ョ殑宸ヤ綔錛岀幇鍦ㄦ垜浠戶緇洖鍒皊tartKitl銆傞鍏堝厛鏄緗笁涓嚱鏁版寚閽堜緵鍚庨潰紼嬪簭璋冪敤錛屽茍璁劇疆鏍囩ず浣岾ITL_ST_ADAPTER_INITIALIZED;鐒跺悗閫氳繃SetKernelCommDev浠庡畾浣岾ERNEL_SVC_DBGMSG,KERNEL_SVC_PPSH錛孠ERNEL_SVC_KDBG鐨則ransport錛屾敞鎰忥細榪欎釜鍑芥暟騫朵笉鏄痥itl鐨勫嚱鏁幫紝鑰屾槸windowsCE kernel鐨勭郴緇熷嚱鏁板湪WINCE420\PRIVATE\WINCEOS\COREOS\NK\KERNELkwin32.c涓?浣滅敤鏄粠瀹氫綅緋葷粺璋冭瘯淇℃伅鐨勫彂甯冮氶亾錛屾湁鍏磋叮鍙互鑷繁鐪嬬湅銆備箣鍚嶴tartKitl鐨勮繃紼嬪氨緇撴潫浜嗭紝榪欎釜鏃跺欎綘鑲畾鎯抽棶閭itl鐨勪腑鏂垵濮嬪寲鍑芥暟鏄粈涔堟椂鍊欐墠榪愯鍛紵娌℃湁涓柇鐨勬敮鎸乲itl鏄浣曢氳鍜屽伐浣滅殑鍛紝浜嬪疄涓奒ITLInitializeInterrupt灝辮礋璐h繖閮ㄥ垎鐨勫伐浣滐紝浣嗘槸鐢變簬緋葷粺鍐呮牳榪樻病鏈夊畬鎴愬垵濮嬪寲鐨勫姩浣滐紝鎵浠ヨ繖涓椂鍊欒搗鍔╧itl鐨勪腑鏂槸浼氬獎鍝峩ernel鐨勫伐浣溿傚洜姝ゅ湪鍚庨潰鐢盨ystemStartupFunc()璋冪敤KITLInitializeInterrupt鏉ュ畬鎴愬垵濮嬪寲鐨勫姩浣溿?
BOOL
KITLInitializeInterrupt()
{

聽聽聽 int i;
聽聽聽 if (!(KITLGlobalState & KITL_ST_ADAPTER_INITIALIZED))
聽聽聽聽聽聽聽 return FALSE;
聽聽聽
聽聽聽 // Check if we are coming up for the first time, or resuming interrupts (e.g. when coming
聽聽聽 // back from OEMPowerOff)
聽聽聽 if (KITLGlobalState & KITL_ST_MULTITHREADED) {
聽聽聽聽聽聽聽 // Just enable interrupt and return
聽聽聽聽聽聽聽 EnableInts();
聽聽聽聽聽聽聽 return TRUE;
聽聽聽 }
聽聽聽
聽聽聽 KITLOutputDebugString("KITL: Leaving polling mode...\n");

聽聽聽 InitializeCriticalSection(&KITLODScs);
聽聽聽 InitializeCriticalSection(&KITLKCallcs);

聽聽聽 KITLGlobalState |= KITL_ST_MULTITHREADED;
聽聽聽
聽聽聽 KITL_DEBUGMSG(ZONE_INIT,("KITL Checking client registrations\n"));
聽聽聽 // Some clients may have registered already, finish initialization now that
聽聽聽 // the system is up. KDBG continues to run in polling mode.
聽聽聽 for (i=0; i< MAX_KITL_CLIENTS; i++) {
聽聽聽聽聽聽聽 if (KITLClients[i] && (i != KITL_SVC_KDBG)
聽聽聽聽聽聽聽聽聽聽聽 && (KITLClients[i]->State & (KITL_CLIENT_REGISTERED|KITL_CLIENT_REGISTERING))) {
聽聽聽聽聽聽聽聽聽聽聽 if (!RegisterClientPart2((UCHAR)i))
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 return FALSE;
聽聽聽聽聽聽聽 }
聽聽聽 }

聽聽聽 // Start interrupt thread. If we have clients registered, also turn on receive interrupts
聽聽聽 // from the ethernet controller, otherwise leave them disabled.
聽聽聽 if ((UCHAR) KITL_SYSINTR_NOINTR != Kitl.Interrupt) {
聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_INIT,("KITL Creating IST\n"));
聽聽聽聽聽聽聽 if ((hIntrThread = CreateKernelThread((LPTHREAD_START_ROUTINE)KITLInterruptThread,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 NULL, (WORD)g_dwKITLThreadPriority, 0)) == NULL) {
聽聽聽聽聽聽聽聽聽聽聽 KITLOutputDebugString("Error creating interrupt thread\n");
聽聽聽聽聽聽聽聽聽聽聽 return FALSE;
聽聽聽聽聽聽聽 }
聽聽聽 }

聽聽聽 return TRUE;
}
鐢變簬灝嗕細鏈塈ST涓簁itl涓撻棬鏈嶅姟錛屾墍浠ヤ篃灝遍渶瑕佷復鐣屽尯鏉ュ畬鎴愮嚎紼嬬殑鎿嶄綔錛岃繖鍎垮垱寤轟簡KITLODScs\KITLKCallcs涓や釜涓寸晫鍖恒備箣鍚庢爣璁?KITL_ST_MULTITHREADED銆傛鏌ユ敞鍐屼簡鐨勬湇鍔★紝瀹屾垚鍚庡氨鍒涘緩IST.

kitl鐨勫垵濮嬪寲錛屽惎鍔ㄧ殑澶ц嚧榪囩▼灝辨槸濡傛錛宻tart-->娉ㄥ唽鏈嶅姟-銆夊垵濮嬪寲transport->鍒涘緩IST

鏈鍚庢垜浠潵鐪嬬湅IST閲岄潰鎴戜滑閮藉共浜涗粈涔?
static DWORD KITLInterruptThread (DWORD Dummy)
{
聽聽聽 HANDLE hIntEvent;
聽聽聽 DWORD dwRet;

聽聽聽 KITL_DEBUGMSG(ZONE_INIT,("KITL Interrupt thread started (hTh: 0x%X, pTh: 0x%X), using SYSINTR %u\n",
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 hCurThread,pCurThread, Kitl.Interrupt));

聽聽聽 pCurThread->bDbgCnt = 1;聽聽 // no entry messages
聽聽聽
聽聽聽 if ((hIntEvent = CreateEvent(0,FALSE,FALSE,EDBG_INTERRUPT_EVENT)) == NULL) {
聽聽聽聽聽聽聽 KITLOutputDebugString("KITL CreateEvent failed!\n");
聽聽聽聽聽聽聽 return 0;
聽聽聽 }
聽聽聽 if (!SC_InterruptInitialize(Kitl.Interrupt, hIntEvent, NULL,0)) {
聽聽聽聽聽聽聽 CloseHandle(hIntEvent);
聽聽聽聽聽聽聽 KITLOutputDebugString("KITL InterruptInitialize failed\n");
聽聽聽聽聽聽聽 return 0;
聽聽聽 }

聽聽聽 // always enable interrupt as long as OEM told us so
聽聽聽 EnableInts();
聽聽聽
聽聽聽 KITLGlobalState |= KITL_ST_IST_STARTED;
聽聽聽
聽聽聽 while ((dwRet = SC_WaitForMultiple (1,&hIntEvent,0,INFINITE)) == WAIT_OBJECT_0) {

聽聽聽聽聽聽聽 KITL_DEBUGLED(LED_IST_ENTRY,0);
聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_INTR,("KITL Interrupt event\n"));

聽聽聽聽聽聽聽 // no need to check pending, just call HandleRecvInterrupts because it'll
聽聽聽聽聽聽聽 // just return if there is no interrupt pending
聽聽聽聽聽聽聽 HandleRecvInterrupt(ISTRecvBuf,TRUE, NULL, NULL);

聽聽聽聽聽聽聽 SC_InterruptDone(Kitl.Interrupt);
聽聽聽聽聽聽聽
聽聽聽聽聽聽聽 KITL_DEBUGMSG(ZONE_INTR,("Processed Interrupt event\n"));
聽聽聽 }
聽聽聽 KITLOutputDebugString("!KITL Interrupt thread got error in WaitForMultipleObjects: dwRet:%u, GLE:%u\n",
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 dwRet,GetLastError());
聽聽聽 return 0;
}
棣栧厛鏄垱寤鴻IST鎵灞炵殑浜嬩歡錛屽茍灝嗚浜嬩歡涓庢墍灞炵殑涓柇鑱旂郴璧鋒潵錛屽啀鍚庤嚜鐒舵槸鍚姩涓柇浜嗐傝瀹欿ITL_ST_IST_STARTED鏍囪鍚庣殑浠g爜灝辨槸IST鐨勫疄闄呭唴瀹癸紝褰撲腑鏂彂鐢燂紝浜や粯HandleRecvInterrupt澶勭悊錛岃繑鍥炰腑鏂傚拰澶氭暟IST涓鏍瘋璋冪敤姘歌繙涓嶄細榪斿洖錛岄櫎闈炵粨鏉熻綰跨▼錛屾墍浠ュ悗闈㈢殑璋冭瘯淇℃伅杈撳嚭鐨勬槸閿欒銆?

void HandleRecvInterrupt(UCHAR *pRecvBuf, BOOL fUseSysCalls, PFN_TRANSMIT pfnTransmit, LPVOID pData)
{
聽聽聽 WORD wLen = KITL_MTU;
聽聽聽 BOOL fFrameRecvd;

聽聽聽 // Receive data into buffer
聽聽聽 do {
聽聽聽聽聽聽聽 if (!fUseSysCalls)
聽聽聽聽聽聽聽聽聽聽聽 fFrameRecvd = Kitl.pfnRecv (pRecvBuf, &wLen);
聽聽聽聽聽聽聽 else if (IsDesktopDbgrExist ())
聽聽聽聽聽聽聽聽聽聽聽 fFrameRecvd = KCall((PKFN) Kitl.pfnRecv, pRecvBuf, &wLen);
聽聽聽聽聽聽聽 else {
聽聽聽聽聽聽聽聽聽聽聽 EnterCriticalSection (&KITLKCallcs);
聽聽聽聽聽聽聽聽聽聽聽 fFrameRecvd = Kitl.pfnRecv (pRecvBuf, &wLen);
聽聽聽聽聽聽聽聽聽聽聽 LeaveCriticalSection (&KITLKCallcs);
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 if (fFrameRecvd) {
聽聽聽聽聽聽聽聽聽聽聽 ProcessRecvFrame (pRecvBuf,wLen,fUseSysCalls, pfnTransmit, pData);
聽聽聽聽聽聽聽聽聽聽聽 wLen = KITL_MTU;
聽聽聽聽聽聽聽 }
聽聽聽 } while (fFrameRecvd);
}
HandleRecvInterrupt鏄腑鏂鐞嗙▼搴忕殑瀹炰綋錛屽皢transport閫佹潵鐨勬暟鎹~鍏ョ紦鍐插尯寰呭鐞嗐備笂闈㈡墍鎻愬埌鐨勪腑鏂湪OEM浠g爜涓寚瀹氾紝鍦⊿MDK2440bsp涓涓柇瀵瑰簲浠ュお緗戝崱涓柇銆?



]]>
瑙hWINCE 5.0 KITL浠g爜嫻佺▼ http://m.shnenglu.com/milkyway/articles/17671.html鐩告濋吀涓湁鐢?/dc:creator>鐩告濋吀涓湁鐢?/author>Tue, 16 Jan 2007 02:00:00 GMThttp://m.shnenglu.com/milkyway/articles/17671.htmlhttp://m.shnenglu.com/milkyway/comments/17671.htmlhttp://m.shnenglu.com/milkyway/articles/17671.html#Feedback1http://m.shnenglu.com/milkyway/comments/commentRss/17671.htmlhttp://m.shnenglu.com/milkyway/services/trackbacks/17671.html

浣滆咃細Walzer
鏃ユ湡錛?005.3.19

鎽樿錛欿ITL鏄疨LATFORM BUILDER涓殑涓涓寒鐐癸紝鎻愪緵浜嗗拰鏈湴璋冭瘯綾諱技鐨勬柇鐐廣佸彉閲忚窡韙佸唴瀛樻煡鐪嬬瓑鎵嬫錛屽鏋滄病鏈塊ITL錛屽祵鍏ュ紡璋冭瘯搴旇鍙兘鐢ㄤ覆鍙f墦鍗版秷鎭潵鐪嬩簡錛屽伐浣滄晥鐜囧ぇ澶т笅闄嶃傛湰鏂囦互瀹炵幇鏈綆鍗曠殑SERIAL KITL涓虹洰鐨勶紝灝卞叾瀹炵幇浠g爜榪涜璺熻釜璋冭瘯錛岃繖浜涗唬鐮佽法瓚婁簡WINCE鐨凱LATFORM銆丳UBLIC銆丳RIVATE涓夊ぇ涓昏鐩綍錛屾湁浜涚儲鐞愶紝涓嶈繃鍙鑳借皟閫氾紝涓鍒囧伐浣滃拰寮礬閮芥槸鍊煎緱鐨勩傛垜鎶婅皟璇曠粡楠屽拰涓漢鐞嗚В鍐欎笅鏉ワ紝甯屾湜鑳藉府鍔╁埆浜哄皯璧板集璺傚鏋滄枃绔犱腑鏈夌悊瑙eけ褰撶殑鍦版柟錛岃涓嶅悵璧愭暀銆?br />
姝f枃錛?br />
涓.void OEMInit()聽 [platform\project\src\kernel\oal\init.c]
聽聽聽 棣栧厛浠嶰EMInit()鍑芥暟鐪嬭搗銆傘傚湪渚濇鍒濆鍖朆ranch-Target Buffer銆並ERNEL鍑芥暟銆佸垵濮嬪寲涓柇銆乀IMER涔嬪悗錛屽氨杞埌KITL浜嗐傝皟鐢ㄤ簡榪欎釜鍑芥暟OALKitlStart()銆傛鏃舵湁涓紪璇戠殑鍒嗘敮錛屽鏋滄槸RELEASE鐗堟湰錛岄偅涔堝湪kernel\kern\stubs.c閲岄潰鐨凮ALKitlStart()鍑芥暟鏄釜STUB錛屽彧鏄痳eturn TRUE錛?濡傛灉鏄疍EBUG鐗堟湰錛岄偅灝辮繘鍒発ernel\oal\kitl.c閲岄潰鐨凮ALKitlStart().

浜?BOOL OALKitlStart()聽 [platform\myproject\src\kernel\oal]
聽聽聽 鍦∣ALKitlStart()閲岄潰錛岄鍏堣瘯鍥句粠0xA00FF00澶勮鍙朾ootloader閲岄潰鐣欎笅鐨刱itl鍙傞噺錛屽鏋滆涓嶅埌涓滆タ鍒欎嬌鐢ㄨ鍑芥暟閲岀殑榛樿閰嶇疆銆傜敱浜庡師鏉ョ敤浜唀thernet鍚屾椂浣滀負download鍜宬itl閫斿緞錛屾墍浠ュ湪InitSpecifiedEthDevice鍑芥暟閲岀粰pKitlArgs緇撴瀯浣撹祴鍊間簡銆傜幇鍦ㄦ兂鎶婁袱鑰呭垝鍒嗘竻妤氾紝棣栧厛灝辨妸璇誨彇bootloader閲岄潰鐨刱itl鍙傞噺涓鍙ュ共鎺夛紝寮鴻揩浣跨敤鎴戜滑鍦ㄤ笅闈㈢殑榛樿閰嶇疆銆備富瑕佸氨鏄~鍏呬笁涓弬閲?/p>

1.棣栧厛鏄繖涓粨鏋勪綋
OAL_KITL_ARGS pKITLArgs
{
聽UINT32 flags;聽 //璁懼ソENABLED鏍囧織錛屾寜闇瑕佽POLL鏍囧織錛屼絾娉ㄦ剰涓瀹氫笉瑕佽PASSIVE鏍囧織
聽DEVICE_LOCATION聽 devLoc;
聽{
聽聽DWORD聽 IfcType;聽聽//涓嶈ether榪樻槸serial錛岄兘鏄痠nternal type =0;
聽聽DWORD聽 BusNumber;聽// =0
聽聽DWORD聽 LogicalLoc;聽//鐗╃悊鍦板潃
聽聽PVOID聽聽聽聽 PhysicalLoc;聽//鐣欏仛鍚庨潰=OALPAtoVA(LogicalLoc, FALSE). 鐪熻楝? 鎰熻搴旇鍜屼笂闈㈢殑LogicalLoc浣滅敤璋冭繃鏉ョ湅鐫姣旇緝欏哄惂?
聽聽DWORD聽 Pin;聽聽//Ethernet鎵嶇敤鐨勪笢涓?br />聽}
聽union
聽{
聽聽struct
聽聽{
聽聽聽UINT32聽 baudRate;聽//涓嶇敤瑙i噴浜?br />聽聽聽UINT32聽 dataBits;
聽聽聽UINT32聽 stopBits;
聽聽聽UINT32聽 parity;
聽聽}
聽聽struct
聽聽{
聽聽聽UINT16聽 mac[3];聽//榪欎釜涔熶笉鐢ㄨВ閲婁簡
聽聽聽UINT32聽 ipAddress;
聽聽聽UINT32聽 ipMask;
聽聽聽UINT32聽 ipRoute
聽聽}
聽}
}
2. pszDeviceID.聽 鎰熻榪欏悕瀛楀氨鏄搗浜嗗ソ鐜? 璧嬫垚Walzer搴旇姣旇緝鎷?涓嶈繃榪樻槸淇濈暀鍘熸潵璧嬬殑AMOISOFT濂戒簡, 鍏嶅緱琚墦.
3. 鍏ㄥ眬鍙橀噺OAL_KITL_DEVICE g_kitlDevices. 榪欎釜涓滀笢鍦╧itl.c寮澶村寘鍚殑kitl_cfg.h涓璧嬪?聽 鏈涓昏灝辨槸淇敼g_kitlDevices.pDriver.聽 榪欎釜pDrvier鎸囧悜涓涓嚱鏁版寚閽堝垪琛ㄧ殑緇撴瀯浣擄紝璇ュ垪琛ㄥ畾涔変簡鐢ㄥ仛kitl妯″潡鐨勫垵濮嬪寲銆佽鍐欍佷腑鏂佹祦鎺у埗絳夊嚱鏁般?g_kitlDevices鏈韓鏄釜浜岀淮鏁扮粍, 鍙互瀹氫箟璁稿璁懼鐢ㄥ仛kitl鏃舵彁渚涚殑鍙傛暟璁劇疆, 鍚庨潰浼氱敤涓涓猣or鏉ュ驚鐜垽鏂璸KITLArgs鐨勫弬鏁板拰g_kilDevices閲岄潰鍝釜涓緇存暟緇勬垚鍛樼浉鍖歸厤.

榪欎笁涓弬閲忓~鍏呭ソ浠ュ悗錛屽氨鍙互榪涘埌OALKitlInit(pszDeviceID, pKITLArgs, g_kitlDevices)閲岄潰浜?

涓?BOOL OALKitlInit( deviceId, pArgs, pDevice)聽聽聽 [platform\common\src\common\kitl\kitl.c]
聽聽聽 榪欎釜鍑芥暟鍏堟妸杈撳叆鐨勫弬閲忓叏閮ㄧ敤OALMSG鎵撳嵃鍑烘潵錛岃繖涓笉綆°?br />聽聽聽 閲嶈鐨勬槸寮曞叆浜唃_kitlState鍏ㄥ眬鍙橀噺錛屽紑澶翠竴鍙?br />聽聽聽 g_kitlState.pDevice = OALKitlFindDevice(&pArgs->devLoc, pDevice) 榪欎釜灝辨槸涓婇潰鎵璇寸殑浠巊_kitlDevices閲屽彲鐢ㄨ澶囧垪琛ㄩ噷寰幆鍒ゆ柇錛屾壘鍒伴夌敤鐨勮澶囩殑鍖歸厤鍑芥暟鎸囬拡銆?br />聽聽聽 鎺ョ潃鎶婅緭鍏ュ弬閲廳evicdId鍜屽墠闈㈠~鍏呭ソ鐨凮AL_KITL_ARGS緇撴瀯COPY鍒癵_kitlState閲岄潰
聽聽聽 鐒跺悗灝卞彲浠ヨ皟鐢↘ItlInit(TRUE)浜嗭紝濡傛灉鍓嶉潰鍦‵LAG閲岄潰璁句簡PASSSIVE鏍囧織錛岀幇鍦ㄥ氨鏄疜itlInit(FALSE)浜嗭紝鍢垮樋鐖藉埌浜嗗惂銆?/p>

鍥?BOOL KitlInit(BOOL fStartKitl)聽聽聽 [private\winceos\coreos\nk\kitl\ethdbg.c]
聽聽聽 澶尌鐞愪簡錛屾垜瑕佺敤涓插彛錛屽畠灞呯劧鍙玡thdbg.c錛屼笉緇欓潰瀛愩備笉榪囨槸private閲岄潰鐨勪笢涓滐紝鍙繙瑙傝屼笉鍙旱鐜╃剦~~
聽聽聽 榪欎釜鍑芥暟騫蹭簡涓変歡浜嬶細
1. 瑁呰澆浜嗕笁涓叏灞鐨勫嚱鏁版寚閽?br />2. 鐢∟ewClient娉ㄥ唽浜嗕笁涓狵ITL瀹㈡埛绔細
聽聽聽 KITL_SVCNAME_DBGMSG聽聽 //debug message, Debug淇℃伅鍙戝竷閫氶亾
聽聽聽 KITL_SVCNAME_PPSH聽 //PPshell, 鏂囨湰鎺у埗鍙扮晫闈?
聽聽聽 KITL_SVCNAME_KDBG //kernel debug, 鍐呮牳璋冭瘯鐣岄潰

3.鐢眆StartKitl鏉ュ喅瀹氭槸鍚﹀惎鍔⊿tartKitl()鍑芥暟. (榪欓噷欏轟究鎻愪竴涓嬶紝鎸夌収鍖堢墮鍒╁懡鍚嶆硶, BOOL鍙橀噺鍓嶉潰鍔犱釜b, 浣哅S鐨勫仛娉曟垜瑙夊緱寰堝悎鐞? BOOL鍙橀噺灝辨槸涓狥LAG鍢? 鍓嶉潰鍔犱釜f, 鎶婂皬b鐣欑潃緇橞YTE綾誨瀷鐢?)

浜?static BOOL StartKitl(BOOL fInit)聽聽聽 [private\winceos\coreos\nk\kitl\ethdbg.c]
聽聽聽 榪欏張鏄痯rviate閲岄潰鐨勪笢涓溿傛渶鐥涜嫤鐨勫湴鏂瑰紑濮嬩簡銆傝繖鍑芥暟鍙婂叾瀛愬嚱鏁板皢絎竴嬈¤皟鐢∣EM鑷繁鍐欑殑KITL妯″潡鍒濆鍖栥佽鍐欑▼搴忋傛槸楠″瓙鏄┈錛屾媺鍑烘潵婧滄簻灝辯煡閬撳暒~
聽聽聽 鎸夐『搴忕湅涓嬫潵錛岄鍏堝垽鏂緭鍏ュ弬閲忔槸鍚﹁鍚姩KITL錛屽茍涓斿鏋淜ITLGlobalState閲岄潰琚墦涓奒ITL_ST_DESKTOP_CONNECTED鏍囪鐨勮瘽錛岄偅涓嬮潰鐨勬楠ゅ氨鍏ㄥ厤浜嗐傚綋鐒舵垜浠槸絎竴嬈¤繍琛屽埌榪欓噷錛岃嫢榪欎箞灝辮煩鍑虹殑璇濓紝淇哄氨椹姞鐖典簡銆?/p>

聽聽聽 絎竴姝?
聽聽聽 騫茬殑絎竴浠舵浜嬪氨鏄皟鐢∣EMKitlInit(&Kitl). 榪欎釜鍚庨潰璇﹁堪. 緇х畫鎶婅繖涓嚱鏁扮湅瀹?
聽聽聽 OEMKitlInit鍒濆鍖朘ITL鐨勭‖浠舵娊璞″眰鍚庡茍鎶婄浉鍏蟲寚閽堟暟鎹~鍏呯粰鍏ㄥ眬鍙橀噺KITLTRANSPORT Kitl (鏈夋病鏈夋悶閿欙紝涓轟粈涔堜笉鍙玤_kitl), 榪欎簺宸ヤ綔鍋氬畬灝辮繑鍥炰簡
聽聽聽聽 StartKitl鏀惰揣鍚庢妸Kitl緇撴瀯鏁翠釜媯鏌ヤ竴閬?淇濊瘉娌¢敊鍚? 椹笂涔板崟, 鎶婂叏灞鍙橀噺KITLGlobalState鎵撲笂涓狵ITL_ST_KITLSTARTED鏍囪. 榪欐墠綆桲ITL鍚姩鐨勭涓姝K浜?

聽聽聽 絎簩姝?
聽聽聽 鎺ヤ笅鏉ュ氨鏄疜ITLConnectToDesktop(), 榪涜繖涓嚱鏁板悗灝辨槸絎竴嬈′嬌鐢ㄤ簡鍓嶉潰KITL浼犺緭浠嬭川紜歡鎶借薄灞傞噷鐨勮鍐欏嚱鏁頒簡, 榪欐椂鍊欏氨闇瑕佽皟璇曚簡. 榪欎釜ConnectToDesktop澶ц嚧灝辨槸鍏圫end浜嗕竴涓猭ITL.....鐨刦rame榪囧幓,鐒跺悗polling絳夊緟PC绔殑response, 閭h竟鍐嶅彂涓猭ITL.....鐨刦rame榪囨潵, 鎼炲緱璺熷湴涓嬪厷鎵撴殫鍙蜂技鐨? 鍏跺疄涔熸病浠涔堢巹涔庣殑錛屽氨鏄櫘閫氱殑鏁版嵁鍖呭墠闈㈠姞涓狵TIL涓撶敤鐨凥EADER鑰屽凡. 榪欎釜CONNECT鎴愬姛鍚?KITLGlobalState閲岄潰灝卞姞涓狵ITL_ST_DESKTOP_CONNECTED鏍囪浜?

聽聽聽 絎笁姝?
聽聽聽 set up kernel function pointers, 涔熸病浠涔?灝變笁涓嚱鏁版寚閽? 璧嬪畬鍚庡氨KITL_ST_ADAPTER_INITIALIZED浜? 鍏跺疄榪欎釜KITLGolbalSate鐨勬誨叡鏈?涓爣蹇?鍒嗗埆鏄?br />KITL_STARTED,聽 (OK)
DESKTOP_CONNECTED,聽聽 (OK)
TIMER_INIT, (?)
INT_ENABLED,聽 (POLLING)
IST_STARTED,聽 (POLLING)
MULTITHREADED,聽聽 (?)
ADAPTER_INITIALIZED. (OK)
鍚庨潰鎷彿閲屾墦涓奜K鏄埌榪欓噷宸茬粡瀹屾垚鐨勶紝 鎵撻棶鍙風殑鎴戣繕涓嶅お娓呮浠涔堜綔鐢? INT鍜孖ST涓ら」,鎴戜滑鐢ㄧ殑POLLING鎵浠ヨ偗瀹氭槸涓嶉渶瑕佷簡.

聽聽聽 絎洓姝?
聽聽聽 璋冪敤SetKernelCommDev璁劇疆kernel閫氳繃浣曠浠嬭川浼犻丏BGMSG, PPSH鍜孠DBG.
聽聽聽 OHYEAH, 鎴戠殑SERIAL KITL灝卞き鎶樺湪榪欓噷. 榪涘埌SerKernelCommDev(service, CommDevice)鍑芥暟閲岀湅, 瀹冨彧璁ommDevice=KERNEL_COMM_ETHER鐨勬儏鍐碉紝鑰屽睆钄戒簡涓嶦THER騫跺垪鐨凷ERIAL鍜孭ARALLER,鐩存帴return FALSE, 涓嬮潰鐨勪簨鎯呴兘涓嶇敤騫蹭簡. 鑰屽湪MS鎻愪緵鐨刉inCE Documantation閲岄潰錛岃繖涓猄etKernelCommDev鍑芥暟鐨勮鏄庝笂鍐欑潃"This function is obsolete and should not be used". 鑻ユ兂鏀瑰槢,榪欎釜鏄湪private閲岄潰鐨勮繕鍔ㄥ畠涓嶅緱. NND, 鎰熻琚玀S raped浜?
聽聽聽聽 濡傛灉浣跨敤ETHER鍦ㄨ繖閲屾垚鍔熺殑璇? 涓嬮潰榪樻湁涓や釜鍑芥暟NKForceCleanBoot()鍜孠ITLInitializeInterrupt()璧拌繃鍘? 榪橩ITL鍒濆鍖栧氨鍏ㄩ儴緇撴潫浜? 鎴戜及璁ITLGolbalSate閲岄潰鐨処NIT_ENABLED鍜孖ST_STARTED灝辨槸鍦ㄨ繖涓嚱鏁拌繃紼嬩腑琚爣璁頒笂鐨?
聽聽聽聽
聽聽聽
鍏?BOOL OEMKitlInit(PKITLTRANSPORT pKitl)聽聽聽 [platform\common\src\common\kitl\kitl.c]
聽聽聽 鍓嶉潰鎻愬埌StartKItl璧鋒潵鍚庯紝棣栬鐨勫氨鏄皟鐢∣EMKitlInit. 榪欎釜鍑芥暟鍦╓inCE4.2鍜?.0閲屽樊鍒緢澶? 4.2閲岀殑鍋氭硶鏄犅犅?if (!InitEther (pKitl) && !InitParallelSerial (pKitl)), 鎶奅THER, SERIAL, PARALLEL閮藉垵濮嬪寲浜嗕竴閬?紕拌繍姘旂湅鍝釜鐢ㄥ緱涓婏紝鑰?.0閲屾槸榪涙潵鍚庡氨涓涓緢鏄庢樉鐨勫垎鏀墽鎯?鐢眊_kitlState.pDevice->type鏉ュ喅瀹氭槸璋冪敤OALKitlEthInit榪樻槸OALKitlSerialInit. 鍏稿瀷鐨勭鏃忔瑙? 灞呯劧娌℃湁OALKitlParallelinit. 榪樺ソ鎴戜滑鐢ㄧ殑鏄疭ERIAL.
聽聽聽 榪欓噷鏈変釜閫夋嫨緙栬瘧鐨勫湴鏂?灝辨槸#ifdef KITL_ETHER鍜?ifdef KITL_SERIAL, 鍏蜂綋瀹氫箟鐨勫湴鏂規槸璇ョ洰褰曚笅鐨剆ources鏂囦歡閲岄潰涓琛?CDEFINES=$(CDEFINES) -DKITL_SERIAL -DKITL_ETHER, 鐚ョ悙鍟婃壘浜嗗崐澶? 鍏跺疄鎴戣寰楁棦鐒舵湁if緇撴瀯鏉ラ変簡錛岄偅涔堥夋嫨緙栬瘧涔熸槸鍙湁鍙棤鐨勪簡.
聽聽聽 濂斤紝涓嬮潰灝辮繘鍒癘ALKItlSerialInit()閲岄潰.

涓?BOOL OALKitlSerialInit(LPSTR deviceId, OAL_KITL_DEVICE *pDevice, OAL_KITL_ARGS *pArgs, KITLTRANSPORT *pKitl)
聽聽聽 [platform\common\src\common\kitl\kitlserial.c]
聽聽聽 鎴戣嚜宸卞線榪欎釜kitlserial.c鏂囦歡閲屽啓浜嗗叚涓嚱鏁?
聽聽聽 BOOL KitlSerialInit(KITL_SERIAL_INTFO *pSerInfo)
聽聽聽 UINT16 KitlSerialWriteData(UINT8 *pch, UINT16 length)
聽聽聽 UINT16 KitlSerialReadData(UINT8 *pch, UINT16 length)
聽聽聽 void KitlSerialFlowControl聽 //stub, 鎴戞墍鐢ㄧ殑FFUART鍙湁TXD鍜孯XD涓ゆ牴綰? RTS絳夐兘娌℃湁, 鎵浠lowControl鑷劧涔熷簲璇ユ槸STUB浜?br />聽聽聽 void KitlSerialEnableInt(void)聽聽 //stub, use polling
聽聽聽 void KitlSerialDisableInt(void)聽 //stub, use polling
聽聽聽 鍚﹀垯鍓嶉潰鐨刧_kitlDevices閲岄潰娌℃湁鐩稿簲鐨勭‖浠舵娊璞″眰鏉ュ~鍏?
聽聽聽 涓婇潰鐨凷erialRecv, Encode, Decode絳夊氨鎰忔濋兘寰堟槑鏄句簡,涓嶇敤澶氳. OK鐜板湪宸茬粡璧板埌鏈搴曞眰浜? 鏂囩珷涔熷彲浠ョ粨鏉熶簡.

鍏佽褰曚竴涓嬭皟璇曠粡楠?br />聽聽聽 铏界劧榪欐槸鎴戠涓夋璋冧覆鍙d簡錛岀敱浜庢病鎬葷粨鍓嶉潰鐨勭粡楠岋紝榪樻槸鑰椾簡涓ゅぉ鎵嶅埌private閲岄潰澶姌鐨勫湴鏂廣傚疄闄呬笂搴旇涓澶╁氨鑳借蛋鍒頒簡銆傞棶棰樺嚭鍦?br />1. 絎竴澶╄皟璇曞櫒鏍規湰鐢ㄤ笉涓婃墜銆傝皟璇曞櫒杞歡銆丳B涓嶆柇姝葷繕錛岀粡甯擱噸鍚蔣浠剁敋鑷抽噸鍚數鑴戯紝絎竴澶╂湁3/4浠ヤ笂鐨勬椂闂磋楀湪榪欎簺闂涓? 涓嶆柇閲嶅惎銆?br />2. 鍦║ART鍒濆鍖栧嚱鏁扮殑鏈鍚庯紝灞呯劧蹇樿浜嗗湪interrupt controller register閲岄潰enable uart unit, 榪欎箞涔岄緳鐨勪簨銆?br />3. KitlSerialFlowControl鐨勯棶棰? 鍐欑殑鏃跺欑収鎼簡X86涓嬬殑鍑芥暟, 娌℃兂鏄庣櫧鍒板簳瑕丆ontrol浠涔? 璋冭瘯鏃舵鍦ㄨ繖閲屽悗,聽 涓寮濮嬫妸鎸囧悜榪欎釜鍑芥暟鐨勬寚閽堣緗垚NULL, 浣嗚繖鏍稰RIVATE閲岄潰鏈変簺瑕両F鍒ゆ柇鐨勫嚱鏁板氨榪涗笉鍘諱簡. 鍚庢潵鎹㈡垚STUB灝監K浜?
4. receive鍑芥暟閲岄潰, 鍦ㄦ敹姣忎釜BYTE涔嬪墠鍏堝幓鍒ゆ柇浜哃ine Status Register閲岄潰鐨凞ata Ready bit, 濡傛灉璇ヤ負闆? 鍒欒繑鍥炲け璐? 浣嗚繖閲屾槸鏈夐棶棰樼殑錛屽叿浣撲篃娌″お鎯蟲槑鐧? 鍙嶆鍦ㄨ皟璇昫ebug serial鐨勬椂鍊欏氨鎶婅繖涓垽鏂粠MS鎻愪緵鐨勬簮鐮侀噷澶村垹鍘諱簡錛岀幇鍦ㄥ仛KITL serial鏃跺張鎵嬬棐鍔犺繘鍘? 鏋滅劧榪樻槸涓嶈. 榪欏彲鑳芥槸MS鎴朓NTEL鐨勪竴澶凚UG, 浣嗘寜鐓NTEL CPU MANUL UPDATE閲岄潰緇欑殑璇繪祦紼? 涓寮濮嬪彧鍒ゆ柇LSR閲岄潰鐨凟RROR, 娌℃湁鍒ゆ柇DR浣嶅氨寮濮嬭絎竴涓狟YTE浜? 璇昏繃鍚庡啀鍒ゆ柇濡傛灉DR浣嶄負1,鍒欑戶緇涓嬩竴BYTE.
5. 鍦╮eceive鍑芥暟閲屽姞閫氳繃debugger鍔燽reak point, 緇撴灉receive buffer register閲岄潰鐨勬暟鎹debugger鎵弿鍘諱互鍚庯紝灝卞彉闆朵簡錛孋PU涓婂嵈浠涔堥兘鏀朵笉鍒? 榪欎簨鎯呰椾簡澶у崐涓笅鍗堬紝鏈鍚庤繕鏄疛effery鍙戠幇鐨勮繖涓棶棰?

鍙傝冩枃绔狅細
KITL瑙f瀽 by Nasiry聽 (http://nasiry.cnblogs.com/archive/2004/09/22/45473.html)



]]>
"Out of Memory" and Required components for ActiveSync http://m.shnenglu.com/milkyway/articles/17670.html鐩告濋吀涓湁鐢?/dc:creator>鐩告濋吀涓湁鐢?/author>Tue, 16 Jan 2007 01:51:00 GMThttp://m.shnenglu.com/milkyway/articles/17670.htmlhttp://m.shnenglu.com/milkyway/comments/17670.htmlhttp://m.shnenglu.com/milkyway/articles/17670.html#Feedback2http://m.shnenglu.com/milkyway/comments/commentRss/17670.htmlhttp://m.shnenglu.com/milkyway/services/trackbacks/17670.html 鏉ヨ嚜 http://www.cnblogs.com/walzer/archive/2006/02/05/325574.html
Author: Walzer
Date:聽聽聽 2005.5.20

鎽樿: WINCE 5.0涓叧浜嶢ctiveSync鐨凞ependence娌℃湁鍋氬ソ錛岃繖鑲畾鏄疢S鐨勪竴澶凚UG銆傛垜浠繀欏繪墜鍔ㄥ湴娣誨姞榪欎簺鐩稿叧鐨勭粍浠訛紙鏈?涓級錛屽惁鍒欏氨浼氬湪鍚姩ActiveSync榪炴帴鏃跺嚭鐜癘ut of Memory鐨勮浜哄尓澶鋒墍鎬濈殑閿欒銆傛枃绔犵殑鏈鍚庣粰鍑轟簡濡備綍鍦ㄦ敞鍐岃〃涓敞鍐屼竴涓猆SB榪炴帴浣滀負ActiveSync榛樿榪炴帴鐨勫仛娉曘?br />
聽聽聽 At first I聽was so puzzled by this problem聽for several聽days. I connected my target to聽PC聽by usb and wana enable ActiveSync, the usb serial function seems work well and聽 repllog.exe is autoloaded. But on the聽target, there jumps out a 聽warning window with the title "Out of Memory", and the descriptions are "Cannot connect to PC. No program memory available. Stop some programs, and try again. If the problem persist, reset your device according to the owner's manual".
聽聽聽聽This platform have聽32MB flash聽 and聽32MB SDRAM. I burn nk.nb0 (20M) into the flash and use XIP, so the memory must be enough for this application. But what's the problem?
聽聽聽 The debug messages are shown below.
0x83f21000: [NOTIFY] HandleSystemEvent 9 none
0x83f21000: [NOTIFY] HandleSystemEvent found repllog.exe for event 9
0x83f21000: [NOTIFY] HandleSystemEvent schedules immediate notify for repllog.exe AppRunAtRs232Detect
0x83f21000: [NOTIFY] SetUserNotification (or replacing 00000000)
0x83f21000: [NOTIFY] SetUserNotification::Setting event semaphore
0x83f21000: [NOTIFY] ProcessDatabase::started at local time 01/01/2003 12:00:42
0x83f24434: NOTIFICATION::NewPacket attempt to exec 0000073e:repllog.exe AppRunAtRs232Detect
0x83d14000: >>> Loading module coredll.dll at address 0x03F40000-0x03FF4000 (RW data at 0x01FFE000-0x01FFF145)
0x83d14000: >>> Loading module ws2.dll at address 0x03BB0000-0x03BC4000 (RW data at 0x01FCD000-0x01FCDB24)
0x83d14000: >>> Loading module winsock.dll at address 0x03BD0000-0x03BD6000 (RW data at 0x01FCF000-0x01FCF08C)
Loaded symbols for 'D:\SOURCE_CODE\WINCE500\PBWORKSPACES\WINDOWTV\RELDIR\WINDOWTV_ARMV4I_DEBUG\WINSOCK.DLL'
0x83d14000: >>> Loading module repllog.exe at address 0x0E010000-0x0E02E000
Loaded symbols for 'D:\SOURCE_CODE\WINCE500\PBWORKSPACES\WINDOWTV\RELDIR\WINDOWTV_ARMV4I_DEBUG\REPLLOG.EXE'
0x83d14000: RLOG: [0x43F24D0E] Started with cmdline: AppRunAtRs232Detect
0x83d14000: AddToProcessInputLocaleTable: Added process to ProcessInputLocale table, hProcess = 0x43D3A242
0x83d14000: RLOG: [0x43F24D0E] Using '`USB' connection
0x83d14000: RLOG: [0x43F24D0E] Welcome to repllog. Port in use: Dccman: 5679; RRA: 5678
0x83d14000: RLOG: [0x43F24D0E] WM_WINDOWREADY
0x83d14000: RLOG: [0x43F24D0E] About to run rapisrv.exe
0x83f24434: [NOTIFY] DeleteUserNotification 0000073e
0x83f24434: [NOTIFY] DeleteUserNotification: 0000073e deleted
0x83e84bb4: >>> Loading module coredll.dll at address 0x03F40000-0x03FF4000 (RW data at 0x01FFE000-0x01FFF145)
0x83e84bb4: >>> Loading module ws2.dll at address 0x03BB0000-0x03BC4000 (RW data at 0x01FCD000-0x01FCDB24)
0x83e84bb4: >>> Loading module winsock.dll at address 0x03BD0000-0x03BD6000 (RW data at 0x01FCF000-0x01FCF08C)
0x83e84bb4: >>> Loading module rapisrv.exe at address 0x10010000-0x10031000
Loaded symbols for 'D:\SOURCE_CODE\WINCE500\PBWORKSPACES\WINDOWTV\RELDIR\WINDOWTV_ARMV4I_DEBUG\RAPISRV.EXE'
0x83e84bb4: AddToProcessInputLocaleTable: Added process to ProcessInputLocale table, hProcess = 0xE3D4A1BE
RpcSrv: Rapi Server running on DeviceType: 2
0x83d14000: RLOG: [0x43F24D0E] Using '`USB' connection
0x83d14000: RLOG: [0x43F24D0E] About to run rnaapp.exe -n -m -e"`USB"
RpcSrv: Winsock Started version 1.1
0x83d01000: >>> Loading module wspm.dll at address 0x03B90000-0x03B97000 (RW data at 0x01FC9000-0x01FC9154)
Loaded symbols for 'D:\SOURCE_CODE\WINCE500\PBWORKSPACES\WINDOWTV\RELDIR\WINDOWTV_ARMV4I_DEBUG\WSPM.DLL'
RpcSrv: SocketBufSize=16384 bytes
0x83d01000: <RPC:RESLIST>聽
0x83d01000: CResList::CResList()
0x83d01928: CreateNewProc failure on rnaapp.exe!
0x83d14000: RLOG: [0x43F24D0E] CreateProcess rnaapp.exe failed. GetLastError: 2

0x83d14000: Grow Gdi handle table from 448 to 512
0x83d14000: DlgMgr: FindDlgItem id 1 returning NULL.
BTW, the source code of rapllog.exe is at private\datasync\apps\conn31\rep\repllog\ . But Microsoft haven't publish these codes yet.
----------------------------------------------------------------------------------------------------------------
In fact, "out of memory" is a fake message. I asked it on the newsgroup and someone tell me they have seen a similar message when missing a required OS component. I聽am聽so sorry to say that, the dependency checks on ActiveSync in WinCE5.0 are not very good, so we have to add them into our OSDesign manually.
The required and relative components聽are:
聽聽(1) Core OS->Applications - End User->ActiveSync->File Sync
聽聽(2) Core OS->Communication Services and Networking->Networking - Wide Area Network (WAN)->Dial Up Networking (RAS/PPP)聽
聽 (3) Core OS->Communication Services and Networking->Networking - Wide Area Network (WAN)->Telephony API (TAPI 2.0)->Unimodem Support
聽 (4) Core OS->Shell and User Interface->User Interface->Network User Interface
----------------------------------------------------------------------------------------------------------------
After the system completely booted, we need to creat a new connection in control pannel -> Dial Up Networking. Select USB direct connection then OK, for example use聽the default name "My Connection". 聽In the other hand, set PC connection to the newly created "My Connection". Now connect the USB cable, and the ActiveSync on desktop will sound a dulcet tune~~~
But these two steps we can聽wirte them into registry before. To take an easy way, I compare the registry on traget device before these settings and after it, and these are the changes:
[HKEY_CURRENT_USER\Comm\RasBook\USB Connection]
"Entry"=hex:\
聽聽聽聽聽 08,02,40,00,00,00,00,00,00,00,00,00,00,00,00,00,f4,db,04,12,d0,77,01,7c,01,\
聽聽聽聽聽 00,00,00,01,00,00,00,01,00,00,00,1c,e3,04,12,0a,00,00,00,74,dc,04,12,01,00,\
聽聽聽聽聽 00,00,18,dc,04,12,68,53,03,00,f0,4b,01,7c,18,dc,04,12,d8,55,03,00,20,dc,04,\
聽聽聽聽聽 12,ca,1b,05,12,00,00,00,00,00,00,00,00,00,00,00,00,f0,4b,01,7c,00,00,00,00,\
聽聽聽聽聽 0a,00,00,00,00,00,00,00,ec,3b,37,03,54,dc,04,12,f0,4b,01,7c,00,1c,1a,00,00,\
聽聽聽聽聽 00,00,00,07,18,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\
聽聽聽聽聽 00,00,b8,dd,04,12,00,00,00,00,f0,aa,00,00,08,00,00,00,00,00,00,00,0a,00,00,\
聽聽聽聽聽 00,00,00,00,00,4c,f7,f6,03,00,00,00,00,6c,02,00,00,00,00,00,00,4a,c0,d7,83,\
聽聽聽聽聽 00,00,00,00,a4,dc,04,12,00,00,00,00,f0,4b,01,7c,01,00,00,00,04,6e,f6,03,b0,\
聽聽聽聽聽 dc,04,12,b8,c5,14,80,38,22,05,00,c0,71,01,7c,38,22,05,00,38,22,05,00,b0,dc,\
聽聽聽聽聽 04,12,c0,71,01,7c,f0,4b,01,7c,01,00,00,00,4a,c0,d7,83,74,dc,04,12,74,dc,04,\
聽聽聽聽聽 12,0a,00,00,00,01,00,00,00,eb,ff,ff,ff,4a,cf,d7,83,00,00,00,00,00,00,00,00,\
聽聽聽聽聽 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,64,00,69,00,72,\
聽聽聽聽聽 00,65,00,63,00,74,00,00,00,04,12,00,00,00,00,00,00,00,00,0a,00,00,00,f0,4b,\
聽聽聽聽聽 01,7c,f0,4b,55,00,53,00,42,00,20,00,43,00,61,00,62,00,6c,00,65,00,3a,00,00,\
聽聽聽聽聽 00,00,00,00,00,a0,6f,fe,80,00,00,00,00,01,00,00,00,0a,00,00,00,02,00,00,00,\
聽聽聽聽聽 00,00,00,00,78,dd,04,12,b4,df,0f,00,d0,77,01,7c,89,01,00,00,00,00,00,00,ca,\
聽聽聽聽聽 1b,05,12,0a,00,00,00,7c,09,f6,03,00,00,00,00,0a,00,00,00,00,00,00,00,0a,00,\
聽聽聽聽聽 00,00,0a,00,00,00,ca,1b,05,12,b0,dd,04,12,b8,af,0f,00,00,ca,2a,0a,81,00,00,\
聽聽聽聽聽 00,ca,1b,05,12,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,ca,2a,0a,\
聽聽聽聽聽 ca,1b,05,12,50,18,00,00,03,00,00,00,05,00,00,00,74,66,2a,0a,df,fd,ff,ff,00,\
聽聽聽聽聽 00,00,00,4a,c0,d7,83,ca,1b,05,12,88,01,00,00,7c,fd,ff,ff,84,02,00,00,94,66,\
聽聽聽聽聽 2a,0a,00,de,04,12,00,00,00,00,0c,de,04,12,0c,de,04,12,04,6e,f6,03,0c,de,04,\
聽聽聽聽聽 12,9c,66,2a,0a,80,12,05,00,a0,5f,01,7c,80,12,05,00,80,12,05,00,0c,de,04,12,\
聽聽聽聽聽 a0,5f,01,7c,80,22,05,00,80,22,05,00,00,00,00,00,44,e0,04,12,18,08,e3,03,00,\
聽聽聽聽聽 00,00,00,d4,e1,e2,03,08,00,00,00,0a,00,00,00,01,00,00,00,01,00,00,00,38,22,\
聽聽聽聽聽 05,00,00,ca,2a,0a,4a,c0,d7,83,ca,1b,05,12,ca,1b,05,00,ca,1b,05,00,0c,00,00,\
聽聽聽聽聽 00,7c,09,f6,03,00,00,00,00,0a,00,00,00,88,de,04,12,cc,f3,f6,03,88,de,04,12,\
聽聽聽聽聽 4c,f7,f6,03,4a,c0,d7,83,4a,c0,d7,83,e4,b9,14,80,4a,c0,d7,83,a8,de,04,12,fc,\
聽聽聽聽聽 5c,08,00,ca,1b,05,12,ac,de,04,12,4a,c0,d7,83,4a,c0,d7,83,00,00,00,00,4a,c0,\
聽聽聽聽聽 d7,83,d6,9a,f9,e3,01,00,00,00,4a,c0,d7,83,00,ff,04,12,f0,4b,01,7c,f0,4b,01,\
聽聽聽聽聽 7c,64,aa,0f,00,4a,cf,d7,83,01,00,00,00,01,00,00,00,00,00,00,00,f4,de,04,12,\
聽聽聽聽聽 58,bf,02,00,00,00,00,00,f0,4b,01,7c,04,df,04,12,b4,5b,08,00,18,df,04,12,28,\
聽聽聽聽聽 df,04,12,10,df,04,12,01,00,00,00,00,00,00,00,ca,1b,05,12,00,00,00,00,00,87,\
聽聽聽聽聽 03,00,d6,9a,f9,e3,0a,00,00,00,00,00,00,00,d0,76,01,7c,00,4b,01,7c,64,aa,0f,\
聽聽聽聽聽 00,ca,1b,05,12,01,00,00,00,0a,00,00,00,00,00,00,00,d0,76,01,7c,01,00,00,00,\
聽聽聽聽聽 01,4b,01,7c,38,df,04,12,01,df,04,12,60,c1,02,00,d0,76,01,7c,01,00,00,00,01,\
聽聽聽聽聽 00,00,00,01,00,00,00,1c,e3,04,12,0a,00,00,00,f4,df,04,12,01,00,00,00,98,df,\
聽聽聽聽聽 04,12,68,53,03,00,f0,4b,01,7c,98,df,04,12,d8,55,03,00,a0,df,04,12,ca,1b,05,\
聽聽聽聽聽 12,00,00,00,00,00,00,00,00,00,00,00,12,00,00,00,00,00,00,00,00,01,00,00,00,\
聽聽聽聽聽 fc,82,cb,03,20,8f,d4,83,a0,6f,fe,80,a0,6f,fe,80,02,00,00,00,00,00,00,12,dc,\
聽聽聽聽聽 df,04,12,bc,0a,12,80,e4,fc,d3,83,01,00,00,00,20,8f,d4,83,a0,6f,fe,80,a0,6f,\
聽聽聽聽聽 fe,80,02,00,00,00,e4,fc,d3,83,a0,e0,04,12,00,00,00,00,20,8f,d4,83,d0,1f,f7,\
聽聽聽聽聽 83,00,00,00,00,00,00,00,00,fc,82,cb,03,00,00,00,00,0f,00,00,00,f0,6a,fe,80,\
聽聽聽聽聽 fc,82,cb,03,20,8f,d4,83,00,00,00,00,00,00,00,00,ec,df,04,12,01,d2,06,00,01,\
聽聽聽聽聽 00,00,00,23,00,00,00,00,00,00,00
[HKEY_CURRENT_USER\ControlPanel\Comm]
聽聽聽 "Cnct"="USB Connection"
I can't understand what聽does the table of hexes mean, but聽it did work well in the registry. So, after the system booted, we can conntect usb cable and enable ActiveSync automatically without any manual settings.


]]>
WinCE涓垝鍒哠torage Memory鍜孭rogram Memory http://m.shnenglu.com/milkyway/articles/17669.html鐩告濋吀涓湁鐢?/dc:creator>鐩告濋吀涓湁鐢?/author>Tue, 16 Jan 2007 01:49:00 GMThttp://m.shnenglu.com/milkyway/articles/17669.htmlhttp://m.shnenglu.com/milkyway/comments/17669.htmlhttp://m.shnenglu.com/milkyway/articles/17669.html#Feedback0http://m.shnenglu.com/milkyway/comments/commentRss/17669.htmlhttp://m.shnenglu.com/milkyway/services/trackbacks/17669.htmlhttp://www.cnblogs.com/walzer/archive/2006/04/21/380851.html

棣栧厛瑙i噴涓嬭繖涓や釜涓滀笢

The RAM on a Windows CE鈥揵ased device is divided into two areas: the object store and the program memory.

The object store resembles a permanent, virtual RAM disk. Data in the object store is retained when you suspend or perform a soft reset operation on the system. Devices typically have a backup power supply for the RAM to preserve data if the main power supply is interrupted temporarily. When operation resumes, the system looks for a previously created object store in RAM and uses it, if one is found. Devices that do not have battery-backed RAM can use the hive-based registry to preserve data during multiple boot processes.

The program memory consists of the remaining RAM. Program memory works like the RAM in personal computers 鈥?it stores the heaps and stacks for the applications that are running.

鎴戞壙璁ゆ垜寰堟噿錛屼笂闈竴孌佃瘽鐨刄RL鏄痬s-help://MS.WindowsCE.500/wcecoreos5/html/wce50conMemoryArchitecture.htm

鍏蜂綋鐨勮緗彲浠ュ湪緋葷粺鍚姩鍚庯紝Control Panel -> System -> Memory 閲岄潰鐪嬪埌銆傞粯璁ょ殑鏄妸鍐呭瓨浜斾簲寮錛屼竴鍗婄粰Storage Memory錛?涓鍗婄粰Program Memory鐢ㄣ傝繖鏍鋒樉鐒舵槸涓嶅悎綆楃殑銆備互64M鐨凴AM涓轟緥, 鍚姩鍚嶴torage Memory 32M, 鑰屽洜涓烘病鏈夌暀鍑虹晫闈㈣鐢ㄦ埛寰閲岄潰鎷蜂笢瑗? 浠諱綍鏃跺檌n use閮戒笉浼氳秴榪?0M; Program Memory涔熸槸32M, 浣嗗惎鍔ㄥ悗灝辯敤鎺?7M, 瀹為檯涓婂簲鐢ㄧ▼搴忓彲鐢ㄧ殑鍐呭瓨鍙湁5M, 涓鏃﹁揪鍒頒簡涓婇檺, 閭d箞姣忓墠榪涗竴姝ラ兘瑕佸緢鑹伴毦鍦板幓閲婃斁鍑犲崄K鍐呭瓨錛岀劧鍚庣敤鎺夛紝鍐嶅幓閲婃斁鍑犲崄K鍐呭瓨錛屽姝ゅ驚鐜紝姝ゆ椂搴旂敤紼嬪簭鐨勮繍琛岄熷害鐙傛參鏃犳瘮.

鍒掑垎鐨勬柟娉曚篃寰堢畝鍗? 鍙笉榪囧彲鑳芥病浜烘敞鎰忓埌鑰屽凡.

璇存槑鍦╩s-help://MS.WindowsCE.500/wceosdev5/html/wce50lrfFSRAMPERCENT.htm聽 鎳掑緱鐪嬭嫳鏂囩殑浜哄氨緇х畫寰涓嬬湅

鍏跺疄璇寸櫧浜嗗氨涓鍙ヨ瘽, 鍦˙SP鐨刢onfig.bib閲?CONFIG 鍖烘坊鍔犺繖涓彉閲?FSRAMPERCENT = 0xXXXXXX, 浣嗘敞鎰忎袱鐐癸紝

(1) 蹇呴』鍐欏湪config.bib鐨凜ONFIG鍖洪噷, 涓嶆槸plagform.bib涓嶆槸config.reg絳夊叾浠栨枃浠惰屾槸config.bib錛屼篃涓嶆槸config.bib鏂囦歡鐨勪換鎰忓湴鏂硅屼竴瀹氳鍦–ONFIG REGION閲?
(2) FSRAMPERCENT榪欎釜鍙橀噺涓瀹氬緱鍐欎負FSRAMPERCENT, 涓嶈兘鍐欐垚FSROMPERCENT涓嶈兘鍐欐垚ILOVEU, 鎴栬呴樋鐚樋鐙椾粈涔堢殑.

鍐欎笅榪欎袱鍙ョ殑鏃跺欐湰浜哄凡緇忔墦寮鏃犳晫鍏夌幆, 鍏嶇柅涓鍒囬浮铔嬪拰瑗跨孩鏌?

FSRAMPERCENT鏄竴涓?byte闀垮害鐨勫崄鍏繘鍒舵暟, 鎴戜滑鐢ㄤ唬鏁板亣璁?FSRAMPERCENT = 0xQXYZ, 鍏朵腑Q,X,Y,Z閮芥槸鍗佸叚榪涘埗鏁?/p>

閭d箞鏈緇堝垝鍒嗙粰Storage Memory鐨勫ぇ灝?=聽 ( Q + X + Y +聽 Z ) / 0x400 * TOTAL_RAM_SIZE

浠ユ枃涓殑渚嬪瓙鏉ョ畻, FSRAMPERCENT=0x10203040, 鍋囪TOTAL_RAM_SIZE=64M, 閭d箞StorageMemory= (0x10 + 0x20 + 0x30 + 0x40) / 0x400 * 64M = 10M.



]]>
RAPI鍒濆鍖栫畻娉曞拰SAMPLE CODEhttp://m.shnenglu.com/milkyway/articles/17667.html鐩告濋吀涓湁鐢?/dc:creator>鐩告濋吀涓湁鐢?/author>Tue, 16 Jan 2007 01:42:00 GMThttp://m.shnenglu.com/milkyway/articles/17667.htmlhttp://m.shnenglu.com/milkyway/comments/17667.htmlhttp://m.shnenglu.com/milkyway/articles/17667.html#Feedback1http://m.shnenglu.com/milkyway/comments/commentRss/17667.htmlhttp://m.shnenglu.com/milkyway/services/trackbacks/17667.htmlhttp://www.cnblogs.com/walzer/archive/2006/02/05/325605.html

浣滆咃細Walzer
鏃ユ湡錛?005.12.12

RAPI鍏ㄥ啓涓篟emote Application Interface, 灝辨槸PC绔皟鐢ㄨ繖緇凙PI, 閫氳繃ActiveSync鏉ユ搷浣淭ARGET绔疻indowsCE浣滀笟. 榪欎釜鍔熻兘浼拌浠ュ悗鍦╓INCE鎴朩IN MOBILE鐨勫簲鐢ㄤ笂浼氱敤鍒拌澶?/p>

鎴戜粖澶╀慨鏀逛簡鍚屼簨鐣欎笅鐨刄pdateboot.exe鐨勪唬鐮? 鏀硅繘钃濈墮璇誨啓鐨勬ā鍧? 榪欎釜鍦版柟鎴戜滑鐢ㄥ埌浜哛API, 鐪嬩竴涓嬩粬浠湪紼嬪簭涓垵濮嬪寲RAPI鐨勫仛娉?/p>

聽HRESULT hRapiResult;
聽hRapiResult = CeRapiInit();
聽if(hRapiResult != S_OK)
聽{
聽聽聽聽 m_ValueEdit.SetWindowText((LPCTSTR)"鍒濆鍖朢API澶辮觸");
聽聽聽聽 return;
聽}

鐪嬭搗鏉ユ槸騫蟲貳鏃犲, 瀹為檯涓婂崟姝ヤ竴涓嬪氨鍙互鍙戠幇榪愯鍒癈eRapiInit()鏃? 紼嬪簭灝盉LOCK鍦ㄨ繖閲屼簡錛屾媧昏蛋涓嶄笅鍘? 騫舵病鏈夎揪鍒奧爄f(hRapiResult != S_OK)鐨勯鏈熺洰鐨? 鎴戞煡浜嗕竴涓婥eRapiInit()鐨勮鏄?

A call to CeRapiInit does not return until the connection is made, an error occurs, or another thread calls CeRapiUninit.

涔熷氨鏄鍍忔垜鐜板湪騫舵病鏈夋妸鏉垮瓙鍜孭C鐩歌繛騫跺惎鍔ˋCTIVE SYNC鏃? 榪欎釜CeRapiInit()鏄偗瀹氳禆鐫涓嶈蛋浜? 紼嬪簭浼氭鍦ㄨ繖閲? (閯欒涓涓嬭皝鍐欑殑浠g爜錛岃繖涓潙濂藉ぇ鍟? 聽鍥犳鎯沖埌浜嗛噸鏂板垱绔嬩釜絳夊緟榪涚▼璋冪敤CeRapiUninit鏉ュ共鎺夊畠. 涓嶈繃榪欐牱鍋氭樉鐒朵笉鍘氶亾, 鍒涚珛榪涚▼闇瑕佸崰鐢ㄦ洿澶氱殑鍐呭瓨. 鎵浠ョ敤浜嗕笂鍙ヨ鏄庣殑涓嬪崐孌?

The CeRapiInitEx function does not block the calling thread. Instead, it uses an event to signal when initialization is complete.

寤虹珛涓簨浠? 鐢╓aitForSingleObject鏉ョ瓑浠? 瓚呮椂灝盉YEBYE浜? 璐$尞鑷繁鍐欑殑濡備笅浠g爜, 浠ュ悗RAPI INIT鍙互鍙傝?br />

BOOL聽RapiInitialzation()
{
聽聽聽聽RAPIINIT聽struRapiInit;聽聽聽
//榪欎釜鏄疌eRapiInitEx鍑芥暟瑕佹眰鐨勫叆鍙e弬鏁?/span>
聽聽聽聽DWORD聽dwWaitResult聽=0;聽聽//絳夊緟鍒濆鍖栧畬鎴愪簨浠剁殑鍙橀噺
聽聽聽聽HRESULT聽hRapiResult聽=聽NULL;聽//CeRapiInitEx鐨勮繑鍥濰ANDLE

聽聽聽聽
if聽(聽m_bRapiInitFlag聽==聽FALSE聽)聽//鍏ㄥ眬鐨勪竴涓狥LAG,濡傛灉鍒濆鍖栬繃灝變笉鍐嶉噸澶嶄簡
聽聽聽聽{
聽聽聽聽聽聽聽聽struRapiInit.cbSize聽
=sizeof(RAPIINIT);聽聽//濉弧璇ョ粨鏋勪綋浠呮湁鐨勪笁涓垚鍛?/span>
聽聽聽聽聽聽聽聽struRapiInit.hrRapiInit聽=聽NULL;聽聽//鏄庣煡鏄緭鍑哄弬鏁頒篃欏烘墜濉竴涓?聽鎴戜互鍓嶅悆榪囦簭,聽鎯婂紦涔嬮笩
聽聽聽聽聽聽聽聽struRapiInit.heRapiInit聽=聽NULL;

聽聽聽聽聽聽聽聽hRapiResult聽
=聽CeRapiInitEx(&struRapiInit);聽聽//鍏抽敭鐐?/span>

聽聽聽聽聽聽聽聽m_ValueEdit.SetWindowText((LPCTSTR)
"Wait聽2聽second聽for聽RapiInit");聽//鍚庨潰2縐掔▼搴忚欏夸竴涓嬩簡,聽寰楀憡璇夌敤鎴?聽聽m_ValutEdit鍜屽璇濇閲屼竴涓狪DC_STATIC鍏寵仈浜?
聽聽聽聽聽聽聽聽dwWaitResult聽=聽WaitForSingleObject(struRapiInit.heRapiInit,聽2000);聽聽//鍏抽敭鐐?/span>

聽聽聽聽聽聽聽聽
if(聽hRapiResult聽==聽S_OK聽&&
聽聽聽聽聽聽聽聽聽聽聽聽struRapiInit.hrRapiInit聽
==聽S_OK聽&&
聽聽聽聽聽聽聽聽聽聽聽聽dwWaitResult聽
!=聽WAIT_TIMEOUT)聽聽聽聽//淇濆畧璧瘋,聽涓変釜榪斿洖鍊奸兘鍒ゆ柇
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽m_bRapiInitFlag聽
=聽TRUE;
聽聽聽聽聽聽聽聽聽聽聽
return聽TRUE;
聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽
else
聽聽聽聽聽聽聽聽{
聽聽聽聽聽聽聽聽聽聽聽聽m_ValueEdit.SetWindowText((LPCTSTR)
"The聽initialization聽of聽RAPI聽falied,聽you聽need聽to聽install聽an聽ActiveSync聽or聽connect聽the聽IPTV聽to聽PC");聽聽聽//涓鑸槸娌¤繛鎺ュ鑷?聽褰撶劧涔熷彲鑳界敤鎴鋒病瑁匒ctiveSync
聽聽聽聽聽聽聽聽聽聽聽return聽FALSE;
聽聽聽聽聽聽聽聽}
聽聽聽聽}
聽聽聽聽
else
聽聽聽聽{
聽聽聽聽聽聽聽聽聽m_bRapiInitFlag聽
=聽TRUE;
聽聽聽聽聽聽聽聽聽
return聽TRUE;
聽聽聽聽}
}


]]>
multi-xip鐨勫疄鐜?http://m.shnenglu.com/milkyway/articles/17664.html鐩告濋吀涓湁鐢?/dc:creator>鐩告濋吀涓湁鐢?/author>Tue, 16 Jan 2007 01:29:00 GMThttp://m.shnenglu.com/milkyway/articles/17664.htmlhttp://m.shnenglu.com/milkyway/comments/17664.htmlhttp://m.shnenglu.com/milkyway/articles/17664.html#Feedback0http://m.shnenglu.com/milkyway/comments/commentRss/17664.htmlhttp://m.shnenglu.com/milkyway/services/trackbacks/17664.htmlhttp://www.cnblogs.com/yakin/archive/2005/07/20/196572.aspx
浣滆? yakin

multi-xip瀹為檯涓婂緢鏈夌敤錛屼絾鏄幇鍦ㄦ湁涓涓負闅劇殑浜嬫儏錛氬氨鏄疧S璧鋒潵涔嬪悗鏃犳硶鍐檉lash錛岃繖涓緢璁╀漢鑻︽伡銆傛墍浠ヨ繖涔熷鑷村崌綰х▼搴忔棤娉曡緗爣蹇椾綅銆傚彧鑳界敤GPIO鍙c?/p>

Multi-xip鐨勫疄鐜幫細
1) Bib鏂囦歡鐨勪慨鏀癸細
聽聽 MEMORY

聽聽聽 RSVD聽聽聽聽 80000000聽 000FF000聽 RESERVED
聽聽聽 ARGS聽聽聽聽 800FF000聽 00001000聽 RESERVED
聽聽聽 NK聽聽聽聽聽聽 9C600000聽 01000000聽聽 RAMIMAGE
聽聽聽 APP聽聽聽聽聽 9D600000聽 00500000聽聽 RAMIMAGE
聽聽聽 CHAIN聽聽聽 9DB00000聽 00002000聽聽 RESERVED
聽聽聽 RAM聽聽聽聽聽 80100000聽 01F00000聽 RAM
聽聽聽 pdwXIPLoc 00000000 9DB00000聽 FIXUPVAR

CONFIG

聽聽聽 AUTOSIZE=ON
聽聽聽 ROM_AUTOSIZE=OFF
聽聽聽 RAM_AUTOSIZE=OFF
聽聽聽 DLLADDR_AUTOSIZE=ON
聽聽聽 XIPSCHAIN=9DB00000
聽聽聽 ROMSTART=9C600000
聽聽聽 ROMWIDTH=32
聽聽聽 ROMSIZE=01600000

聽聽聽 KERNELFIXUPS=ON

2) 鍦∣EMInit鍔犱竴涓繛鎺ュ悇涓猙in鐨勫嚱鏁幫細
void InitRomChain()
{
聽// Added for MultiXIP stuff
聽static聽 ROMChain_t s_pNextRom[MAX_ROM] = {0};
聽DWORD聽 dwRomCount = 0;
聽聽聽 DWORD聽聽聽聽聽聽 dwChainCount = 0;
聽聽聽 DWORD *聽聽聽聽 pdwCurXIP;
聽聽聽 DWORD聽聽聽聽聽聽 dwNumXIPs;
聽聽聽 PXIPCHAIN_ENTRY pChainEntry = NULL;
聽聽聽 if(pdwXIPLoc == NOT_FIXEDUP){
聽聽聽聽聽聽聽 return;聽 // no chain or not fixed up properly
聽聽聽 }
聽聽聽 // set the top bit to mark it as a virtual address
聽聽聽 pdwCurXIP = (DWORD*)(((DWORD)pdwXIPLoc) | 0x80000000);
聽聽聽 // first DWORD is number of XIPs
聽聽聽 dwNumXIPs = (*pdwCurXIP);
聽聽 if(dwNumXIPs > MAX_ROM){
聽聽聽聽聽 OALMSG(TRUE, (L"ERROR: Number of XIPs exceeds MAX\r\n"));
聽聽聽聽聽 //lpWriteDebugStringFunc(TEXT("ERROR: Number of XIPs exceeds MAX\n"));
聽聽聽聽聽 return;
聽聽聽 }
聽聽聽 pChainEntry = (PXIPCHAIN_ENTRY)(pdwCurXIP + 1);
聽聽聽 while(dwChainCount < dwNumXIPs)
聽聽聽 {
聽聽聽聽聽聽聽 if ((pChainEntry->usFlags & ROMXIP_OK_TO_LOAD) &&聽 // flags indicates valid XIP
聽聽聽聽聽聽聽聽聽聽聽 *(LPDWORD)(((DWORD)(pChainEntry->pvAddr)) + ROM_SIGNATURE_OFFSET) == ROM_SIGNATURE)
聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽 s_pNextRom[dwRomCount].pTOC = *(ROMHDR **)(((DWORD)(pChainEntry->pvAddr)) + ROM_SIGNATURE_OFFSET + 4);
聽聽聽聽聽聽聽聽聽聽聽 s_pNextRom[dwRomCount].pNext = NULL;
聽聽聽聽聽聽聽聽聽聽聽 if (dwRomCount != 0)
聽聽聽聽聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 s_pNextRom[dwRomCount-1].pNext = &s_pNextRom[dwRomCount];
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽 else
聽聽聽聽聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 OEMRomChain = s_pNextRom;
聽聽聽聽聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽聽聽聽聽 dwRomCount++;
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 else
聽聽聽聽聽聽聽 {
聽聽聽聽聽聽聽聽聽聽聽 OALMSG(TRUE, (L"Invalid XIP found\r\n"));
聽聽聽聽聽聽聽聽聽聽聽 //lpWriteDebugStringFunc( _T("Invalid XIP found\n") );
聽聽聽聽聽聽聽 }
聽聽聽聽聽聽聽 ++pChainEntry;
聽 dwChainCount++;
聽}
}
聽 榪欐槸浠嶤EPC涓嫹璐濊繃鏉ョ殑銆?/p>


閫氳繃涓婇潰鐨勮緗紝romimage浼氱敓鎴?涓猙in錛宯k.bin錛宎pp.bin錛宑hain.bin錛岃繕鏈変竴涓獂ip.bin錛屾槸涓婇潰涓変釜bin鐨勯泦鍚堜綋銆傛垜浠琩ownload鏄download xip.bin錛岃繖鏍峰氨鍙互瀹炵幇multibin銆傞氳繃璋冭瘯鍙戠幇錛孖nitRomChain灝辨槸鍒╃敤chain.bin鏉ヨ繛鎺ュ悇涓猙in鐨勩?br />榪欐牱鎴戜滑涔熺悊瑙d簡bib鏂囦歡涓繖涓鍙ョ殑鍚箟錛?br />pdwXIPLoc 00000000 9DB00000聽 FIXUPVAR
涔熷氨鏄疐IXUPVAR鐨勫惈涔夈傛垜浠湅鍒板湪浠g爜涓垜浠悓鏍峰畾涔変簡pdwXIPLoc錛岃繖鏍穜omimage鏃訛紝灝卞皢9DB00000璧嬬粰pdwXIPLoc銆傝繖灝辨槸FIXUPVAR鐨勪綔鐢ㄣ傛濡俻TOC涔熸槸鐢眗omimage璧嬪間竴鏍楓?/p>

]]>
CE涓皢PC涓婃寚瀹氭枃浠跺姞鍏K, 騫舵斁鍒扮洰鏍囨満涓婃寚瀹氱洰褰?/title><link>http://m.shnenglu.com/milkyway/articles/17662.html</link><dc:creator>鐩告濋吀涓湁鐢?/dc:creator><author>鐩告濋吀涓湁鐢?/author><pubDate>Tue, 16 Jan 2007 01:14:00 GMT</pubDate><guid>http://m.shnenglu.com/milkyway/articles/17662.html</guid><wfw:comment>http://m.shnenglu.com/milkyway/comments/17662.html</wfw:comment><comments>http://m.shnenglu.com/milkyway/articles/17662.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/milkyway/comments/commentRss/17662.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/milkyway/services/trackbacks/17662.html</trackback:ping><description><![CDATA[鏉ヨ嚜 <a >http://www.cnblogs.com/walzer/archive/2006/02/05/325604.html</a><br /><div id="hvzpftn" class="postbody"><p>浣滆咃細Walzer<br />鏃ユ湡錛?005.9.29<br /><br />浠ヨ繖嬈¤鍔犲叆PC涓婁簨鍏堝仛濂界殑bookmark.htm, 鏀懼埌鏉夸笂DiskOnChip/Documents and Settings/Walzer/ 鐩綍涓嬩負渚?</p><p>棣栧厛鎶奲ookmark.htm鎷瘋礉鍒癷e.bib鐨勫悓綰х洰褰昿ublic\ie\oak\files\涓嬶紝鐒跺悗鍦╞ib閲屽寘鍚?br />bookmark.htm聽聽聽 $(_FLATRELEASEDIR)\bookmark.htm聽聽聽聽聽聽聽聽聽聽聽聽 NK SH<br />鍗蟲妸璇ユ枃浠舵斁鍒癗K閲岋紝DOWNLOAD涓嬪幓鍚庢槸緋葷粺闅愯棌鏂囦歡銆傜敱浜庢垜浠敤浜哅ulti-Bin鐨勫仛娉曪紝鎵浠ヨ繕寰楀湪PLATFORM涓嬬殑xip.cfg閲屾寚瀹氭柊鍔犲叆鏂囦歡鏀懼埌鍝釜BIN閲岄潰.</p><p>榪欎釜鍦扮悆浜洪兘鐭ラ亾浜嗐傞噸鐐規槸涓嬮潰鐨勫浣曟妸鏂囦歡鍦―OWNLOAD鍚庢斁鍒版寚瀹氱洰褰曢噷銆?/p><p>鎵懼埌ie.dat, 閲岄潰鐨勮娉曟牸寮忓弬鑰僲s-help://MS.WindowsCE.500/wceosdev5/html/wce50conFileSystemFile.htm<br />鎴戝湪閲岄潰鍔犱簡涓孌?br />Directory("\DiskOnChip"):-Directory("Documents and Settings")<br />Directory("\DiskOnChip\Documents and Settings"):-Directory("Walzer")<br />Directory("\DiskOnChip\Documents and Settings\Amoi"):-File("bookmark.htm","\Windows\bookmark.htm")<br />鍏堝緩绔嬩袱灞傚瓙鐩綍錛岀劧鍚庢妸ROM閲岄潰鐨刡ookmark.htm鎷瘋礉鍒扮洰褰曢噷銆傚煎緱涓鎻愮殑鏄涓夎鐨勬渶鍚庝竴涓弬閲忥紝\Windows\bookmark.htm 涓嬭澆鍚庣殑鏂囦歡閮藉湪ROM閲岄潰錛孿windows灝辨槸鎸嘡OM閲岀殑鏂囦歡銆?/p><p>綾諱技鐨刣at鏂囦歡榪樺緢澶氾紝SYSGEN鐨勬椂鍊欏氨鍦≒BWorkspace鐨勭浉搴擱ELEASE鐩綍閲岃儨鍒╀細甯? 鍚堝茍涓篿nitobj.tmp, 榪欎釜鏂囦歡鍜屽悎騫跺墠闆舵暎鐨勯兘涓篈SCII鐮侊紝鐒跺悗瑕佽漿鎴怳NICODE鐢熸垚initobj.dat錛屾渶鍚庢垜浠彲浠ョ湅鍒癱e.bib閲屽寘鍚簡initobj.dat榪欎釜鏂囦歡錛屽茍鍏ユ渶緇堢敓鎴愮殑BIN鏂囦歡閲屻?/p></div><img src ="http://m.shnenglu.com/milkyway/aggbug/17662.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/milkyway/" target="_blank">鐩告濋吀涓湁鐢?/a> 2007-01-16 09:14 <a href="http://m.shnenglu.com/milkyway/articles/17662.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>濡備綍涓篧in CE緋葷粺寮鍙戝簲鐢ㄧ▼搴?/title><link>http://m.shnenglu.com/milkyway/articles/17589.html</link><dc:creator>鐩告濋吀涓湁鐢?/dc:creator><author>鐩告濋吀涓湁鐢?/author><pubDate>Sat, 13 Jan 2007 08:34:00 GMT</pubDate><guid>http://m.shnenglu.com/milkyway/articles/17589.html</guid><wfw:comment>http://m.shnenglu.com/milkyway/comments/17589.html</wfw:comment><comments>http://m.shnenglu.com/milkyway/articles/17589.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/milkyway/comments/commentRss/17589.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/milkyway/services/trackbacks/17589.html</trackback:ping><description><![CDATA[ <p class="MsoNormal"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt">To write applications for Windows CE, Microsoft offers a rich set of languages for creating managed (.NET) or native applications. You can use Visual Studio .NET to write managed code or use eMbedded Visual C ++ to write native code.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span> </p> <p class="MsoNormal"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt"> <o:p>聽</o:p> </span> </p> <p class="MsoNormal"> <span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt"> <span style="mso-tab-count: 1">聽聽聽 </span> </span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">鍦ㄤ粈涔堟儏鍐典笅搴旇鐢?/span> <span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">Visual Studio .NET</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">鑰屼笉鏄?/span> <span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">eMbedded Visual C++</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">鏉ヤ負</span> <span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">Win CE</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">緋葷粺寮鍙戝簲鐢ㄧ▼搴忥紵</span> <span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt">The type of application that you want to create will dictate the choice between native and managed code (.NET). When performance and control are the highest priorities, developers should turn to eMbedded Visual C++ or native code. When a consistent programming model and time-to-market are the primary considerations, the advantages offered by Visual Studio .NET are unparalleled.<o:p></o:p></span> </p> <p class="MsoNormal"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt"> <o:p>聽</o:p> </span> </p> <p class="MsoNormal"> <span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">.NET Compact Framework</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">搴旂敤紼嬪簭鐨勮繍琛屾ц兘鏄惁鍜?/span> <span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">eMbedded Visual C++</span> <span style="FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt">搴旂敤紼嬪簭涓鏍鳳紵</span> <span lang="EN-US" style="FONT-FAMILY: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt; mso-bidi-font-size: 10.5pt"> <o:p> </o:p> </span> </p> <p class="MsoNormal"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt">In most cases, applications that you write with eMbedded Visual C++ will run faster than those that you write by using Microsoft Visual Basic .NET or Microsoft Visual C# .NET. However, for computationally-intensive portions of an application, you will see a substantial improvement of your Visual Basic .NET applications over their eMbedded Visual Basic .NET equivalents.<o:p></o:p></span> </p> <p class="MsoNormal"> <span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt"> <o:p>聽</o:p> </span> </p> <img src ="http://m.shnenglu.com/milkyway/aggbug/17589.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/milkyway/" target="_blank">鐩告濋吀涓湁鐢?/a> 2007-01-13 16:34 <a href="http://m.shnenglu.com/milkyway/articles/17589.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Pocket PC鐨勫簲鐢ㄧ▼搴忔槸鍚﹀彲浠ョ洿鎺ュ湪Windows CE璁懼涓婅繍琛?/title><link>http://m.shnenglu.com/milkyway/articles/17588.html</link><dc:creator>鐩告濋吀涓湁鐢?/dc:creator><author>鐩告濋吀涓湁鐢?/author><pubDate>Sat, 13 Jan 2007 08:32:00 GMT</pubDate><guid>http://m.shnenglu.com/milkyway/articles/17588.html</guid><wfw:comment>http://m.shnenglu.com/milkyway/comments/17588.html</wfw:comment><comments>http://m.shnenglu.com/milkyway/articles/17588.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/milkyway/comments/commentRss/17588.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/milkyway/services/trackbacks/17588.html</trackback:ping><description><![CDATA[鏉ヨ嚜<a >http://www.advantech.com.cn/microsoft/shownews.asp?id=79</a><br /><br /><p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt">Running an application natively refers to running an application without recompiling it for a different environment. Windows CE .NET 4.2 and Windows CE 5.0 devices can run Pocket PC applications if both of the following are true: <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?><o:p></o:p></span></p><p class="MsoNormal"><span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt">鈥?/span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">聽聽聽聽聽 </span>The application is designed for the same CPU architecture <o:p></o:p></span></p><p class="MsoNormal"><span style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: 瀹嬩綋; mso-ascii-font-family: Verdana; mso-hansi-font-family: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt">鈥?/span><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt"><span style="mso-tab-count: 1">聽聽聽聽聽 </span>The application calls the same API set as the Pocket PC 2003 SDK. Windows CE .NET 4.2 and Windows CE 5.0 support the same SDK APIs from CESHELL and AYGSHELL. <o:p></o:p></span></p><p class="MsoNormal"><span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: #666666; FONT-FAMILY: Verdana; mso-bidi-font-family: 瀹嬩綋; mso-font-kerning: 0pt">For more information, visit the Windows CE Application Development page.<o:p></o:p></span></p><img src ="http://m.shnenglu.com/milkyway/aggbug/17588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/milkyway/" target="_blank">鐩告濋吀涓湁鐢?/a> 2007-01-13 16:32 <a href="http://m.shnenglu.com/milkyway/articles/17588.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title> 鎬庢牱娣誨姞椹卞姩鍒癈E鐨凜ATALOG涓幓http://m.shnenglu.com/milkyway/articles/17247.html鐩告濋吀涓湁鐢?/dc:creator>鐩告濋吀涓湁鐢?/author>Thu, 04 Jan 2007 08:18:00 GMThttp://m.shnenglu.com/milkyway/articles/17247.htmlhttp://m.shnenglu.com/milkyway/comments/17247.htmlhttp://m.shnenglu.com/milkyway/articles/17247.html#Feedback0http://m.shnenglu.com/milkyway/comments/commentRss/17247.htmlhttp://m.shnenglu.com/milkyway/services/trackbacks/17247.htmltry:
1,create a new catalog,and save it to WINCE PLATFORM BUILDER\4.00\cepc\cec\ directory.
2,create a new feature group for the catalog,define the "name" and "group".
3,add a new feature for the feature group.define the "name" and "locale:0409".
4,add some new build method for the feature,select from "step".
5,add a new action for the build method.
6,if u have *.bib file,and a new bib file and location the bib file to the NK.BIN whatever bib section defined to modules or files
7,save it and add it to catalog,can use pb or cec edit.
the important is:
select the correct build method to using and the correct action to using.
build method include:PreSYSGEN,SYSGEN,PostSYSGEN,PreBSP,BSP,PostBSP,PreBuildRel,BuildRel,PostBuildRel,PreMakeImg,MakeImg,PostMakeImg.
action include:Build,Copy,Custom,Environment,Source Browse.
if the drvier have source file(*.c,*.h),must select BSP and Source Browse.
if the driver have no source file and have *.dll file please select any build method and "Copy" action.


]]>
濡備綍闃叉Windows CE .NET鐩楃敤COM1绔彛http://m.shnenglu.com/milkyway/articles/17246.html鐩告濋吀涓湁鐢?/dc:creator>鐩告濋吀涓湁鐢?/author>Thu, 04 Jan 2007 08:01:00 GMThttp://m.shnenglu.com/milkyway/articles/17246.htmlhttp://m.shnenglu.com/milkyway/comments/17246.htmlhttp://m.shnenglu.com/milkyway/articles/17246.html#Feedback0http://m.shnenglu.com/milkyway/comments/commentRss/17246.htmlhttp://m.shnenglu.com/milkyway/services/trackbacks/17246.html 鍦ㄧ己鐪佺姸鎬佷笅錛學indows CE .NET灝咰OM1绔彛鐢ㄤ簬璋冭瘯鐩殑銆傚鏋滄偍鍦ㄨ嚜宸辯殑璁懼涓婅繕鎷ユ湁鍏跺畠COM绔彛錛岄偅涔堬紝Windows CE .NET鍒欎細灝嗗畠浠垝褰掑簲鐢ㄧ▼搴忎嬌鐢紙鐗╃悊鎰忎箟涓婄殑COM2绔彛灝嗘垚涓洪昏緫鎰忎箟涓婄殑COM1绔彛錛屼緷姝ょ被鎺級銆傜劧鑰岋紝鏌愪簺鐗瑰畾欏圭洰鍙兘闇瑕佸皢鍏ㄩ儴COM绔彛鍒掑綊搴旂敤紼嬪簭浣跨敤銆?

涓烘錛岃閬靛驚涓嬪垪澶勭悊姝ラ錛?

閫氳繃淇敼OEMInitDebugSerial()錛堝彲鍦∣AL鐨刣ebug.c鏂囦歡涓壘鍒幫級鍑芥暟鐨勬柟寮忓憡鐭ユ搷浣滅郴緇熶笉瑕佸皢COM绔彛鐢ㄤ簬璋冭瘯鐩殑
if ( ! pBootArgs->ucBaudDivisor ) {
pBootArgs->ucBaudDevisor = 6; // Default to 19.2 if nothing specified.
}

pBootArgs->ucComPort = 0; // ADD THIS LINE

switch ( pBootArgs->ucComPort ) {

閫氳繃瀵規敞鍐岃〃鏂囦歡platform.reg鍔犱互淇敼鏉ヨ皟鏁碈OM绔彛鏄犲皠鍏崇郴銆?
涓句緥鏉ヨ錛屽皢鐜版湁娉ㄥ唽琛ㄩ」錛?
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial]
"SysIntr"=dword:13 ; NOTE: This is physical COM2 (subtract 10 for IRQ)
"IoBase"=dword:02F8 ; NOTE: This is physical COM2
...
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial2]
"SysIntr"=dword:14 ; NOTE: This is physical COM3 (subtract 10 for IRQ)
"IoBase"=dword:03E8 ; NOTE: This is physical COM3
...

淇敼涓猴細

[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial]
"SysIntr"=dword:14 ; NOTE: This is physical COM1 (subtract 10 for IRQ)
"IoBase"=dword:03F8 ; NOTE: This is physical COM1
...
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\Serial2]
"SysIntr"=dword:13 ; NOTE: This is physical COM2 (subtract 10 for IRQ)
"IoBase"=dword:02F8 ; NOTE: This is physical COM2
...

璇存槑錛氭偍鎵鐪嬪埌鐨勭粨鏋滃彲鑳芥湁鎵涓嶅悓銆傚鏋滄偍鐨勭郴緇熼拡瀵笴OM绔彛浣跨敤浜嗕笉鍚岀殑IoBase/IRQ璁劇疆錛屽垯璇峰娉ㄥ唽琛ㄦ枃浠秔latform.reg榪涜閫傚綋閰嶇疆銆?

鍙︿竴縐嶆浛浠f柟娉曞氨鏄湪鎮ㄧ殑BIOS涓COM绔彛鐨処oBase/IRQ璁劇疆榪涜淇敼銆俉indows CE .NET宸插氨灝?F8/4錛堝吀鍨嬬殑COM1錛夌暀浣滆嚜鐢ㄨ繘琛屼簡紜ц瀹氾紙閽堝CEPC錛夈備婦渚嬫潵璇達紝濡傛灉鎮ㄥ皢姝ょ被璁劇疆鎸囨淳緇機OM4錛岄偅涔堬紝Windows CE .NET璋冭瘯淇℃伅渚夸細璺敱鑷崇墿鐞嗙鍙c?/font>


]]>
濡備綍鍦╓indows CE.NET涓嬩嬌鐢ㄥぇ浜?56MB鍐呭瓨http://m.shnenglu.com/milkyway/articles/17240.html鐩告濋吀涓湁鐢?/dc:creator>鐩告濋吀涓湁鐢?/author>Thu, 04 Jan 2007 07:11:00 GMThttp://m.shnenglu.com/milkyway/articles/17240.htmlhttp://m.shnenglu.com/milkyway/comments/17240.htmlhttp://m.shnenglu.com/milkyway/articles/17240.html#Feedback0http://m.shnenglu.com/milkyway/comments/commentRss/17240.htmlhttp://m.shnenglu.com/milkyway/services/trackbacks/17240.html棣栧厛錛屼綘蹇呴』瀹夎Windows CE .NET Platform Builder 4.0錛堜互涓嬬畝縐癙B4錛?鍋囪浣犲畨瑁呯殑Windows CE.NET浣嶄簬D:\WINCE鐩綍涓嬶紝閭d箞錛岄鍏堟壘鍒版枃浠秓eminit.asm,浣嶄簬D:\Wince\Public\Common\Oak\Csp\I486\Oal,榪欎釜鏂囦歡鏄彁渚涚粰OEM鍘傚晢鍋氫竴浜涚壒瀹氱殑閰嶇疆鐨勩?
鎵撳紑oeminit.asm鏂囦歡,鐒跺悗鎵懼埌鈥淿OEMAddressTable:鈥濓紝_OEMAddressTable鏄竴涓潪甯稿叧閿殑鍐呭瓨鏄犲皠鎻忚堪琛紝涓昏鎻忚堪鐗╃悊鍐呭瓨鍜岃櫄鎷熷唴瀛樹箣闂寸殑鏄犲皠錛岃〃鐨勬瘡涓鏉$洰鏈?涓狣WORD,渚濇鏄紙VA錛孭A錛宑bSize錛夛紝鍏朵腑VA鏄櫄鎷熷唴瀛樼殑寮濮嬪湴鍧錛屼竴鑸負80000000h,PA鏄墿鐞嗗唴瀛樼殑寮濮嬪湴鍧錛屼竴鑸負0錛宑bSize灝辨槸CE鍐呮牳鏀寔鐗╃悊鍐呭瓨鐨勫ぇ灝忥紝榪欎釜DWORD鏄垜浠渶鏈鍏沖績鐨?鍏跺崟浣嶆槸BYTE銆傞渶瑕佹敞鎰忕殑鏄紝cbSize,涓瀹氳鏄?M Byte鐨勫嶆暟錛屽洜涓篧indows CE.NET鍐呮牳涓嫻嬪唴瀛樺ぇ灝忥紝鏄互4M Byte涓哄崟浣嶆潵媯嫻嬬殑銆俢bSize緋葷粺榛樿涓?4000000h,鍏跺ぇ灝忎負64M,鎴戜滑鍙互灝嗗叾淇敼涓?0000000h,灝卞彲浠ユ敮鎸?56M鍐呭瓨浜嗭紝褰撶劧錛屼綘濡傛灉鎯蟲敮鎸佹洿澶х殑鍐呭瓨錛屼篃鍙互澧炲ぇcbSize,鍙鏄?M鐨勫嶆暟鍗沖彲銆?
鍙﹀闇瑕佷慨鏀逛竴涓枃浠舵槸錛氾紝鎵撳紑pc.h,鏌ユ壘鍒幫細
#define CEPC_EXTRA_RAM_START 0x81C00000 // 28 MB is default top of RAM for auto-detect錛岃繖閲岃瀹歐indows CE.NET鍐呮牳媯嫻嬪唴瀛樼殑寮濮嬪湴鍧錛岄粯璁や粠28M Byte寮濮嬨?
#define CEPC_EXTRA_RAM_SIZE 0x02400000 // Potentially add another 36 MB 榪欓噷瑙勫畾浜嗗唴鏍鎬腑鎺㈡祴鍐呭瓨瀹歸噺鐨勬渶澶у昂瀵革紝0x02400000 ,琛ㄧず鏈澶ф帰嫻?6M錛岃繖鏍風殑璇濓紝28MB+36MB姝eソ鏄?4MB銆?
鎴戜滑闇瑕佹敮鎸?56MB鍐呭瓨錛屽彧闇瑕佷慨鏀笴EPC_EXTRA_RAM_SIZE鍗沖彲錛屽皢鍏舵敼淇敼錛?
#define CEPC_EXTRA_RAM_SIZE 0x02400000+0x0C000000 // Potentially add another 36 + 128 + 64MB
淇敼涓轟笂榪頒袱涓枃浠跺悗錛岄渶瑕侀噸鏂扮紪璇戠郴緇熷唴鏍革紝鎵撳紑PB4.0,鎵撳紑Build->Open Build Release Directory,榪涘叆涓涓狣OS鎿嶄綔鐣岄潰,鐒跺悗榪涘叆D:\Wince\Public\Common\Oak\Csp\I486\鐩綍涓嬶紝鎵ц鈥淏uild 鈥揷fs鈥?閲嶆柊緙栬瘧鍐呮牳,鐒跺悗閲嶆柊寤虹珛涓涓柊鐨凱latform錛岀紪璇戝悗鍗沖彲銆?/font>


]]>
涓茶閫氳 http://m.shnenglu.com/milkyway/articles/17239.html鐩告濋吀涓湁鐢?/dc:creator>鐩告濋吀涓湁鐢?/author>Thu, 04 Jan 2007 07:09:00 GMThttp://m.shnenglu.com/milkyway/articles/17239.htmlhttp://m.shnenglu.com/milkyway/comments/17239.htmlhttp://m.shnenglu.com/milkyway/articles/17239.html#Feedback0http://m.shnenglu.com/milkyway/comments/commentRss/17239.htmlhttp://m.shnenglu.com/milkyway/services/trackbacks/17239.html

涓茶閫氳瀹為檯涓婂皢琚墍鏈夌殑Windows CE璁懼鎵鏀寔錛屽湪紜歡姘村鉤涓婏紝閫氳繃鐢電紗鍜岀孩澶栦紶閫佸櫒榪涜涓茶閫氳鏄緢鏅氱殑銆傝皟鍒惰В璋冨櫒涔熸敮鎸佷覆琛岄氳銆?

1.PC鍜學indows CE鐨勯氫俊緋葷粺

Win32鐨勯氫俊緋葷粺 Win32鎻愪緵緇欑敤鎴蜂竴涓ā鍧楀寲鐨?2浣嶇殑淇濇姢妯″紡鐨勯氫俊緋葷粺銆傚湪Win32涓紝鍚勭閫氫俊璧勬簮鐨勫嚱鏁板仛浜嗗緢澶х殑鏀硅繘鍜屾爣鍑嗗寲錛屼嬌寰楀畠浠殑鎿嶄綔灝卞鍚屾枃浠剁殑鎿嶄綔涓鏍楓?

鍦ㄤ覆鍙h鍐欐搷浣滀腑錛學in32寮曞叆浜嗚秴鏃舵蹇點傝秴鏃剁洿鎺ュ獎鍝嶈鍜屽啓鐨勬搷浣滆涓恒傚綋瓚呰繃棰勫厛璁懼畾鐨勮秴鏃墮棿闅旀椂錛孯eadFile銆乄riteFile鎿嶄綔浠嶆湭緇撴潫錛岄偅涔堝皢鏃犳潯浠剁粨鏉熻鍐欐搷浣滐紝鑰屼笉璁烘槸鍚﹀凡璇誨嚭鎴栧啓鍏ユ寚瀹氭暟閲忕殑瀛楃銆?

Windows CE鐨勯氫俊緋葷粺 Windows CE灝嗛┍鍔ㄧ▼搴忓垎涓轟袱縐嶏細鏈湴璁懼椹卞姩紼嬪簭鍜屾祦璁懼椹卞姩紼嬪簭銆傛湰鍦拌澶囬┍鍔ㄧ▼搴忥紝涔熺О涓衡滃唴緗┍鍔ㄧ▼搴忊濓紝榪欎簺璁懼椹卞姩紼嬪簭鏄竴浜涚‖浠舵墍蹇呴渶鐨勶紝鏄敱鍘熷璁懼鍒墮犲晢鍒涘緩鐨勶紝鐢ㄤ互椹卞姩濡傞敭鐩樸佽Е鎽稿睆銆侀煶棰戣澶囩瓑錛屽線寰鍦ㄨ澶囧敭鍑哄悗灝變笉浼氬啀鏇存崲銆傚彟涓鏂歸潰錛屾祦鎺ュ彛璁懼椹卞姩紼嬪簭錛堟寚鍙畨瑁呯殑鍚姩紼嬪簭錛夊彲浠ョ敱絎笁鏂圭敓浜у晢鎻愪緵錛屼互鏀寔娣誨姞鍒扮郴緇熶腑鐨勮澶囥俉indows CE涓嬬殑璁懼椹卞姩紼嬪簭鍦ㄤ笌搴旂敤紼嬪簭鐩稿悓鐨勪繚鎶ょ駭涓婂伐浣溿傚綋緋葷粺鍚姩鏃訛紝澶у鏁伴┍鍔ㄧ▼搴忔槸鐢辮澶囩鐞嗚繘紼嬶紙DEVICE.EXE錛夊姞杞界殑錛屾墍鏈夌殑榪欎簺椹卞姩紼嬪簭灝嗗叡浜悓涓涓繘紼嬪湴鍧絀洪棿銆?

鏈湴璁懼椹卞姩紼嬪簭涓鑸兘琚揣绱у湴闄愬埗鍦╓indows CE鐨勬搷浣滅郴緇熶腑錛屽線寰鍦ㄨ澶囧敭鍑哄悗灝變笉浼氬啀鏇存崲銆傚洜涓篧indows CE娌℃湁鍍廔SA鎴朠CI閭f牱鐨勭敤浜庨檮鍔犳彃鍗$殑鎬葷嚎錛岄檮鍔犵殑紜歡閫氬父鏄氳繃PCMCIA鎴栤滃皬鍨嬪揩闂Ы鈥濆畨瑁呯殑錛屼緥濡備覆鍙?鏄氳繃PCMCIA鍗″疄鐜扮殑銆傝瀵熸敞鍐岃〃涓殑HKEY_LOCAL_MACHINE涓嬬殑\Drivers\Active閿腑鐨勫唴瀹癸紝鍙互浜嗚В鍦╓indows CE涓姞杞戒簡浠涔堥┍鍔ㄧ▼搴忋傘

閫氫俊榪囩▼ 鍖呮嫭錛?錛夋墦寮閫氫俊璧勬簮銆傚湪榪涚▼浣跨敤涓插彛涔嬪墠錛岄鍏堝簲浣跨敤CreateFile鍑芥暟鎵撳紑閫氫俊璧勬簮錛岃繑鍥炰竴涓爣璇嗚璧勬簮鐨勫彞鏌勩傚湪CreateFile鍑芥暟鎵撳紑涓插彛閫氫俊璧勬簮鏃訛紝緋葷粺灝嗘牴鎹笂嬈℃墦寮璧勬簮鏃剁殑鏁板煎垵濮嬪寲鍜岄厤緗祫婧愶紱錛?錛夎鍐欎覆鍙h祫婧愩傞氳繃ReadFile鍜學riteFile鍑芥暟鏉ヨ鍐欎覆鍙c傝鍜屽啓鐨勮秴鏃舵椂闂寸敱SetCommTimeouts鍑芥暟璁劇疆錛涳紙3錛夊叧闂氫俊璧勬簮銆傚湪浣跨敤閫氫俊璧勬簮緇撴潫鍚庯紝搴旇皟鐢–loseHandle鍑芥暟鏉ュ叧闂氫俊鍙ユ焺錛岄噴鏀捐祫婧愩?

鍩烘湰鐨勪覆琛岄氫俊緙栫▼ 涓茶璁懼琚涓虹敤浜庢墦寮銆佸叧闂佽鍜屽啓涓插彛鐨勫父瑙勩佸彲瀹夎鐨勬祦璁懼銆俉in32 API鎻愪緵浜嗕竴緇勯氫俊鍑芥暟錛學indows CE鏀寔浜嗗叾涓殑澶у鏁伴氫俊鍑芥暟銆?

鎵撳紑鍜屽叧闂覆琛岀鍙o細鍦ㄦ墍鏈夌殑嫻佽澶囬兘鍙互浣跨敤CreateFile鏉ユ墦寮涓茶绔彛璁懼銆備竴鑸殑璋冪敤鏂規硶濡備笅錛?

hSer=CreateFile(TEXT(鈥淐OM1:鈥?,

GENERIC_READ|GENERIC_WRITE,

0,

NULL,

OPEN_EXISTING,

0,

NULL);



鐢變簬Windows CE涓嶆敮鎸佽澶囩殑閲嶅彔I/O錛屽洜姝や笉鑳戒紶閫扚ILE_FLAG_OVERLAPPED鏍囧織銆傚綋涓嶆垚鍔熸椂錛岃繑鍥炲彞鏌処NVALILD_HANDLE_VALUE錛屽弽涔嬭繑鍥炴墦寮鐨勪覆琛岀鍙e彞鏌勩?

璋冪敤CloseHandle鍙互鍏抽棴涓涓覆琛岀鍙?

CloseHandle(hSer);

璇誨啓涓茶绔彛錛氬彲浠ヤ嬌鐢≧eadFile鍜學riteFile鏉ヨ鍐欎覆琛岀鍙c備粠涓插彛璇誨嚭鏁版嵁鍙渶濡備笅璋冪敤錛?

int rc;

DWORD cBytes;

BYTE ch;

rc=ReadFile(hSer,&ch,1,&cBytes,NULL);

璋冪敤鎴愬姛錛屽垯鍙橀噺ch灝嗚鍏ヤ竴涓瓧鑺傦紝cBytes灝嗚璁劇疆涓鴻鍙栫殑瀛楄妭鐨勬暟閲忋?

浠庝覆鍙e啓鍏ユ暟鎹彧闇濡備笅璋冪敤錛?

int rc;

DWORD cBytes;

BYTE ch;

ch=TEXT(鈥楢鈥?;

rc=WriteFile(hSer , &ch , 1 , &cBytes , NULL );

涓婇潰鐨勪唬鐮佸皢瀛楁瘝A鍐欏叆宸茬粡鎵撳紑鐨勭鍙o紝鎴愬姛鐨勮瘽錛孯eadFile鍜學riteFile閮藉皢榪斿洖TRUE銆?


http://palmheart.net/modules.php?op=modload&name=Sections&file=index&req=viewarticle&artid=154

姣忎竴涓覆琛岃澶囬兘鍖歸厤鏈変竴涓狢OM鍙o紝渚嬪鈥淐OM1鈥濄俉indows CE涓烘墦寮涓插彛鍜岀鐞嗘帴鏀惰澶囦笂鐨勮繛鎺ユ彁渚涗簡涓涓狝PI銆備竴鏃﹁繛鎺ユ垚鍔燂紝灝嗙敤鐩稿悓鐨勫嚱鏁拌繘琛屾暟鎹紶閫侊紝榪欎簺鍑芥暟鐢ㄤ互璇諱竴涓枃浠舵垨鑰呭啓涓涓枃浠躲傛暟鎹彧鏄畝鍗曠殑浠庝竴涓澶囦紶閫佸埌鍙︿竴涓澶囥備笉鏀寔鍚屾鍜屽紓姝/O銆?/font>


]]>WinCE涓嬬洿鎺ュ惎鍔ㄨ嚜宸卞簲鐢ㄧ▼搴忕殑鏂規硶http://m.shnenglu.com/milkyway/articles/17170.html鐩告濋吀涓湁鐢?/dc:creator>鐩告濋吀涓湁鐢?/author>Wed, 03 Jan 2007 02:20:00 GMThttp://m.shnenglu.com/milkyway/articles/17170.htmlhttp://m.shnenglu.com/milkyway/comments/17170.htmlhttp://m.shnenglu.com/milkyway/articles/17170.html#Feedback1http://m.shnenglu.com/milkyway/comments/commentRss/17170.htmlhttp://m.shnenglu.com/milkyway/services/trackbacks/17170.htmlhttp://jkflyfox.spaces.live.com/?_c11_blogpart_blogpart=blogview&_c=blogpart&partqs=cat%3d%25e7%25a8%258b%25e5%25ba%258f%25e6%258a%2580%25e5%25b7%25a7

鍏跺疄璁╀竴涓▼搴忓湪wince閲屽惎鍔ㄥ拰windows閲屽樊涓嶅錛岀洿鎺ヨ緗叾涓哄惎鍔ㄩ」錛岃繖涓湁鍑犱釜鏂規硶銆備竴涓氨鏄埗浣滀竴涓揩鎹鋒柟寮忥紝鎸囧悜鎴戜滑鐨勫簲鐢ㄧ▼搴忓app.exe錛岀劧鍚庡皢蹇嵎鏂瑰紡鏀懼埌\windows\startup涓嬮潰銆?
聽聽聽 姝ラ濡備笅錛氾紙鍋囪app.exe宸茬粡鎷瘋礉鍒皐indows涓嬮潰錛壜?br />聽聽聽聽1 鍦╬b涓垱寤轟竴涓枃浠訛紝鏂囦歡綾誨瀷閫塼xt錛岀劧鍚庡懡鍚嶄負.lnk鍚庣紑錛屽亣璁懼悕瀛椾負test.lnk聽
聽聽聽聽2 緙栬緫鍏跺唴瀹逛負: 16#\windows\app.exe銆傚娉細鍓嶉潰鐨?6鏄? 鍚庨潰鎵鏈夊瓧絎︾殑鎬誨拰錛屽寘鎷┖鏍箋俉ince鐨勫府鍔╂枃妗d笂璇磋繖涔堝畾涔夊氨琛岋紝浣嗘槸鎴戝皾璇曞悗錛屾渶鍚巇own鍒扮洰鏍囨満涓婇潰鏃舵彁紺烘壘涓嶅埌鏂囦歡錛屽湪wince閲屾煡鐪嬭繖涔堝垱寤虹殑test.lnk鐨勫睘鎬э紝鍙戠幇鍏舵寚鍚慭windows\app.exe鍚庨潰榪樻湁涓や釜鏂規錛屽洜姝や笉瀵癸紝鎴戠殑瑙e喅鏂規硶鏄慨鏀箃est.lnk鐨勫唴瀹逛負16#"\Windows\app.exe"聽
聽聽聽聽3 緙栬緫濂絣nk鏂囦歡鍐呭鍚庡湪pb涓慨鏀筽roject.bib銆傚湪files孌靛悗闈㈡坊鍔犱笅闈竴琛岋細(鍜屾坊鍔犲埆鐨勬枃浠跺埌image涓被浼鹼紝瑙佹垜鐨勩奧inCE涓浣曞悜image涓坊鍔犳枃浠躲嬶紝涔熻鍦╬b鐨刦latform鑿滃崟鐨剆etting涓嬫坊鍔燽uild璇彞錛屼笉鍐嶈禈榪?
聽聽聽聽聽聽 聽test.lnk $(_FLATRELEASEDIR)\test.lnk NK S
聽聽聽 鍦╬roject.dat涓鍔犱笅闈竴琛岋細
聽聽聽聽聽聽聽聽 Directory("\Windows\startup"):-File("test.lnk","\Windows\test.lnk")
聽聽聽 榪欐牱鍚庣郴緇熷惎鍔ㄥ悗灝變細鑷姩鍚姩鎴戜滑鐨勭▼搴忎簡銆?
聽聽聽
聽聽聽 鍙﹀涓縐嶆柟娉曟槸緙栬緫娉ㄥ唽琛細鍦╬roject.reg涓坊鍔犲涓嬪唴瀹?
聽聽聽聽聽聽聽 [HKEY_LOCAL_MACHINE\init]
聽聽聽聽聽聽聽 "Launch80"="app.exe"
聽聽聽聽聽聽聽 "Depend80"=hex:14,00,1e,00
聽聽聽 榪欎釜鏄瀹氬惎鍔ㄩ『搴忥紝launch鍚庨潰鐨勬暟瀛楄秺澶х殑瓚婃槸鍚庡惎鍔紝Depend80鍚庨潰鐨勬寚瀹氫緷璧栭」錛屼負16榪涘埗錛屼笂闈㈢殑璇彞琛ㄦ槑渚濊禆欏逛負launch20瀹氫箟鐨刣evice.exe鍜宭aunch30涓畾涔夌殑gwes.exe錛?娉ㄦ剰Launch鍚庨潰鐨勬暟瀛楄寖鍥翠負0鍒?9 錛屾鑼冨洿涔嬪鐨勫皢涓嶄細鏈夋晥鏋溿?
聽聽聽 榪欐牱涓ょ鏂規硶鐨勬晥鏋滈兘鏄郴緇熼兘鏄郴緇熷厛鍚姩璧勬簮綆$悊鍣╡xplorer.exe錛堝氨鏄湅鍒扮殑榛樿妗岄潰錛夛紝鐒跺悗鍚姩鎴戜滑鐨勭▼搴忥紝錛堝鏋滃埄鐢╰askman shell鐒跺悗鍘繪帀浠誨姟鏍忛偅涔堟晥鏋滄洿濂斤級浣嗘槸榪欐牱榪樹笉澶燂紝鎴戜滑濡備綍涓嶆樉紺烘闈紝鐩存帴鏄劇ず鎴戜滑鐨勭▼搴忓憿錛?
聽聽聽 緗戜笂鏈変漢浠嬬粛鐨勬柟娉曟槸鍘繪帀standard shell錛屼絾鏄垜緙栬瘧鎬繪槸鎶ラ敊銆傛垜閲囩敤鐨勬柟娉曟槸鏇挎崲娉ㄥ唽琛ㄤ腑lauch50涓殑explorer.exe涓烘垜鐨刟pp.exe錛屽嵆鎼炲畾銆?
聽聽聽 淇敼娉ㄥ唽琛ㄧ殑鏂規硶錛氬厛鎶婂甫KITL鐨勭郴緇熻窇璧鋒潵錛屽湪PB鐨凾OOLS->Remote registry editor閲屼慨鏀?楠岃瘉鏈夋晥鍚?鍐嶅幓淇敼platfrom.reg, 鎴栬呰嚜宸卞啓涓猂EG鏂囦歡錛岀劧鍚庡湪platform.reg閲孖NCLUDE榪涙潵 SYSGEN鍚庣‘璁BWORKSPACE閲岀浉鍏抽」鐩殑REL鐩綍閲宺eginit.ini鏂囦歡閲屽寘鍚簡鑷繁鍋氱殑淇敼鍚巑ake image鐒跺悗DOWNLOAD涓嬪幓灝監K浜嗐?
聽聽聽 鍊煎緱琛ュ厖鐨勬槸錛屾垜浠墠闈粙緇嶇殑姝ラ涓偅涓慨鏀瑰鉤鍙皊etting錛屾坊鍔犺鍙ョ殑錛屾槸鍥犱負鎴戞瘡嬈¢兘鏄噸鏂皊ysgen鍜宐uild錛屽鏋滃彧鏄畝鍗曠殑make image鐨勮瘽錛堥兘鏄痯b涓殑build OS鑿滃崟涓嬬殑鍛戒護錛夛紝閭d箞灝嗙洿鎺ョ敤release涓殑鍐呭錛屽洜姝や篃鍙互鐩存帴灝嗘枃浠舵斁鍒皉elease鏂囦歡澶癸紝鐒跺悗鏀筽roject.bib絳夊疄鐜板線image涓坊鍔犳枃浠躲?鍚屾牱錛屼篃鍙互鐩存帴淇敼release涓殑shell.reg涓殑launch50鍊間負鎴戜滑鑷繁鐨勭▼搴忥紙鎴栬呯被浼間慨鏀箁eginit.ini鏂囦歡錛宺eginit.ini鏂囦歡瀛樻斁鏈夋墍鏈墂ince鐨勯潤鎬佹敞鍐岃〃錛屾潵杈懼埌鍘繪帀妗岄潰錛岀洿鎺ュ惎鍔ㄦ垜浠▼搴忕殑鏁堟灉錛夈?
娉ㄦ剰錛岃繖涔堝惎鍔ㄧ殑紼嬪簭錛屽鏋滅偣鍑誨叧闂紝灝變細姝繪満鐨勶紝鍥犱負娌℃湁紿楀彛榪愯浜嗐傚疄闄呰繍鐢ㄤ腑錛屽綋鐒朵笉浼氳鐢ㄦ埛鍏抽棴鎴戜滑鐨勭▼搴忥紝闄ら潪浠栦竴璧峰叧闂郴緇熴?
濡傛灉涔熼渶瑕乥uild鐨勮瘽錛屽彲浠ラ氳繃寰image涓坊鍔犳枃浠剁殑鏂規硶灝嗘垜浠敼濂界殑shell.reg娣誨姞鍒皉elease鐩綍銆偮?/div>

]]>WinCE涓浣曞悜image涓坊鍔犳枃浠?/title><link>http://m.shnenglu.com/milkyway/articles/17169.html</link><dc:creator>鐩告濋吀涓湁鐢?/dc:creator><author>鐩告濋吀涓湁鐢?/author><pubDate>Wed, 03 Jan 2007 02:19:00 GMT</pubDate><guid>http://m.shnenglu.com/milkyway/articles/17169.html</guid><wfw:comment>http://m.shnenglu.com/milkyway/comments/17169.html</wfw:comment><comments>http://m.shnenglu.com/milkyway/articles/17169.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/milkyway/comments/commentRss/17169.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/milkyway/services/trackbacks/17169.html</trackback:ping><description><![CDATA[鏉ヨ嚜<a >http://jkflyfox.spaces.live.com/?_c11_blogpart_blogpart=blogview&_c=blogpart&partqs=cat%3d%25e7%25a8%258b%25e5%25ba%258f%25e6%258a%2580%25e5%25b7%25a7</a><br /><br />鍒?縐嶆儏鍐墊潵璇存槑濡備綍娣誨姞 <p>絎竴縐嶏紝灝辨槸image宸茬粡鍦–EPC鎴栬呯粓绔笂璺戣搗鏉ヤ簡錛岄偅涔堣繖涓椂鍊欒鎯蟲坊鍔犳枃浠跺彲浠ラ氳繃PB鎴栬匛VC鎻愪緵鐨剅emote file viewer錛岃繖涓瘮杈冪畝鍗曪紝鐪嬬潃鐣岄潰鎿嶄綔灝辮浜嗐? </p><p>絎簩縐嶏紝灝辨槸瀵瑰畾鍒剁殑image宸茬粡build榪囦簡錛岀幇鍦ㄦ兂寰閲岄潰娣誨姞鏂囦歡鐨勮瘽錛屽彲浠ュ湪浣犲搴斿鉤鍙扮殑release鏂囦歡澶歸噷闈㈢洿鎺ユ坊鍔犳枃浠訛紝鐒跺悗淇敼騫沖彴閰嶇疆鏂囦歡project.bib錛岀劧鍚庡啀make image錛屼篃鍙互灝嗘枃浠舵坊鍔犲埌image涓幓錛屽皢image鍚姩鍚庯紝浼氬嚭鐜板湪windows鏂囦歡澶逛笅闈? </p><p>姣斿浣犳兂灝唗est.txt娣誨姞鍒癷mage涓紝鍒欓鍏堥渶瑕佸皢姝ゆ枃浠舵嫹璐濆埌騫沖彴release鐩綍涓嬮潰 </p><p>錛堝鉤鍙皉elease鐩綍涔熷氨鏄幆澧冨彉閲廮FLATRELEASEDIR鐨勫鹼紝_FLATRELEASEDIR鐨?= %_WINCEROOT%\PBWorkspaces\%_TGTPROJ%\RelDir\%_TGTPLAT%\%_TGTCPUFAMILY%_Release錛屼篃灝辨槸realease鐩綍錛岋紙_TGTPLAT涓哄鉤鍙板悕錛宊TGTCPUFAMILY涓篊PU鍚嶏級銆傛垜鏂板緩鐨勫鉤鍙頒負shellTest錛屽叾鍊間負E:\WINCE500\PBWorkspaces\ShellTest\RelDir\MyCEPC_x86_Release 錛? </p><p>鐒跺悗鎸夌収浠ヤ笅淇敼project.bib錛? </p><p>鍦ㄥ叾涓坊鍔犵被浼艱繖鏍蜂竴琛? </p><p>test.txt$(_FLATRELEASEDIR)\test.txt NK S </p><p>榪欏彞璇濈殑鎰忔濇槸璇村皢騫沖彴release鏂囦歡澶逛笅闈㈢殑test.txt鏂囦歡娣誨姞鍒癷mage涓紝鏂囦歡灞炴т負緋葷粺鏂囦歡錛屽叧浜巄ib鏂囦歡鐨勬牸寮忥紝璇鋒煡闃匴inCE鐨勫府鍔?/p><p>淇敼濂絧roject.bib鍚庯紝淇濆瓨錛岀劧鍚庡湪pb鐨刡ulid鑿滃崟涓嬮夋嫨make image錛屾垚鍔熷悗涓嬭澆鍒扮粓绔垨CEPC錛屽氨鍙互鐪嬪埌娣誨姞鐨勬枃浠朵簡銆?/p><p>絎笁縐嶏紝灝辨槸騫沖彴瀹氬埗閮芥病鍋氬ソ錛屾垨鑰呭仛濂戒簡闇瑕佷慨鏀癸紝閭d箞濡傛灉浣犵洿鎺ユ寜鐓х浜岀鏉ュ仛錛岀劧鍚庨夋嫨build鑿滃崟鐨剆ysgen and build鐨勮瘽錛屼綘浼氬彂鐜版牴鏈笉浼氳test.txt鎷瘋礉鍒癷mage涓紝榪欎釜涔熸槸鎴戠殑鎯ㄧ棝鏁欒錛岃姳浜嗗ソ浜涙椂闂存墠鐭ラ亾鍘熷洜銆?/p><p>涓轟粈涔堝憿錛熶粠build image鏃剁殑output紿楀彛錛屾垜姣忔閮藉彲浠ョ湅鍒癱lean up欏圭洰release鐩綍鐨勮緭鍑猴紝鐪嬫潵鎴戠洿鎺ユ妸鏂囦歡澶嶅埗鍒皉elease鐩綍鏄笉琛岀殑錛屽洜涓哄湪sysgen and build鐨勮繃紼嬩腑姝ゆ枃浠跺す浼氳娓呯┖錛岃嚜鐒舵垜鐨則est.txt涔熻娓呮帀浜嗐傞偅璇ユ庝箞鍔炲憿錛?<br />榪欓噷緙哄皯涓涓楠わ紝閭e氨鏄鍦ㄥ鉤鍙拌緗腑錛屼綔涓浜涢厤緗紝浠庤岃Release鐩綍鍦ㄨ娓呯┖浠ュ悗鑳藉皢鐩爣鏂囦歡浠庢湰鍦扮‖鐩樺姩鎬佸鍒跺埌release鐩綍</p><p>淇敼閰嶇疆浠ヤ究鎷瘋礉鏂囦歡鍒癛elease鐩綍鐨勪富瑕佹楠ゅ涓嬶細 <br />1 pb涓粠platform鑿滃崟閫塻etting <br />2 鍦ㄥ脊鍑哄璇濇涓瑿onfiguration涓欏圭‘淇濇紜紝涓鑸粯璁ゅ氨鏄紜殑銆?<br />3 Custom Build Actions閫夐」鍗′腑鐨凚uild step涓嬫媺妗嗭紝閫夋嫨Pre-Make Image (鏈夊洓涓夐」錛屽垎鍒負Pre-Sysgen錛孭ost-Sysgen錛孭re-Make Image錛孭ost-Make Image錛屾剰鎬濆鍏跺悕) 錛岀劧鍚嶯ew錛屽湪寮瑰嚭鐨凜ustom Build Action瀵硅瘽妗嗕腑杈撳叆綾諱技浠ヤ笅鐨勮鍙ワ細 <br />copy <Path>\<File name> %_FLATRELEASEDIR%\<File name> </p><p>姣斿test.txt鏀懼湪鎴戠數鑴戜笂鐨別鐩樻牴鐩綍涓嬶紝閭d箞璇彞鏄繖鏍風殑錛?/p><p>copy聽E:\test.txt聽%_FLATRELEASEDIR%\test.txt <br /></p><p>鍔犱笂榪欎釜姝ラ鍚庯紝鍐嶆寜絎簩縐嶆柟娉曞氨鍙互杈懼埌鐩殑浜嗐?/p><img src ="http://m.shnenglu.com/milkyway/aggbug/17169.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/milkyway/" target="_blank">鐩告濋吀涓湁鐢?/a> 2007-01-03 10:19 <a href="http://m.shnenglu.com/milkyway/articles/17169.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://m.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://ez4444.com" target="_blank">久久久爽爽爽美女图片</a>| <a href="http://302262.com" target="_blank">欧美欧美天天天天操</a>| <a href="http://www47755.com" target="_blank">每日更新成人在线视频</a>| <a href="http://aqdw2021.com" target="_blank">亚洲字幕一区二区</a>| <a href="http://avtb2068.com" target="_blank">亚洲在线观看视频</a>| <a href="http://012928.com" target="_blank">午夜精品久久久久久99热</a>| <a href="http://ccnn33.com" target="_blank">欧美亚洲尤物久久</a>| <a href="http://kk66mm.com" target="_blank">久久综合伊人77777蜜臀</a>| <a href="http://979695.com" target="_blank">欧美一区激情</a>| <a href="http://8946286.com" target="_blank">久久久久国产精品一区</a>| <a href="http://tzhsdy.com" target="_blank">免费成人av在线看</a>| <a href="http://bjopl.com" target="_blank">亚洲福利精品</a>| <a href="http://557523.com" target="_blank">久久人体大胆视频</a>| <a href="http://yw133777.com" target="_blank">亚洲激情电影中文字幕</a>| <a href="http://jav1111.com" target="_blank">中文日韩在线视频</a>| <a href="http://xxxcalls.com" target="_blank">久久精品视频在线播放</a>| <a href="http://chunshanketang.com" target="_blank">麻豆成人综合网</a>| <a href="http://yngtxny.com" target="_blank">国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ入口 </a>| <a href="http://6133c.com" target="_blank">男人插女人欧美</a>| <a href="http://199372.com" target="_blank">欧美sm视频</a>| <a href="http://9a9u.com" target="_blank">韩国av一区二区三区四区</a>| <a href="http://520637.com" target="_blank">亚洲福利视频二区</a>| <a href="http://xsxcn.com" target="_blank">亚洲欧美激情四射在线日</a>| <a href="http://yytaotu.com" target="_blank">久久久久久69</a>| <a href="http://54zcr.com" target="_blank">亚洲国产精品一区二区第一页</a>| <a href="http://topjavhd.com" target="_blank">亚洲全黄一级网站</a>| <a href="http://xingmaipet.com" target="_blank">一本大道久久a久久综合婷婷</a>| <a href="http://tk263.com" target="_blank">欧美日韩和欧美的一区二区</a>| <a href="http://456316.com" target="_blank">蜜桃精品久久久久久久免费影院</a>| <a href="http://airsixth.com" target="_blank">亚洲激情综合</a>| <a href="http://hhh699.com" target="_blank">久久国产精品网站</a>| <a href="http://www-733999.com" target="_blank">欧美女主播在线</a>| <a href="http://270909.com" target="_blank">亚洲大片一区二区三区</a>| <a href="http://631537.com" target="_blank">欧美一区=区</a>| <a href="http://shruhan.com" target="_blank">农村妇女精品</a>| <a href="http://aqdw2021.com" target="_blank">欧美亚洲免费</a>| <a href="http://798814.com" target="_blank">欧美日韩中文精品</a>| <a href="http://6u6uuu666.com" target="_blank">在线不卡中文字幕</a>| <a href="http://www-369111.com" target="_blank">亚洲欧美国产毛片在线</a>| <a href="http://www19829.com" target="_blank">欧美激情久久久久</a>| <a href="http://luoliguo.com" target="_blank">欧美一区二区成人6969</a>| <a href="http://xmzszx.com" target="_blank">国产精品www网站</a>| <a href="http://cp3824.com" target="_blank">亚洲精品社区</a>| <a href="http://cctbdy.com" target="_blank">免费欧美日韩</a>| <a href="http://cc1024.com" target="_blank">久久精品一区二区</a>| <a href="http://jjoo4.com" target="_blank">国产香蕉久久精品综合网</a>| <a href="http://evaporsllc.com" target="_blank">亚洲五月婷婷</a>| <a href="http://xss521.com" target="_blank">亚洲美女精品一区</a>| <a href="http://988tz.com" target="_blank">欧美激情va永久在线播放</a>| <a href="http://avtt0.com" target="_blank">宅男噜噜噜66一区二区</a>| <a href="http://bizhijidi.com" target="_blank">国产精品99久久久久久久久久久久</a>| <a href="http://by2866.com" target="_blank">久久婷婷激情</a>| <a href="http://qqx123.com" target="_blank">伊人色综合久久天天五月婷</a>| <a href="http://916969.com" target="_blank">久久精品99国产精品</a>| <a href="http://www224558.com" target="_blank">一区二区三区视频在线看</a>| <a href="http://edtxt.com" target="_blank">欧美另类视频在线</a>| <a href="http://aass123.com" target="_blank">亚洲啪啪91</a>| <a href="http://ckk755.com" target="_blank">亚洲黄色免费电影</a>| <a href="http://mytopvogue.com" target="_blank">你懂的视频欧美</a>| <a href="http://sdmsjd.com" target="_blank">亚洲人成在线观看网站高清</a>| <a href="http://739822.com" target="_blank">欧美高清在线一区</a>| <a href="http://pktether.com" target="_blank">狂野欧美激情性xxxx欧美</a>| <a href="http://cp3824.com" target="_blank">揄拍成人国产精品视频</a>| <a href="http://56lw.com" target="_blank">老鸭窝亚洲一区二区三区</a>| <a href="http://56701sy.com" target="_blank">欧美一区二区黄色</a>| <a href="http://jgj230230.com" target="_blank">国产综合亚洲精品一区二</a>| <a href="http://988tz.com" target="_blank">久久久999精品视频</a>| <a href="http://by5130.com" target="_blank">欧美在线观看视频</a>| <a href="http://qq666qq.com" target="_blank">狠狠爱综合网</a>| <a href="http://329aaa.com" target="_blank">欧美国产一区视频在线观看</a>| <a href="http://xiangshi888.com" target="_blank">免费看精品久久片</a>| <a href="http://173168.com" target="_blank">一区二区日本视频</a>| <a href="http://677968.com" target="_blank">中日韩视频在线观看</a>| <a href="http://51winner.com" target="_blank">国产精品一区二区你懂的</a>| <a href="http://678255.com" target="_blank">久久精品一区二区</a>| <a href="http://aqdav81.com" target="_blank">久久综合伊人77777</a>| <a href="http://oimeal.com" target="_blank">亚洲国产综合91精品麻豆</a>| <a href="http://kittybob.com" target="_blank">亚洲激情啪啪</a>| <a href="http://woshinannan741.com" target="_blank">国产精品国产精品</a>| <a href="http://56myf.com" target="_blank">老司机亚洲精品</a>| <a href="http://gx2020.com" target="_blank">欧美精品黄色</a>| <a href="http://sclddn.com" target="_blank">亚洲女性喷水在线观看一区</a>| <a href="http://irongxun.com" target="_blank">午夜精品视频一区</a>| <a href="http://y7y7s.com" target="_blank">亚洲国产成人av好男人在线观看</a>| <a href="http://057232.com" target="_blank">欧美激情麻豆</a>| <a href="http://maokk77.com" target="_blank">国产精品日韩</a>| <a href="http://481323.com" target="_blank">欧美成人国产</a>| <a href="http://hg4958.com" target="_blank">欧美视频中文字幕在线</a>| <a href="http://sz-changrong.com" target="_blank">欧美一区二区三区在线看</a>| <a href="http://388123cc.com" target="_blank">久久久久天天天天</a>| <a href="http://aaa211.com" target="_blank">夜夜爽av福利精品导航</a>| <a href="http://5gn4y.com" target="_blank">亚洲欧美日本精品</a>| <a href="http://123-sj.com" target="_blank">亚洲国产精品毛片</a>| <a href="http://989766.com" target="_blank">亚洲小说春色综合另类电影</a>| <a href="http://www-24333.com" target="_blank">国内久久婷婷综合</a>| <a href="http://woaigougou.com" target="_blank">亚洲精品一区二区三区婷婷月</a>| <a href="http://xxx6688.com" target="_blank">国产精品白丝jk黑袜喷水</a>| <a href="http://dusenborg.com" target="_blank">久久影音先锋</a>| <a href="http://www205sihu.com" target="_blank">欧美午夜视频一区二区</a>| <a href="http://www-333304.com" target="_blank">久久在线播放</a>| <a href="http://9928k.com" target="_blank">欧美精品一线</a>| <a href="http://649929.com" target="_blank">久久综合给合久久狠狠色</a>| <a href="http://798200.com" target="_blank">欧美日韩一区二区在线观看视频 </a>| <a href="http://765409.com" target="_blank">在线观看日韩</a>| <a href="http://9658888.com" target="_blank">一区二区三区视频在线观看</a>| <a href="http://gztcm01.com" target="_blank">在线观看欧美日韩</a>| <a href="http://033232.com" target="_blank">亚洲一区欧美一区</a>| <a href="http://7282789.com" target="_blank">亚洲精品极品</a>| <a href="http://caosee.com" target="_blank">欧美在线免费看</a>| <a href="http://llyx888.com" target="_blank">亚洲精品中文字幕在线</a>| <a href="http://689558.com" target="_blank">嫩草影视亚洲</a>| <a href="http://woniuminsu.com" target="_blank">国产精品99久久久久久白浆小说</a>| <a href="http://91sp136.com" target="_blank">亚洲人成在线影院</a>| <a href="http://www474000c.com" target="_blank">欧美激情在线狂野欧美精品</a>| <a href="http://uniconmgt.com" target="_blank">欧美色欧美亚洲另类二区</a>| <a href="http://39ddtv.com" target="_blank">久久这里有精品视频</a>| <a href="http://678255.com" target="_blank">国产精品国产亚洲精品看不卡15</a>| <a href="http://9955377.com" target="_blank">久久综合中文色婷婷</a>| <a href="http://youjizzbox.com" target="_blank">国产精品国产三级国产aⅴ无密码</a>| <a href="http://7115866.com" target="_blank">亚洲第一中文字幕</a>| <a href="http://hafenchen.com" target="_blank">黑人巨大精品欧美一区二区</a>| <a href="http://sxxawef.com" target="_blank">亚洲一二三区在线观看</a>| <a href="http://avtbr123.com" target="_blank">99综合在线</a>| <a href="http://8xv0.com" target="_blank">免费久久99精品国产自在现线</a>| <a href="http://gmqgw.com" target="_blank">久久精品中文</a>| <a href="http://707fx.com" target="_blank">国产欧美日韩激情</a>| <a href="http://pron12.com" target="_blank">亚洲一区二区三区高清不卡</a>| <a href="http://www49966.com" target="_blank">亚洲美女一区</a>| <a href="http://s3yx.com" target="_blank">免费在线亚洲欧美</a>| <a href="http://ww9494.com" target="_blank">欧美高清不卡</a>| <a href="http://nnnn34.com" target="_blank">亚洲第一黄色</a>| <a href="http://7770790.com" target="_blank">久久视频这里只有精品</a>| <a href="http://57sa.com" target="_blank">久久亚洲视频</a>| <a href="http://devwang.com" target="_blank">今天的高清视频免费播放成人</a>| <a href="http://xmjhyey.com" target="_blank">亚洲欧美国产高清</a>| <a href="http://152mu.com" target="_blank">性欧美大战久久久久久久久</a>| <a href="http://320ur.com" target="_blank">国产精品国码视频</a>| <a href="http://bodabloc.com" target="_blank">亚洲一二三区在线观看</a>| <a href="http://8xv0.com" target="_blank">欧美一级播放</a>| <a href="http://tao62bao.com" target="_blank">国产农村妇女毛片精品久久麻豆 </a>| <a href="http://pourporn.com" target="_blank">欧美日韩国内</a>| <a href="http://0855d.com" target="_blank">99成人精品</a>| <a href="http://avtt0.com" target="_blank">亚洲女爱视频在线</a>| <a href="http://jorhom.com" target="_blank">国产精一区二区三区</a>| <a href="http://ncncpa.com" target="_blank">久久国产99</a>| <a href="http://xw4433.com" target="_blank">国产亚洲成av人在线观看导航 </a>| <a href="http://ssss96.com" target="_blank">欧美日韩一卡</a>| <a href="http://8842aa.com" target="_blank">中文亚洲字幕</a>| <a href="http://htzhuanli.com" target="_blank">欧美中文字幕在线视频</a>| <a href="http://cscjxs.com" target="_blank">狠狠色丁香婷婷综合影院</a>| <a href="http://160160160.com" target="_blank">久久高清免费观看</a>| <a href="http://6673328.com" target="_blank">免费日韩一区二区</a>| <a href="http://yw3328.com" target="_blank">亚洲免费大片</a>| <a href="http://1369080.com" target="_blank">欧美午夜一区</a>| <a href="http://wwwjuhuase.com" target="_blank">性感少妇一区</a>| <a href="http://jinlijun.com" target="_blank">老司机一区二区三区</a>| <a href="http://youjizzbox.com" target="_blank">亚洲精品一区中文</a>| <a href="http://www-136445.com" target="_blank">国产精品成人观看视频免费</a>| <a href="http://456kp.com" target="_blank">亚洲欧美激情精品一区二区</a>| <a href="http://ncyy4.com" target="_blank">久久久久欧美精品</a>| <a href="http://889028.com" target="_blank">亚洲日韩欧美视频</a>| <a href="http://eeii33.com" target="_blank">欧美亚州韩日在线看免费版国语版</a>| <a href="http://cloakok.com" target="_blank">99综合在线</a>| <a href="http://3737520.com" target="_blank">久久裸体艺术</a>| <a href="http://18cgh.com" target="_blank">一本一本久久a久久精品牛牛影视</a>| <a href="http://yiqiluntan.com" target="_blank">欧美激情va永久在线播放</a>| <a href="http://8eb26.com" target="_blank">亚洲午夜黄色</a>| <a href="http://dadepaimai.com" target="_blank">欧美成人午夜</a>| <a href="http://www-136445.com" target="_blank">亚洲一区在线看</a>| <a href="http://bocfdj.com" target="_blank">好看不卡的中文字幕</a>| <a href="http://223533.com" target="_blank">午夜在线观看免费一区</a>| <a href="http://wwwmm131.com" target="_blank">欧美精品www</a>| <a href="http://bodabloc.com" target="_blank">亚洲图片欧洲图片av</a>| <a href="http://lampreydb.com" target="_blank">久久久国产精品一区二区中文</a>| <a href="http://baoyou118.com" target="_blank">在线看一区二区</a>| <a href="http://zz9876.com" target="_blank">欧美性色视频在线</a>| <a href="http://mengmujia.com" target="_blank">久久精品国产亚洲一区二区三区 </a>| <a href="http://9928k.com" target="_blank">一区二区三区高清在线</a>| <a href="http://2220004.com" target="_blank">久久久国产91</a>| <a href="http://5c55c5c.com" target="_blank">亚洲一本视频</a>| <a href="http://794278.com" target="_blank">亚洲高清久久久</a>| <a href="http://51120guahao.com" target="_blank">欧美三级在线播放</a>| <a href="http://2996611.com" target="_blank">久久综合五月</a>| <a href="http://755795.com" target="_blank">久久国产视频网站</a>| <a href="http://1177898.com" target="_blank">日韩视频在线观看国产</a>| <a href="http://342889.com" target="_blank">裸体女人亚洲精品一区</a>| <a href="http://y66776.com" target="_blank">亚洲欧美精品中文字幕在线</a>| <a href="http://caihongie.com" target="_blank">伊人激情综合</a>| <a href="http://seanzhau.com" target="_blank">国产精品女人久久久久久</a>| <a href="http://tv-miya188.com" target="_blank">欧美成人69av</a>| <a href="http://wwwxigua66.com" target="_blank">久久久精品国产免大香伊</a>| <a href="http://www16axax.com" target="_blank">亚洲香蕉在线观看</a>| <a href="http://www381818.com" target="_blank">亚洲美女视频在线观看</a>| <a href="http://xmt86.com" target="_blank">欧美成人国产va精品日本一级</a>| <a href="http://lysyfls.com" target="_blank">欧美一级理论性理论a</a>| <a href="http://avse98.com" target="_blank">亚洲无线视频</a>| <a href="http://ziwufuren.com" target="_blank">一区二区三区你懂的</a>| <a href="http://devmashup.com" target="_blank">亚洲欧洲一二三</a>| <a href="http://0359222.com" target="_blank">亚洲第一网站免费视频</a>| <a href="http://456316.com" target="_blank">韩国美女久久</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>