• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            franksunny的個人技術空間
            獲得人生中的成功需要的專注與堅持不懈多過天才與機會。 ——C.W. Wendte

            今天一個很偶然的機會,需要回答一個將無符號數據存到有符號變量的問題。我編碼如下,結果很有意思,我是在VC6里調試的,有高人看到可否幫忙指點下。
            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;
            }
            //改程序的輸出結果
            //temp1 = 65535
            //temp2 = -1
            //temp3 = 65535
            //temp4 = 65535
            //temp5 = -1
            //temp6 = -1
            //temp7 = -1
            //temp8 = 65535
            //temp9 = -1;


            //根據結果也就是說,無符號符號數據是可以存儲在有符號型變量內存中的,
            //而且有例子在內存塊長度一樣時,不用強轉,直接賦給無符號變量時也可行
            //上述事實可以解釋為內存塊不變,采用不同的解碼方式解出不同的數據
            //但是讀出來的時候要注意,如果有符號轉無符號一定要強轉
            //之所以上例unsigned int輸出-1,我并不是很清楚

            posted @ 2007-10-17 22:46 frank.sunny 閱讀(3007) | 評論 (13)編輯 收藏
                 摘要: 昨天遇到類內靜態函數,本想自己整理下,誰知道已經有人整理的很好了,為此就不麻煩了,看了一篇就轉貼在自己空間里,以便以后查詢。C++的static關鍵字作者:韓耀旭 C++的static有兩種用法:面向過程程序設計中的static和面向對象程序設計中的static。前者應用于普通變量和函數,不涉及類;后者主要說明static在類中的作用。 一、面向過程設計中的static 1、靜態全局變量 ...  閱讀全文
            posted @ 2007-10-16 21:03 frank.sunny 閱讀(1758) | 評論 (2)編輯 收藏

            本文并非本人原創,文中紅色字體為我新加,原文出處http://blog.donews.com/sevenworld/archive/2005/10/17/591911.aspx

             

            如何設置S60模擬器的網絡參數

             

            在調試使用Socket進行數據通訊的Symbian S60程序過程中,需要編寫客戶端與服務器的數據交互代碼,如果S60的模擬器可以直接訪問網絡中的服務器程序,調試就會非常方便。S60的模擬器提供了這些功能,不過需要對網絡參數進行一些設置,下面將討論這一問題。

            首先是網絡參數的設置,在Symbian安裝目錄的..\Epoc32\tools目錄下有一個網絡參數設置程序network_config.bat,對于不同的開發包,這個名字可能會有一些不同(可以選擇開始菜單下SDK目錄tools下的Ethernet Support Configuration)。執行該程序,將顯示參數設置界面。其實參數的設置和對局域網中的PC設置一樣,你就把它當成是在設置PC的網絡配置就可以了。分配一個沒有使用的IP注意絕對不能與本機IP相同),填寫好子網掩碼,設置好局域網的網關。唯一的不同是要選擇所使用的網卡。當你點OK關閉該設置對話框的時候(或著點那個Adapters按鈕),會顯示一個命令行界面,列出了當前機器上可以使用的網卡的信息,你需要輸入一個數字選擇一個網卡,注意,應該選擇你的PC所使用的那個真實的網卡,也就是標識你機器在局域網內IP地址的那個網卡。

            按照官方文檔來說,這樣就可以,但實際上不是所有的機器都可以,我沒有測試過,不知道別人的機器如何,反正我使用的機器不可以。后來我在一本書里看到,還需要運行另外一個程序,才可以達到我們的目的。這個程序與上面的設置程序在同一個目錄下,叫做npacketadmin.exe。執行它,會顯示一個程序,并跳出一個設置對話框,首先在下拉列表框里選擇你剛才選定的那個網卡,然后點擊下面的Start按鈕,這樣就可以了。這時你就可以使用模擬器調試你的Symbian S60通訊程序了。(我實際測試中發現不用啟動npacketadmin.exe也是可以的

            測試是否連通的方法是,執行模擬器中的網絡應用程序,然后輸入一個網址,比如www.sina.com.cn,如果設置正確,將顯示該頁面,注意也許是亂碼,不過不要緊,因為我們只想知道網絡是否已經可用了。(強烈建議使用非中文網站做測試,比如www.google.com

             

            如果以上的過程中,不啟動npacketadmin.exe就不能連接的用戶,必須注意下面幾個問題:

            1.在調試期間可以關閉npacketadmin.exe的那個設置對話框,但是不能關閉該程序。如果關閉了,網絡將不通。

            2.如果不小心關閉了該程序,需要重新啟動,并重新做上面的第二步的操作。

            3.應該在啟動模擬器之前就啟動該程序,不然模擬器可能會異常退出。

             

             

            本人剛開始調試時,犯了以下一些問題:

            首先用msconfig工具將S60Ethernet Packet Service這個服務停掉了,后來每一次模擬器試圖用Socket連接時都彈出“Error1058 無法啟動服務……”的報錯。該錯誤在npacketadmin.exe啟動時也會出現。

            其次沒有注意IP的問題,用跟本機同一個IP,結果怎么連都連不上,后來改成我同事的,害得他一個下午都因為網絡上有同名IP而半天沒得上網。



            另注:最近更換環境時發現,假如主機是通過自動獲取ip就可以上網的話,不知道模擬器的ip不設,讀者能否實現,我本人試過老是出現“網關無響應”提示,所以我覺得原則上還是需要設置ip的,當然前提是主機設了固定IP也能上網,然后模擬器設置一個不同于主機的ip地址 modify 2008.03.17
            posted @ 2007-09-25 16:21 frank.sunny 閱讀(2893) | 評論 (2)編輯 收藏

            本文檔我上傳過程中圖片沒有粘貼上來,為此如果有人感興趣,請下載word文檔,地址是http://www.shnenglu.com/Files/franksunny/Symbian應用程序框架淺析.rar,歡迎大家給我指點。

            Symbian 應用程序框架淺析

             

            S60應用程序的運行依賴于大量的OS組件,例如屏幕繪圖和應用程序數據持久性等,可以直接使用OS的窗口服務器或者文件服務器即可。

             

            應用程序核心框架類

            應用程序框架由一套核心類組成,這些類是所有應用程序框架的基礎。這些類封裝了應用程序和所需OS服務器之間的相互作用。

            應用程序核心框架類

            第一層:CBaseCActive兩個基類,其中CActive也是派生于CBase,而CActive又被第二層的CConEnv派生

            第二層:包含兩個基本組件:AppArcCONEAppArc代表應用程序架構,這些類提供了基本的應用程序結構、將系統信息提交到應用程序的機制,以及使用文件服務器持久化數據。其中的類在命名時都帶有前綴“*Apa”CONE是控制環境的縮寫,在這個組件中的類提供用于處理用戶輸入并創建用戶界面的機制--這些類主要用于和窗口服務器進行交互,其中的類在命名時都帶有前綴“*Coe”這一層中的許多類都是抽象類,僅僅定義了一個API的接口。

            第三層:Uikon組件。這是具有豐富功能、非抽象框架類的一般性設備無關實現,并且提供了一個在所有symbian OS上公用的UI庫層。一些具體的UI控件(比如列表框和滾動條等)都可以在該層創建,這些控件有時也被稱為Eikon控件。UIkon組件中的類在命名時都帶有前綴“*Eik”添加了一個公共的symbian OS實現,和其他Symbian OS UI平臺共享。

            第四層:由Avkon類組成,這些類提供了核心的S60 UI功能,例如菜單支持。Avkon控件的類在命名時都帶有前綴“*Akn”在框架上添加S60特有的實現。

            第五層:針對應用程序的層,設計自己的應用程序,添加自定義應用程序實現。

            以上提到的這些類簡單來說就是:視圖(View)、文檔(Document)、應用程序(Application)、應用程序UIApplication UI)。那么一個S60 UI應用程序是如何用這些類來實現其有機程序呢,這個就涉及到一個應用程序框架的初始化問題。

             

            應用程序框架初始化

            必須創建下面的每個方法,才能提供最小的S60應用程序:

            a 框架入口:所有S60 UI都實現一個全局函數E32DLL()(非UI類的全局入口函數為E32Main),當應用程序啟動時,框架將首先調用該函數,該函數也稱為DLL入口點,應用程序必須存在該函數。每個S60 UI 應用程序都是一個多態DLL

            b、新建應用程序實例:讓框架調用NewApplication(),該函數是由DLL導出的唯一函數,負責創建應用程序類的一個實例,并返回它的指針,以后框架使用該指針完成應用程序的創建。這里在堆上創建應用程序實例使用的是“new”方法而不是Symbian OS常見的“new (ELeave)”方法,這是因為TRAP harness(陷阱捕捉)這時還沒有創立。如果系統不能為新的實例分配內存,那返回的指針就是NULL,應用程序框架能夠檢查到并處理這個問題。

            c、返回UID由框架調用AppDllUid()返回應用程序的UID。該函數必須返回在.mmp文件中指定的UID值,該值可用于確定應用程序的實例是否正在運行。如果一個應用程序正在運行,而要啟動這個程序的另一個實例,這時該運行的程序就會被切換到前臺,而不是重新生成一個。

            d、新建文檔實例:框架通過框架調用應用程序類實例的CreateDocumentL()函數獲取指向新創建的Document類實例的指針。通過文檔實例指針,框架就可以調用文檔實例的某些功能,同時文檔實例也通過調用自身的NewL()和NewLC()雙重靜態構造函數(為什么是雙重構造,這跟Symbian的異常處理機制有關,而之所以設計成靜態函數我現在也還不是很清楚)來創建自己。

            e、是否裝入文件:框架重新調用AppDllUid()來觀察是否要從文件系統中裝入一個文件。(似乎這里跟某些永久存儲信息有關,目前項目還沒用到這個功能,我也不知道這個該怎么用

            f 新建AppUiView實例:框架通過調用文檔對象的CreateAppUiL()方法生成了一個AppUi實例并獲取指向它的指針。此處AppUi實例創建自身時使用的是C++的默認構造函數并返回實例的指針,之后框架通過這個指針調用AppUi實例的ConstructL()函數來完成構造。而在這個ConstructL()函數中首先調用的是AppUi基類的BaseContructL()函數,處理了讀入與該程序相關的資源的事宜,其次是新建需要加載的View類的實例(通過雙重構造),如果不止一個View的情況下需要調用AddViewL()函數將新建的View實例加載進來,最后如果是多個View時通過SetDefaultViewL()函數設置缺省的默認視圖。如讀入一個與該程序相關的資源文件AppUi調用了AppView類的NewL函數來生成其實例,這里也是用的雙重構造

            g View的重繪:通過以上的創建過程,框架已經擁有了View的無限調度權利,此時如果有一般的system事件框架就可以通過窗口服務器調用ViewDraw()函數,至于這些System事件一般指程序啟動、應用程序獲得焦點或者選項菜單消失等等。在這里需要注意的是編程開發者并不能直接調用Draw,它要求在調用前系統的graphics context處于激活狀態,如果編程開發者希望進行屏幕的重繪,則只能調用DrawNow()方法。還有就是Draw函數是不能異常退出的,這是因為該函數能被框架直接調用,而框架是不知道如何處理可能發生的異常的。因此Draw自己需要捕捉和處理可能發生的錯誤。

            h 處理命令:完成以上步驟后,用戶可以通過比如菜單選項之類的交互UI使框架調用HandleCommandL()函數,并傳遞一個參數aCommand,它指明了用戶所選擇的命令,HandleCommandL()會據此來判斷不同的命令以分別調度執行。在此處還有一個必須注意的地方是如果要程序的View實例也回應用戶的按鍵,則必須將View實例通過AppUiAddToStackL()函數加入到AppUi實例的控件堆棧(control stack)中。具體的調用方式實現以按鍵來解釋如下流程所示:

            對于上面的調用方式實現說明,個人覺得有必要再將AppUi的幾個重要事件處理方法羅列一下:

            HandleWsEventL()用于處理窗口服務器傳遞的事件,它的作用使框架調用下面這些具體事件處理方法;

            HandKeyEvent()用于處理用戶按鍵事件(此函數在控件堆棧為空時調用,否則框架將會調用OfferKeyEventL()函數);

            HandleForegroundEventL()當應用程序切換到前臺或從前臺切換到后臺時調用該函數,默認的實現可以處理鍵盤焦點的改變;

            HandleSystemEventL()用于處理由窗口服務器生成的事件;

            HandleApplicationSpecificEventL()用于處理自己定義的自定義事件。默認的實現可以處理顏色方案改變的通知;

            HandleCommandL()用于處理用戶選擇的菜單項;

            HandleSwitchOnEventL()用于處理像設備切換之類的特定切換事件;

            HandleMessageReadyL()用于處理窗口服務器產生的消息事件。

            在以上各函數處理事件中,除了第一個HandleWsEventL()函數外,其它函數默認都是純虛函數,需要重載才能用。

            通過以上對應用程序框架初始化步驟后,一個完整的框架就創建完畢了,其具體過程可以由一個圖來形象做結。

            本文中參考了網絡上的一些文章鏈接如下:

            Symbian程序框架研究http://www.sf.org.cn/Article/lumen/200607/18837.html

            Symbian開發初級手冊http://www.sf.org.cn/Article/lumen/200508/34.html

             

             

             

            posted @ 2007-09-21 06:56 frank.sunny 閱讀(3850) | 評論 (0)編輯 收藏
                 摘要:   Symbian 資源文件解析   一、何為資源文件: 在symbian應用程序中,資源文件指的是后綴名為.rss的文件,每個應用程序至少要有一個與之關聯的資源文件。資源編譯器rcomp編譯資源文件后,生成一個.rsc二進制文件和一個相伴的頭文件(.rsg)。這樣在應用程序框架啟動應用程序時,會打開這個二進制文件,借助在.rsg文件中創建的資源標志符,根據需要把各個資...  閱讀全文
            posted @ 2007-09-19 17:30 frank.sunny 閱讀(2403) | 評論 (0)編輯 收藏
                 摘要: 該文檔在網上比較多見,我只是找來結合自己的安裝做了些增補,增補以紅色字體示出 第一章     環境搭建               Symbian是Nokia公司開發的一款智能手機操作系統。Nokia根據手機的屏幕大小和價格高低把手機分成了多...  閱讀全文
            posted @ 2007-09-19 17:27 frank.sunny 閱讀(2055) | 評論 (4)編輯 收藏

            自從開始用VC以后,一直以來都在用Visual Assist,感覺這個工具真的非常好,但是有些自動文檔功能就個人覺得并非很適合,不過可能由于自身的E文比較差吧,從來沒想過自己如何去修改這個東西。來新單位已經兩個禮拜了,馬上又要下班了,就沖著這個查了下如何修改AutoText,終于發現了官網上的詳細說明,現在粘帖在下面,以備不時之需 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.

            autotextCodeInsertNew.png 
            posted @ 2007-09-14 17:27 frank.sunny 閱讀(1487) | 評論 (0)編輯 收藏
                 摘要:   IP地址與子網掩碼   一般考試中都會給定一個IP地址和對應的子網掩碼,讓你計算1、子網數目2、網絡號3、主機號4、廣播地址5、可用IP地址范圍碰到這類題,我們應該怎么樣來解題呢。方法如下: 首先,不要管這個IP是A類還是B類還是C類,IP是哪一類對于解題是沒有任何意義的,因為在很多題中B類掩碼和A類或是C類網絡一起出現,不要把這認為是一個錯誤,很多時候都是這樣出題...  閱讀全文
            posted @ 2007-08-05 22:03 frank.sunny 閱讀(1648) | 評論 (5)編輯 收藏

             

            關于C51內的codeidataxdata

             

            以前沒搞過C51,大學時代跟單片機老師的時候也是搗鼓下匯編,現在重新搞單片機,因為手頭資料不多,找到一些C51的程序,發現里面有這些關鍵字,不甚明了,沒辦法只好找了下,發現如下描述:


               從數據存儲類型來說,
            8051系列有片內、片外程序存儲器,片內、片外數據存儲器,片內程序存儲器還分直接尋址區和間接尋址類型,分別對應codedataxdataidata以及根據51系列特點而設定的pdata類型,使用不同的存儲器,將使程序執行效率不同,在編寫C51程序時,最好指定變量的存儲類型,這樣將有利于提高程序執行效率(此問題將在后面專門講述)。與ANSI-C稍有不同,它只分SAMLLCOMPACTLARGE模式,各種不同的模式對應不同的實際硬件系統,也將有不同的編譯結果。

             

            51系列中data,idata,xdata,pdata的區別

            data:固定指前面0x00-0x7f128RAM,可以用acc直接讀寫的,速度最快,生成的代碼也最小。

            idata:固定指前面0x00-0xff256RAM,其中前128data128完全相同,只是因為訪問的方式不同。idata是用類似C中的指針方式訪問的。匯編中的語句為:mox ACC,@Rx.(不重要的補充:cidata做指針式的訪問效果很好)

            xdata:外部擴展RAM,一般指外部0x0000-0xffff空間,用DPTR訪問。

            pdata:外部擴展RAM的低256個字節,地址出現在A0-A7的上時讀寫,用movx ACC,@Rx讀寫。這個比較特殊,而且C51好象有對此BUG,建議少用。但也有他的優點,具體用法屬于中級問題,這里不提。

             

             

            posted @ 2007-08-05 18:19 frank.sunny 閱讀(8584) | 評論 (0)編輯 收藏
                 摘要:   USB設備枚舉全紀錄   在編寫這部分程序之前,首先需要了解有關USB協議,重點是USB數據通信結構、11條標準請求命令和標準USB描述符。 因為嵌入式設備的軟硬件是密切相關的,所以還需做的準備工作是了解選用的USB芯片及主控MCU的性能。   一.硬件篇 USB芯片 作用: 1.      管理...  閱讀全文
            posted @ 2007-08-04 21:33 frank.sunny 閱讀(5370) | 評論 (2)編輯 收藏
            僅列出標題
            共7頁: 1 2 3 4 5 6 7 

            常用鏈接

            留言簿(13)

            隨筆分類

            個人其它博客

            基礎知識鏈接

            最新評論

            閱讀排行榜

            評論排行榜

            久久99精品久久只有精品| 大香网伊人久久综合网2020| 国产亚州精品女人久久久久久| 亚洲精品无码久久久久sm| 久久亚洲AV无码精品色午夜 | 久久99精品久久只有精品| 久久久久久综合网天天| 青青青青久久精品国产h久久精品五福影院1421| av无码久久久久久不卡网站| 久久狠狠高潮亚洲精品| 国产麻豆精品久久一二三| 99久久国产热无码精品免费| 国产精品久久免费| 久久精品成人国产午夜| 国产免费久久精品丫丫| 久久综合精品国产一区二区三区| 久久久久久久久久久免费精品| 久久不见久久见免费影院www日本| 久久精品女人天堂AV麻| 污污内射久久一区二区欧美日韩| 久久婷婷五月综合色99啪ak| 狠狠色丁香久久婷婷综合图片| 亚洲中文字幕无码久久精品1| 久久人人爽人人爽人人AV | 久久只这里是精品66| 久久精品aⅴ无码中文字字幕不卡| 人妻丰满AV无码久久不卡| 日本精品久久久久中文字幕| 久久久久国色AV免费观看| 亚洲国产精品久久电影欧美| 国产精品久久亚洲不卡动漫| 久久精品无码一区二区app| 一级a性色生活片久久无| 精品免费久久久久久久| 久久这里有精品视频| 麻豆亚洲AV永久无码精品久久| 99精品久久久久久久婷婷| 欧美亚洲国产精品久久高清| 青青草国产精品久久| 亚洲AV无码久久精品成人| 国产精品综合久久第一页|