今天一個(gè)很偶然的機(jī)會(huì),需要回答一個(gè)將無符號數(shù)據(jù)存到有符號變量的問題。我編碼如下,結(jié)果很有意思,我是在VC6里調(diào)試的,有高人看到可否幫忙指點(diǎn)下。
int main()
{
unsigned short temp1 = 65535;
short temp2 = temp1;
unsigned short temp3 = (unsigned short)temp2;
unsigned short temp4 = temp2;
int temp5 = temp2;
unsigned int temp6 = temp2;
unsigned long temp7 = temp2;
int temp8 = (unsigned short)temp2;
short temp9 = temp2;
printf("temp1 = %d\n temp2 = %d\n temp3 = %d\n temp4 = %d\n temp5 = %d\n temp6 = %d\n temp7 = %d\n temp8 = %d\n temp9 = %d\n",
temp1,temp2,temp3,temp4, temp5,temp6,temp7,temp8,temp9);
return 0;
}
//改程序的輸出結(jié)果
//temp1 = 65535
//temp2 = -1
//temp3 = 65535
//temp4 = 65535
//temp5 = -1
//temp6 = -1
//temp7 = -1
//temp8 = 65535
//temp9 = -1;
//根據(jù)結(jié)果也就是說,無符號符號數(shù)據(jù)是可以存儲(chǔ)在有符號型變量內(nèi)存中的,
//而且有例子在內(nèi)存塊長度一樣時(shí),不用強(qiáng)轉(zhuǎn),直接賦給無符號變量時(shí)也可行
//上述事實(shí)可以解釋為內(nèi)存塊不變,采用不同的解碼方式解出不同的數(shù)據(jù)
//但是讀出來的時(shí)候要注意,如果有符號轉(zhuǎn)無符號一定要強(qiáng)轉(zhuǎn)
//之所以上例unsigned int輸出-1,我并不是很清楚
posted @
2007-10-17 22:46 frank.sunny 閱讀(3034) |
評論 (13) |
編輯 收藏
摘要: 昨天遇到類內(nèi)靜態(tài)函數(shù),本想自己整理下,誰知道已經(jīng)有人整理的很好了,為此就不麻煩了,看了一篇就轉(zhuǎn)貼在自己空間里,以便以后查詢。C++的static關(guān)鍵字作者:韓耀旭
C++的static有兩種用法:面向過程程序設(shè)計(jì)中的static和面向?qū)ο蟪绦蛟O(shè)計(jì)中的static。前者應(yīng)用于普通變量和函數(shù),不涉及類;后者主要說明static在類中的作用。
一、面向過程設(shè)計(jì)中的static
1、靜態(tài)全局變量
...
閱讀全文
posted @
2007-10-16 21:03 frank.sunny 閱讀(1785) |
評論 (2) |
編輯 收藏
本文并非本人原創(chuàng),文中紅色字體為我新加,原文出處http://blog.donews.com/sevenworld/archive/2005/10/17/591911.aspx
如何設(shè)置S60模擬器的網(wǎng)絡(luò)參數(shù)
在調(diào)試使用Socket進(jìn)行數(shù)據(jù)通訊的Symbian S60程序過程中,需要編寫客戶端與服務(wù)器的數(shù)據(jù)交互代碼,如果S60的模擬器可以直接訪問網(wǎng)絡(luò)中的服務(wù)器程序,調(diào)試就會(huì)非常方便。S60的模擬器提供了這些功能,不過需要對網(wǎng)絡(luò)參數(shù)進(jìn)行一些設(shè)置,下面將討論這一問題。
首先是網(wǎng)絡(luò)參數(shù)的設(shè)置,在Symbian安裝目錄的..\Epoc32\tools目錄下有一個(gè)網(wǎng)絡(luò)參數(shù)設(shè)置程序network_config.bat,對于不同的開發(fā)包,這個(gè)名字可能會(huì)有一些不同(可以選擇開始菜單下SDK目錄tools下的Ethernet Support Configuration)。執(zhí)行該程序,將顯示參數(shù)設(shè)置界面。其實(shí)參數(shù)的設(shè)置和對局域網(wǎng)中的PC設(shè)置一樣,你就把它當(dāng)成是在設(shè)置PC的網(wǎng)絡(luò)配置就可以了。分配一個(gè)沒有使用的IP(注意絕對不能與本機(jī)IP相同),填寫好子網(wǎng)掩碼,設(shè)置好局域網(wǎng)的網(wǎng)關(guān)。唯一的不同是要選擇所使用的網(wǎng)卡。當(dāng)你點(diǎn)OK關(guān)閉該設(shè)置對話框的時(shí)候(或著點(diǎn)那個(gè)Adapters按鈕),會(huì)顯示一個(gè)命令行界面,列出了當(dāng)前機(jī)器上可以使用的網(wǎng)卡的信息,你需要輸入一個(gè)數(shù)字選擇一個(gè)網(wǎng)卡,注意,應(yīng)該選擇你的PC所使用的那個(gè)真實(shí)的網(wǎng)卡,也就是標(biāo)識(shí)你機(jī)器在局域網(wǎng)內(nèi)IP地址的那個(gè)網(wǎng)卡。
按照官方文檔來說,這樣就可以,但實(shí)際上不是所有的機(jī)器都可以,我沒有測試過,不知道別人的機(jī)器如何,反正我使用的機(jī)器不可以。后來我在一本書里看到,還需要運(yùn)行另外一個(gè)程序,才可以達(dá)到我們的目的。這個(gè)程序與上面的設(shè)置程序在同一個(gè)目錄下,叫做npacketadmin.exe。執(zhí)行它,會(huì)顯示一個(gè)程序,并跳出一個(gè)設(shè)置對話框,首先在下拉列表框里選擇你剛才選定的那個(gè)網(wǎng)卡,然后點(diǎn)擊下面的Start按鈕,這樣就可以了。這時(shí)你就可以使用模擬器調(diào)試你的Symbian S60通訊程序了。(我實(shí)際測試中發(fā)現(xiàn)不用啟動(dòng)npacketadmin.exe也是可以的)
測試是否連通的方法是,執(zhí)行模擬器中的“網(wǎng)絡(luò)”應(yīng)用程序,然后輸入一個(gè)網(wǎng)址,比如www.sina.com.cn,如果設(shè)置正確,將顯示該頁面,注意也許是亂碼,不過不要緊,因?yàn)槲覀冎幌胫谰W(wǎng)絡(luò)是否已經(jīng)可用了。(強(qiáng)烈建議使用非中文網(wǎng)站做測試,比如www.google.com)
如果以上的過程中,不啟動(dòng)npacketadmin.exe就不能連接的用戶,必須注意下面幾個(gè)問題:
1.在調(diào)試期間可以關(guān)閉npacketadmin.exe的那個(gè)設(shè)置對話框,但是不能關(guān)閉該程序。如果關(guān)閉了,網(wǎng)絡(luò)將不通。
2.如果不小心關(guān)閉了該程序,需要重新啟動(dòng),并重新做上面的第二步的操作。
3.應(yīng)該在啟動(dòng)模擬器之前就啟動(dòng)該程序,不然模擬器可能會(huì)異常退出。
本人剛開始調(diào)試時(shí),犯了以下一些問題:
首先用msconfig工具將S60的Ethernet Packet Service這個(gè)服務(wù)停掉了,后來每一次模擬器試圖用Socket連接時(shí)都彈出“Error:1058 無法啟動(dòng)服務(wù)……”的報(bào)錯(cuò)。該錯(cuò)誤在npacketadmin.exe啟動(dòng)時(shí)也會(huì)出現(xiàn)。
其次沒有注意IP的問題,用跟本機(jī)同一個(gè)IP,結(jié)果怎么連都連不上,后來改成我同事的,害得他一個(gè)下午都因?yàn)榫W(wǎng)絡(luò)上有同名IP而半天沒得上網(wǎng)。
另注:最近更換環(huán)境時(shí)發(fā)現(xiàn),假如主機(jī)是通過自動(dòng)獲取ip就可以上網(wǎng)的話,不知道模擬器的ip不設(shè),讀者能否實(shí)現(xiàn),我本人試過老是出現(xiàn)“網(wǎng)關(guān)無響應(yīng)”提示,所以我覺得原則上還是需要設(shè)置ip的,當(dāng)然前提是主機(jī)設(shè)了固定IP也能上網(wǎng),然后模擬器設(shè)置一個(gè)不同于主機(jī)的ip地址 modify 2008.03.17
posted @
2007-09-25 16:21 frank.sunny 閱讀(2923) |
評論 (2) |
編輯 收藏
本文檔我上傳過程中圖片沒有粘貼上來,為此如果有人感興趣,請下載word文檔,地址是http://m.shnenglu.com/Files/franksunny/Symbian應(yīng)用程序框架淺析.rar,歡迎大家給我指點(diǎn)。
Symbian 應(yīng)用程序框架淺析
S60應(yīng)用程序的運(yùn)行依賴于大量的OS組件,例如屏幕繪圖和應(yīng)用程序數(shù)據(jù)持久性等,可以直接使用OS的窗口服務(wù)器或者文件服務(wù)器即可。
應(yīng)用程序核心框架類
應(yīng)用程序框架由一套核心類組成,這些類是所有應(yīng)用程序框架的基礎(chǔ)。這些類封裝了應(yīng)用程序和所需OS服務(wù)器之間的相互作用。
應(yīng)用程序核心框架類
第一層:CBase和CActive兩個(gè)基類,其中CActive也是派生于CBase,而CActive又被第二層的CConEnv派生
第二層:包含兩個(gè)基本組件:AppArc和CONE。AppArc代表“應(yīng)用程序架構(gòu)”,這些類提供了基本的應(yīng)用程序結(jié)構(gòu)、將系統(tǒng)信息提交到應(yīng)用程序的機(jī)制,以及使用文件服務(wù)器持久化數(shù)據(jù)。其中的類在命名時(shí)都帶有前綴“*Apa”。CONE是控制環(huán)境的縮寫,在這個(gè)組件中的類提供用于處理用戶輸入并創(chuàng)建用戶界面的機(jī)制--這些類主要用于和窗口服務(wù)器進(jìn)行交互,其中的類在命名時(shí)都帶有前綴“*Coe”。這一層中的許多類都是抽象類,僅僅定義了一個(gè)API的接口。
第三層:Uikon組件。這是具有豐富功能、非抽象框架類的一般性設(shè)備無關(guān)實(shí)現(xiàn),并且提供了一個(gè)在所有symbian OS上公用的UI庫層。一些具體的UI控件(比如列表框和滾動(dòng)條等)都可以在該層創(chuàng)建,這些控件有時(shí)也被稱為Eikon控件。UIkon組件中的類在命名時(shí)都帶有前綴“*Eik”。添加了一個(gè)公共的symbian OS實(shí)現(xiàn),和其他Symbian OS UI平臺(tái)共享。
第四層:由Avkon類組成,這些類提供了核心的S60 UI功能,例如菜單支持。Avkon控件的類在命名時(shí)都帶有前綴“*Akn”。在框架上添加S60特有的實(shí)現(xiàn)。
第五層:針對應(yīng)用程序的層,設(shè)計(jì)自己的應(yīng)用程序,添加自定義應(yīng)用程序?qū)崿F(xiàn)。
以上提到的這些類簡單來說就是:視圖(View)、文檔(Document)、應(yīng)用程序(Application)、應(yīng)用程序UI(Application UI)。那么一個(gè)S60 UI應(yīng)用程序是如何用這些類來實(shí)現(xiàn)其有機(jī)程序呢,這個(gè)就涉及到一個(gè)應(yīng)用程序框架的初始化問題。
應(yīng)用程序框架初始化
必須創(chuàng)建下面的每個(gè)方法,才能提供最小的S60應(yīng)用程序:
a、 框架入口:所有S60 UI都實(shí)現(xiàn)一個(gè)全局函數(shù)E32DLL()(非UI類的全局入口函數(shù)為E32Main),當(dāng)應(yīng)用程序啟動(dòng)時(shí),框架將首先調(diào)用該函數(shù),該函數(shù)也稱為DLL入口點(diǎn),應(yīng)用程序必須存在該函數(shù)。每個(gè)S60 UI 應(yīng)用程序都是一個(gè)多態(tài)DLL。
b、新建應(yīng)用程序?qū)嵗?/span>讓框架調(diào)用NewApplication(),該函數(shù)是由DLL導(dǎo)出的唯一函數(shù),負(fù)責(zé)創(chuàng)建應(yīng)用程序類的一個(gè)實(shí)例,并返回它的指針,以后框架使用該指針完成應(yīng)用程序的創(chuàng)建。這里在堆上創(chuàng)建應(yīng)用程序?qū)嵗褂玫氖?#8220;new”方法而不是Symbian OS常見的“new (ELeave)”方法,這是因?yàn)?span lang=EN>TRAP harness(陷阱捕捉)這時(shí)還沒有創(chuàng)立。如果系統(tǒng)不能為新的實(shí)例分配內(nèi)存,那返回的指針就是NULL,應(yīng)用程序框架能夠檢查到并處理這個(gè)問題。
c、返回UID:由框架調(diào)用AppDllUid()返回應(yīng)用程序的UID。該函數(shù)必須返回在.mmp文件中指定的UID值,該值可用于確定應(yīng)用程序的實(shí)例是否正在運(yùn)行。如果一個(gè)應(yīng)用程序正在運(yùn)行,而要啟動(dòng)這個(gè)程序的另一個(gè)實(shí)例,這時(shí)該運(yùn)行的程序就會(huì)被切換到前臺(tái),而不是重新生成一個(gè)。
d、新建文檔實(shí)例:框架通過框架調(diào)用應(yīng)用程序類實(shí)例的CreateDocumentL()函數(shù)獲取指向新創(chuàng)建的Document類實(shí)例的指針。通過文檔實(shí)例指針,框架就可以調(diào)用文檔實(shí)例的某些功能,同時(shí)文檔實(shí)例也通過調(diào)用自身的NewL()和NewLC()雙重靜態(tài)構(gòu)造函數(shù)(為什么是雙重構(gòu)造,這跟Symbian的異常處理機(jī)制有關(guān),而之所以設(shè)計(jì)成靜態(tài)函數(shù)我現(xiàn)在也還不是很清楚)來創(chuàng)建自己。
e、是否裝入文件:框架重新調(diào)用AppDllUid()來觀察是否要從文件系統(tǒng)中裝入一個(gè)文件。(似乎這里跟某些永久存儲(chǔ)信息有關(guān),目前項(xiàng)目還沒用到這個(gè)功能,我也不知道這個(gè)該怎么用)
f、 新建AppUi和View實(shí)例:框架通過調(diào)用文檔對象的CreateAppUiL()方法生成了一個(gè)AppUi實(shí)例并獲取指向它的指針。此處AppUi實(shí)例創(chuàng)建自身時(shí)使用的是C++的默認(rèn)構(gòu)造函數(shù)并返回實(shí)例的指針,之后框架通過這個(gè)指針調(diào)用AppUi實(shí)例的ConstructL()函數(shù)來完成構(gòu)造。而在這個(gè)ConstructL()函數(shù)中首先調(diào)用的是AppUi基類的BaseContructL()函數(shù),處理了讀入與該程序相關(guān)的資源的事宜,其次是新建需要加載的View類的實(shí)例(通過雙重構(gòu)造),如果不止一個(gè)View的情況下需要調(diào)用AddViewL()函數(shù)將新建的View實(shí)例加載進(jìn)來,最后如果是多個(gè)View時(shí)通過SetDefaultViewL()函數(shù)設(shè)置缺省的默認(rèn)視圖。如讀入一個(gè)與該程序相關(guān)的資源文件AppUi調(diào)用了AppView類的NewL函數(shù)來生成其實(shí)例,這里也是用的雙重構(gòu)造
g、 View的重繪:通過以上的創(chuàng)建過程,框架已經(jīng)擁有了View的無限調(diào)度權(quán)利,此時(shí)如果有一般的system事件框架就可以通過窗口服務(wù)器調(diào)用View的Draw()函數(shù),至于這些System事件一般指程序啟動(dòng)、應(yīng)用程序獲得焦點(diǎn)或者選項(xiàng)菜單消失等等。在這里需要注意的是編程開發(fā)者并不能直接調(diào)用Draw,它要求在調(diào)用前系統(tǒng)的graphics context處于激活狀態(tài),如果編程開發(fā)者希望進(jìn)行屏幕的重繪,則只能調(diào)用DrawNow()方法。還有就是Draw函數(shù)是不能異常退出的,這是因?yàn)樵摵瘮?shù)能被框架直接調(diào)用,而框架是不知道如何處理可能發(fā)生的異常的。因此Draw自己需要捕捉和處理可能發(fā)生的錯(cuò)誤。
h、 處理命令:完成以上步驟后,用戶可以通過比如菜單選項(xiàng)之類的交互UI使框架調(diào)用HandleCommandL()函數(shù),并傳遞一個(gè)參數(shù)aCommand,它指明了用戶所選擇的命令,HandleCommandL()會(huì)據(jù)此來判斷不同的命令以分別調(diào)度執(zhí)行。在此處還有一個(gè)必須注意的地方是如果要程序的View實(shí)例也回應(yīng)用戶的按鍵,則必須將View實(shí)例通過AppUi的AddToStackL()函數(shù)加入到AppUi實(shí)例的控件堆棧(control stack)中。具體的調(diào)用方式實(shí)現(xiàn)以按鍵來解釋如下流程所示:
對于上面的調(diào)用方式實(shí)現(xiàn)說明,個(gè)人覺得有必要再將AppUi的幾個(gè)重要事件處理方法羅列一下:
HandleWsEventL()用于處理窗口服務(wù)器傳遞的事件,它的作用使框架調(diào)用下面這些具體事件處理方法;
HandKeyEvent()用于處理用戶按鍵事件(此函數(shù)在控件堆棧為空時(shí)調(diào)用,否則框架將會(huì)調(diào)用OfferKeyEventL()函數(shù));
HandleForegroundEventL()當(dāng)應(yīng)用程序切換到前臺(tái)或從前臺(tái)切換到后臺(tái)時(shí)調(diào)用該函數(shù),默認(rèn)的實(shí)現(xiàn)可以處理鍵盤焦點(diǎn)的改變;
HandleSystemEventL()用于處理由窗口服務(wù)器生成的事件;
HandleApplicationSpecificEventL()用于處理自己定義的自定義事件。默認(rèn)的實(shí)現(xiàn)可以處理顏色方案改變的通知;
HandleCommandL()用于處理用戶選擇的菜單項(xiàng);
HandleSwitchOnEventL()用于處理像設(shè)備切換之類的特定切換事件;
HandleMessageReadyL()用于處理窗口服務(wù)器產(chǎn)生的消息事件。
在以上各函數(shù)處理事件中,除了第一個(gè)HandleWsEventL()函數(shù)外,其它函數(shù)默認(rèn)都是純虛函數(shù),需要重載才能用。
通過以上對應(yīng)用程序框架初始化步驟后,一個(gè)完整的框架就創(chuàng)建完畢了,其具體過程可以由一個(gè)圖來形象做結(jié)。
本文中參考了網(wǎng)絡(luò)上的一些文章鏈接如下:
Symbian程序框架研究http://www.sf.org.cn/Article/lumen/200607/18837.html
Symbian開發(fā)初級手冊http://www.sf.org.cn/Article/lumen/200508/34.html
posted @
2007-09-21 06:56 frank.sunny 閱讀(3861) |
評論 (0) |
編輯 收藏
摘要:
Symbian 資源文件解析
一、何為資源文件:
在symbian應(yīng)用程序中,資源文件指的是后綴名為.rss的文件,每個(gè)應(yīng)用程序至少要有一個(gè)與之關(guān)聯(lián)的資源文件。資源編譯器rcomp編譯資源文件后,生成一個(gè).rsc二進(jìn)制文件和一個(gè)相伴的頭文件(.rsg)。這樣在應(yīng)用程序框架啟動(dòng)應(yīng)用程序時(shí),會(huì)打開這個(gè)二進(jìn)制文件,借助在.rsg文件中創(chuàng)建的資源標(biāo)志符,根據(jù)需要把各個(gè)資...
閱讀全文
posted @
2007-09-19 17:30 frank.sunny 閱讀(2418) |
評論 (0) |
編輯 收藏
摘要: 該文檔在網(wǎng)上比較多見,我只是找來結(jié)合自己的安裝做了些增補(bǔ),增補(bǔ)以紅色字體示出
第一章 環(huán)境搭建
Symbian是Nokia公司開發(fā)的一款智能手機(jī)操作系統(tǒng)。Nokia根據(jù)手機(jī)的屏幕大小和價(jià)格高低把手機(jī)分成了多...
閱讀全文
posted @
2007-09-19 17:27 frank.sunny 閱讀(2080) |
評論 (4) |
編輯 收藏
自從開始用VC以后,一直以來都在用Visual Assist,感覺這個(gè)工具真的非常好,但是有些自動(dòng)文檔功能就個(gè)人覺得并非很適合,不過可能由于自身的E文比較差吧,從來沒想過自己如何去修改這個(gè)東西。來新單位已經(jīng)兩個(gè)禮拜了,馬上又要下班了,就沖著這個(gè)查了下如何修改AutoText,終于發(fā)現(xiàn)了官網(wǎng)上的詳細(xì)說明,現(xiàn)在粘帖在下面,以備不時(shí)之需
http://www.wholetomato.com/products/features/autotext.asp為了查找方便,自己也將常用的命令粘帖過來
Code
Type your expanded code into the Code field. Include reserved strings to expand the date, filename and more.
|
Reserved String |
Meaning |
| Date |
$DATE$ |
Year/month/day formatted as %04d/%02d/%02d |
|
$DAY$ |
Day of month formatted as %d |
|
$DAY_02$ |
Day of month formatted as %02d |
|
$DAYNAME$ |
Three-character abbreviation of day |
|
$DAYLONGNAME$ |
Full name of day |
|
$MONTH$ |
Month formatted as %d |
|
$MONTH_02$ |
Month formatted as %02d |
|
$MONTHNAME$ |
Three-character abbreviation of month |
|
$MONTHLONGNAME$ |
Full name of month |
|
$YEAR$ |
Year formatted as %d |
|
$YEAR_02$ |
Year formatted as %02d |
| File |
$FILE$ |
Full filename with path* |
|
$FILE_UPPER$ |
Full filename with path in uppercase* |
|
$FILE_BASE$ |
Filename without path or extension* |
|
$FILE_BASE_UPPER$ |
Filename without path or extension in upper case* |
|
$FILE_EXT$ |
Filename extension* |
|
$FILE_EXT_UPPER$ |
Filename extension in upper case* |
|
$FILE_PATH$ |
Path of file* |
|
$FILE_PATH_UPPER$ |
Path of file in upper case* |
| General |
$clipboard$ |
Current clipboard |
|
$end$ |
Position of caret after expansion |
|
$selected$ |
Current selection** |
|
$$ |
$ |
| GUID |
$GUID_DEFINITION$ |
Generated GUID formatted for use in a definition |
|
$GUID_STRING$ |
Generated GUID formatted for use in a string |
|
$GUID_STRUCT$ |
Generated GUID formatted for use in a struct |
|
(Note that all instances of GUID reserved words will use a singe generated GUID.) |
| Refactor |
$GeneratedPropertyName$ |
Property name generated during Encapsulate Field |
|
$MethodArg$ |
One parameter of the method and its type |
|
$MethodArgName$ |
One parameter of the method |
|
$MethodArgType$ |
Type of one parameter of the method |
|
$MethodBody$ |
Body of implementation |
|
$MethodQualifier$
| Optional qualifiers of method |
|
$ParameterList$ |
Parameters separated by commas |
|
$SymbolContext$ |
Context and name of method |
|
$SymbolName$ |
Name of method |
|
$SymbolPrivileges$ |
Access of method |
|
$SymbolStatic$ |
Keyword static or blank |
|
$SymbolType$ |
Return type of method |
|
$SymbolVirtual$ |
Keyword virtual or blank |
| Time |
$HOUR$ |
Hour formatted as %d |
|
$HOUR_02$ |
Hour formatted as %02d |
|
$MINUTE$ |
Minute formatted as %02d |
|
$SECOND$ |
Second formatted as %02d |
*Reserved strings beginning with $FILE expand using the case of the current file.
**Lines with whitespace and $selected$ are omitted from expanded code if there is no selection. (This lets you define a single entry to be used with and without a selection.)
Autotext entries containing $GUID_* are available in IDL files.
Access the list of reserved strings using the context menu inside the Code field when editing Autotext.
posted @
2007-09-14 17:27 frank.sunny 閱讀(1515) |
評論 (0) |
編輯 收藏
摘要:
IP地址與子網(wǎng)掩碼
一般考試中都會(huì)給定一個(gè)IP地址和對應(yīng)的子網(wǎng)掩碼,讓你計(jì)算1、子網(wǎng)數(shù)目2、網(wǎng)絡(luò)號3、主機(jī)號4、廣播地址5、可用IP地址范圍碰到這類題,我們應(yīng)該怎么樣來解題呢。方法如下:
首先,不要管這個(gè)IP是A類還是B類還是C類,IP是哪一類對于解題是沒有任何意義的,因?yàn)樵诤芏囝}中B類掩碼和A類或是C類網(wǎng)絡(luò)一起出現(xiàn),不要把這認(rèn)為是一個(gè)錯(cuò)誤,很多時(shí)候都是這樣出題...
閱讀全文
posted @
2007-08-05 22:03 frank.sunny 閱讀(1692) |
評論 (5) |
編輯 收藏
關(guān)于C51內(nèi)的code,idata,xdata
以前沒搞過C51,大學(xué)時(shí)代跟單片機(jī)老師的時(shí)候也是搗鼓下匯編,現(xiàn)在重新搞單片機(jī),因?yàn)槭诸^資料不多,找到一些C51的程序,發(fā)現(xiàn)里面有這些關(guān)鍵字,不甚明了,沒辦法只好找了下,發(fā)現(xiàn)如下描述:
從數(shù)據(jù)存儲(chǔ)類型來說,8051系列有片內(nèi)、片外程序存儲(chǔ)器,片內(nèi)、片外數(shù)據(jù)存儲(chǔ)器,片內(nèi)程序存儲(chǔ)器還分直接尋址區(qū)和間接尋址類型,分別對應(yīng)code、data、xdata、idata以及根據(jù)51系列特點(diǎn)而設(shè)定的pdata類型,使用不同的存儲(chǔ)器,將使程序執(zhí)行效率不同,在編寫C51程序時(shí),最好指定變量的存儲(chǔ)類型,這樣將有利于提高程序執(zhí)行效率(此問題將在后面專門講述)。與ANSI-C稍有不同,它只分SAMLL、COMPACT、LARGE模式,各種不同的模式對應(yīng)不同的實(shí)際硬件系統(tǒng),也將有不同的編譯結(jié)果。
在51系列中data,idata,xdata,pdata的區(qū)別
data:固定指前面0x00-0x7f的128個(gè)RAM,可以用acc直接讀寫的,速度最快,生成的代碼也最小。
idata:固定指前面0x00-0xff的256個(gè)RAM,其中前128和data的128完全相同,只是因?yàn)樵L問的方式不同。idata是用類似C中的指針方式訪問的。匯編中的語句為:mox ACC,@Rx.(不重要的補(bǔ)充:c中idata做指針式的訪問效果很好)
xdata:外部擴(kuò)展RAM,一般指外部0x0000-0xffff空間,用DPTR訪問。
pdata:外部擴(kuò)展RAM的低256個(gè)字節(jié),地址出現(xiàn)在A0-A7的上時(shí)讀寫,用movx ACC,@Rx讀寫。這個(gè)比較特殊,而且C51好象有對此BUG,建議少用。但也有他的優(yōu)點(diǎn),具體用法屬于中級問題,這里不提。
posted @
2007-08-05 18:19 frank.sunny 閱讀(8610) |
評論 (0) |
編輯 收藏
摘要:
USB設(shè)備枚舉全紀(jì)錄
在編寫這部分程序之前,首先需要了解有關(guān)USB協(xié)議,重點(diǎn)是USB數(shù)據(jù)通信結(jié)構(gòu)、11條標(biāo)準(zhǔn)請求命令和標(biāo)準(zhǔn)USB描述符。
因?yàn)榍度胧皆O(shè)備的軟硬件是密切相關(guān)的,所以還需做的準(zhǔn)備工作是了解選用的USB芯片及主控MCU的性能。
一.硬件篇
USB芯片
作用:
1. 管理...
閱讀全文
posted @
2007-08-04 21:33 frank.sunny 閱讀(5403) |
評論 (2) |
編輯 收藏