博客主頁(yè)尤莺,歡迎訪問(wèn):blog.spursgo.com
使用K60單片機(jī)時(shí)释涛,往往使用IAR的比較多署浩。但是我之前一直使用KEIL來(lái)進(jìn)行stm32的開發(fā)循集,所以就有一種先入為主的觀念,總覺(jué)得KEIL比IAR要好一些窿撬。隨著和IAR打交道越來(lái)越多启昧,漸漸地發(fā)現(xiàn)IAR也是一款十分優(yōu)秀的軟件,給我們的編程開發(fā)帶來(lái)了很大的方便劈伴。
下面密末,我把我使用IAR時(shí),個(gè)人認(rèn)為重要的一些東西分享出來(lái)跛璧。
1.關(guān)于IAR中的文件路徑問(wèn)題
這里講的是相對(duì)路徑:為什么要使用相對(duì)路徑呢严里?舉個(gè)例子,我在IAR的工程給一個(gè)配置文件配置了絕對(duì)路徑追城,那么你會(huì)發(fā)現(xiàn)刹碾,當(dāng)你把這個(gè)工程換一個(gè)地方或者發(fā)送給其他的人使用,程序中會(huì)報(bào)錯(cuò)座柱。
其實(shí)這就絕對(duì)路徑惹的禍迷帜,如果你不改變工程的位置,那就沒(méi)有問(wèn)題色洞。但是戏锹,這樣很不方便呀,改變位置或者發(fā)送給其他人使用是很正常的事呀火诸!
這個(gè)時(shí)候相對(duì)路徑就登場(chǎng)了景用!
下面給一個(gè)使用相對(duì)路徑的例子:
這是K60中的一個(gè)配置文件,使用了相對(duì)路徑惭蹂,可以不受工程位置的影響了伞插!
那么,就來(lái)說(shuō)說(shuō)相對(duì)路徑的具體情況吧盾碗。
$PROJ_DIR$\..\..\Lib\icf_files\512KB_Pflash.icf
首先媚污,看一看$PROJ_DIR$表示什么意思吧!根據(jù)簡(jiǎn)寫的英文大寫廷雅,我們姑且猜它是工程所在的目錄耗美,因?yàn)镻ROJ是project工程簡(jiǎn)寫,DIR是directory的簡(jiǎn)寫航缀。猜對(duì)了嗎商架?哈哈,當(dāng)然喏芥玉,這么簡(jiǎn)單的英文說(shuō)不會(huì)呀蛇摸!這就是見(jiàn)名知義的好處哦,在各種編程語(yǔ)言中灿巧,見(jiàn)名知義都是大力推崇地哦赶袄!
那么還有一個(gè)疑問(wèn)揽涮,$PROJ_DIR$雖然是工程所在目錄,那么工程所在目錄又在哪里呢?
有兩個(gè)非常重要的文件饿肺,以我的工程為例:
文件smartcarB.ewd ?和smartcarB.ewp 所在目錄就是我們所說(shuō)的工程所在目錄蒋困,這一點(diǎn)非常重要哦!在配置編譯路徑的時(shí)候會(huì)使用到敬辣,下面也會(huì)講一講的雪标。
接下來(lái)就講一講\..\..\Lib\icf_files\512KB_Pflash.icf的含義吧!
\..:表示返回上一級(jí)文件夾
\文件夾名:表示進(jìn)入名為“文件夾名”的文件夾
\文件名:選擇名為“文件名”的文件
有了這三個(gè)概念溉跃,相對(duì)路徑的解釋就非常容易了村刨。
所以$PROJ_DIR$\..\..\Lib\icf_files\512KB_Pflash.icf的意思就是返回工程所在目錄的上兩級(jí)文件夾,然后進(jìn)入該目錄下的Lib文件夾喊积,在進(jìn)入的目錄中再進(jìn)入\icf_files文件夾,這樣我們就看到了512KB_Pflash.icf文件玄妈。不信嗎乾吻?我們一起來(lái)看看吧!
看到?jīng)]找到512KB_Pflash.icf這個(gè)文件了吧拟蜻!而且我們還會(huì)發(fā)現(xiàn)绎签,其實(shí)$PROJ_DIR$就是表示的C:\Users\Administrator\Desktop\2017.2.19\K60_Example_v2.2_2017.02.20\Project\iar?
怎么樣?相對(duì)路徑還是很簡(jiǎn)單吧酝锅!
但是相對(duì)路徑用途很廣呀诡必,不管是在windows系統(tǒng)還是linux系統(tǒng)都有大量運(yùn)用。
IAR中配置編譯路徑的時(shí)候也是使用的相對(duì)路徑喲搔扁!
看一看吧爸舒!
相對(duì)路徑就講到這里啦!
2.關(guān)于IAR中的xxx.eww文件的講解
使用IAR進(jìn)行K60開發(fā)的時(shí)候稿蹲,我們打開工程就是通過(guò)點(diǎn)擊xxx.eww文件扭勉,但是xxx.eww文件好像一般文件路徑都比較深,我們能不能更改一下xxx.eww的位置苛聘,方便我們更快地打開的工程呢涂炎?
這就要看一看xxx.eww這個(gè)文件中的具體內(nèi)容了。我這里用用notepad++把我的smartcarB.eww文件打開:
看到了嗎设哗?也是使用的相對(duì)路徑喲唱捣!
現(xiàn)在你自己能解釋$WS_DIR$\smartcarB.ewp的意思了嗎?
WS是workspce的簡(jiǎn)寫网梢,dir還是那個(gè)意思震缭,這樣就簡(jiǎn)單喏!就是表示打開工作空間目錄下的smartcarB.ewp文件战虏。這里的工作空間目錄就是和工程目錄一致蛀序。但是你可不要認(rèn)為工作空間目錄就是工程目錄呀欢瞪!
那就接著看下邊的吧:
如果我要在C:\Users\Administrator\Desktop\2017.2.19\K60_Example_v2.2_2017.02.20這個(gè)目錄中創(chuàng)建一個(gè)smartcarB.eww文件,并且能打開工程該怎么做呢徐裸?
最快捷方法就是把之前的smartcarB.eww文件復(fù)制到我們指定的位置遣鼓,然后再次用notepad++打開smartcarB.eww文件,對(duì)$WS_DIR$\smartcarB.ewp路徑進(jìn)行修改重贺。
剛剛學(xué)習(xí)的相對(duì)這里馬上就要用到了哦骑祟!
現(xiàn)在$WS_DIR$:工作空間目錄就變成了C:\Users\Administrator\Desktop\2017.2.19\K60_Example_v2.2_2017.02.20 ,然后我們要用相對(duì)路徑的方式找到smartcarB.ewp文件气笙。怎么做呢次企?
能看懂$WS_DIR$\Project\iar\smartcarB.ewp的意思嗎?其實(shí)就是循著文件夾找到指定的文件啦潜圃!
我們就可以在我們自己指定的地方打開工程了缸棵。
這里我就不演示了。
今天就只介紹兩個(gè)關(guān)于IAR的知識(shí)哦谭期,以后接著寫堵第。
這里還寫一點(diǎn)關(guān)于c語(yǔ)言的知識(shí)點(diǎn)。
1.關(guān)于ASCII碼表的問(wèn)題
在單片機(jī)開發(fā)中隧出,我曾經(jīng)為了節(jié)省空間踏志,就喜歡把標(biāo)志位定義成char,一般情況下還沒(méi)什么問(wèn)題胀瞪。但是又一次针余,程序出了點(diǎn)問(wèn)題,我想把標(biāo)志位通過(guò)藍(lán)牙串口發(fā)送到我的手機(jī)上凄诞。既然是標(biāo)志位嘛圆雁,當(dāng)然一般定義的就是xxx_flag = 1 或者 xxx_flag = 0啦,但是發(fā)現(xiàn)手機(jī)上沒(méi)有收到任何數(shù)據(jù)帆谍,我當(dāng)時(shí)還納悶?zāi)孛桌埃趺椿厥履卮嚷酰克{(lán)牙模塊出了問(wèn)題?
后來(lái)才想起來(lái)還有ASCII碼表這么個(gè)東西片橡,ASCII碼值0對(duì)應(yīng)的是null呀患雇,你當(dāng)然不會(huì)得到任何東西喏跃脊!
所以,在定義標(biāo)志位的時(shí)候要注意苛吱,看是定義的int 還是char型酪术,int一般沒(méi)問(wèn)題,當(dāng)時(shí)char型的時(shí)候,別忘了還有ASCII碼表這個(gè)咚咚绘雁。
2.c語(yǔ)言中關(guān)于變量類型的問(wèn)題
我們?cè)诙x數(shù)據(jù)的時(shí)候橡疼,定義long ,int或者char型庐舟,比如說(shuō) int a = 123欣除; long b = 123;要注意這些類型決定的是我們用多大的地址空間來(lái)存儲(chǔ)這些數(shù)據(jù)挪略,換句話說(shuō)就是指定多少個(gè)字節(jié)給這個(gè)變量使用历帚。他們不會(huì)決定變量地址的位數(shù),地址的長(zhǎng)度是由硬件來(lái)決定的,比如說(shuō)我們使用stm32杠娱,那么我們的地址位數(shù)就是32位挽牢,如果是51單片機(jī)的話,地址位數(shù)就是8位
3.c語(yǔ)言中指針是靈魂摊求,也是最難懂的東西禽拔。
c語(yǔ)言中指針變量這個(gè)東西實(shí)在是太重要了。舉個(gè)例子室叉,int a = 40 睹栖; int * b = &a ;
這里b就是一個(gè)指針變量太惠,b中存儲(chǔ)的就是變量a的地址磨淌。我們知道int a 中的int 指的是用int 也就是4個(gè)字節(jié)的空間來(lái)存儲(chǔ)40這個(gè)數(shù)疲憋,int * b 中的int 指的是 b中存儲(chǔ)的地址是int型的凿渊。
那么,地址是int 型的是什么意思呢缚柳?我們又用多大的空間來(lái)存儲(chǔ)a的地址值呢?
下面一個(gè)問(wèn)題一個(gè)問(wèn)題的來(lái)解答:
(1)地址是int 型表示的是如果我們對(duì)變量的值就行操作的話從首地址算起埃脏,一次操作的是4個(gè)字節(jié),如果進(jìn)行地址的強(qiáng)制轉(zhuǎn)換秋忙,比如說(shuō) (unsigned char) &a ?彩掐,那么我們一次操作地址話就只能操作一個(gè)字節(jié)了。地址的強(qiáng)制轉(zhuǎn)換可以用來(lái)取一個(gè)數(shù)的高位灰追,地位等等的堵幽。
(2)我們又用多大的空間來(lái)存儲(chǔ)a的地址值呢?定義指針變量的時(shí)候又沒(méi)有明確地指定。所以這里就是使用默認(rèn)值啦弹澎,一般來(lái)說(shuō)就是用4個(gè)字節(jié)來(lái)存儲(chǔ)地址值朴下。
以上觀點(diǎn)可能有很多錯(cuò)誤的地方,歡迎指正苦蒿。謝謝殴胧。qq:894237294