找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2645|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

各開發(fā)平臺(tái)編程技巧

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:60266 發(fā)表于 2014-8-18 00:41 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  本文說(shuō)的某些技巧是基于某個(gè)編譯與調(diào)試環(huán)境的,其中的有些規(guī)則是相同的,有些是有差別的;

【keil環(huán)境,M3硬件平臺(tái)】1: 全局變量的定義:      int Array[100];
                static  intArray[100];這兩種定義方法有何區(qū)別?
  【為什么單步調(diào)試時(shí),有時(shí)候無(wú)法查看 staticint Array[100]數(shù)組,有時(shí)候可以,但是intArray[100]卻不會(huì)有這種現(xiàn)象?
  大家都知道用在函數(shù)體外定義的變量或數(shù)組,不論是否添加static,他們的屬性都是全局的,在RAM中,他們都對(duì)應(yīng)的物理地址;只不過(guò)在C文件中不同的地方定義,它的作用是不一樣的;
  如果在已是全局變量或全局?jǐn)?shù)組前加上static,情況會(huì)如何?加上static表明該符號(hào)只能在文件內(nèi)使用,即不能使用符號(hào)導(dǎo)出;在其他的文件中不能看見該符號(hào),沒有加static的全局變量,其他文件可以通過(guò)符號(hào)導(dǎo)出應(yīng)用該符號(hào)。
  那么keil環(huán)境中,調(diào)試的時(shí)候,又會(huì)有什么不一樣?在keil環(huán)境中調(diào)試時(shí),暫停CPU的運(yùn)行,這時(shí)指令會(huì)暫停在某個(gè)文件的某一行,這時(shí)如果要查看另外一個(gè)文件中的全局變量,如果變量的定義是static intArray[100],那么此時(shí)就不能在watch/memery窗口中查看,要想查看,必須讓CPU暫停在static intArray[100]所在的文件中,這樣才能查看到該變量或數(shù)組,原因就是該符號(hào)是本地的,但如果定義是intArray[100],就不會(huì)出現(xiàn)上面的情況。  

2:頭文件的相對(duì)路徑設(shè)置 #include   “.\..\uCGUI\LCDDriver\ili932x.h”
某個(gè)頭文件中要包含ili932x.h,而ili932x.h在本頭文件所在目錄的上層目錄,可以用上面的設(shè)置。
.\ 表示本文件所在的當(dāng)前目錄下, ..\表示進(jìn)入本文件上一層目錄中,

3.在keil4中,在函數(shù)體內(nèi)部定義的局部變量,很多時(shí)候都是使用CPU的寄存器,如果不夠就使用它的系統(tǒng)棧,這樣的話,在調(diào)試的時(shí)候查看變量是看不到正確的結(jié)果的,但是程序中使用這些變量沒問(wèn)題;
如我在函數(shù)中定義一個(gè)私有的結(jié)構(gòu)體,接下來(lái)讀取SD卡對(duì)他的各個(gè)成員賦值;在調(diào)試時(shí),暫停CPU來(lái)看各個(gè)變量,這時(shí)看到的全是0.以為是程序出了問(wèn)題,其實(shí)是軟件的使用沒有使用正確,這時(shí)調(diào)試時(shí)是看不到這些私有數(shù)據(jù)的,他們都是棧中,調(diào)試器不能在棧中定位到他們;這時(shí)我將他們定義為被系統(tǒng)分配的地址的全局變量,在查看各個(gè)成員,就沒有問(wèn)題。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表