博客主頁,歡迎訪問:blog.spursgo.com
使用K60單片機(jī)時,往往使用IAR的比較多。但是我之前一直使用KEIL來進(jìn)行stm32的開發(fā),所以就有一種先入為主的觀念,總覺得KEIL比IAR要好一些。隨著和IAR打交道越來越多,漸漸地發(fā)現(xiàn)IAR也是一款十分優(yōu)秀的軟件,給我們的編程開發(fā)帶來了很大的方便。
下面,我把我使用IAR時,個人認(rèn)為重要的一些東西分享出來。
1.關(guān)于IAR中的文件路徑問題
這里講的是相對路徑:為什么要使用相對路徑呢?舉個例子,我在IAR的工程給一個配置文件配置了絕對路徑,那么你會發(fā)現(xiàn),當(dāng)你把這個工程換一個地方或者發(fā)送給其他的人使用,程序中會報錯。
其實這就絕對路徑惹的禍,如果你不改變工程的位置,那就沒有問題。但是,這樣很不方便呀,改變位置或者發(fā)送給其他人使用是很正常的事呀!
這個時候相對路徑就登場了!
下面給一個使用相對路徑的例子:

這是K60中的一個配置文件,使用了相對路徑,可以不受工程位置的影響了!
那么,就來說說相對路徑的具體情況吧。
$PROJ_DIR$\..\..\Lib\icf_files\512KB_Pflash.icf
首先,看一看$PROJ_DIR$表示什么意思吧!根據(jù)簡寫的英文大寫,我們姑且猜它是工程所在的目錄,因為PROJ是project工程簡寫,DIR是directory的簡寫。猜對了嗎?哈哈,當(dāng)然喏,這么簡單的英文說不會呀!這就是見名知義的好處哦,在各種編程語言中,見名知義都是大力推崇地哦!
那么還有一個疑問,$PROJ_DIR$雖然是工程所在目錄,那么工程所在目錄又在哪里呢?
有兩個非常重要的文件,以我的工程為例:

文件smartcarB.ewd ?和smartcarB.ewp 所在目錄就是我們所說的工程所在目錄,這一點(diǎn)非常重要哦!在配置編譯路徑的時候會使用到,下面也會講一講的。
接下來就講一講\..\..\Lib\icf_files\512KB_Pflash.icf的含義吧!
\..:表示返回上一級文件夾
\文件夾名:表示進(jìn)入名為“文件夾名”的文件夾
\文件名:選擇名為“文件名”的文件
有了這三個概念,相對路徑的解釋就非常容易了。
所以$PROJ_DIR$\..\..\Lib\icf_files\512KB_Pflash.icf的意思就是返回工程所在目錄的上兩級文件夾,然后進(jìn)入該目錄下的Lib文件夾,在進(jìn)入的目錄中再進(jìn)入\icf_files文件夾,這樣我們就看到了512KB_Pflash.icf文件。不信嗎?我們一起來看看吧!

看到?jīng)]找到512KB_Pflash.icf這個文件了吧!而且我們還會發(fā)現(xiàn),其實$PROJ_DIR$就是表示的C:\Users\Administrator\Desktop\2017.2.19\K60_Example_v2.2_2017.02.20\Project\iar?
怎么樣?相對路徑還是很簡單吧!
但是相對路徑用途很廣呀,不管是在windows系統(tǒng)還是linux系統(tǒng)都有大量運(yùn)用。
IAR中配置編譯路徑的時候也是使用的相對路徑喲!
看一看吧!

相對路徑就講到這里啦!
2.關(guān)于IAR中的xxx.eww文件的講解
使用IAR進(jìn)行K60開發(fā)的時候,我們打開工程就是通過點(diǎn)擊xxx.eww文件,但是xxx.eww文件好像一般文件路徑都比較深,我們能不能更改一下xxx.eww的位置,方便我們更快地打開的工程呢?
這就要看一看xxx.eww這個文件中的具體內(nèi)容了。我這里用用notepad++把我的smartcarB.eww文件打開:

看到了嗎?也是使用的相對路徑喲!
現(xiàn)在你自己能解釋$WS_DIR$\smartcarB.ewp的意思了嗎?
WS是workspce的簡寫,dir還是那個意思,這樣就簡單喏!就是表示打開工作空間目錄下的smartcarB.ewp文件。這里的工作空間目錄就是和工程目錄一致。但是你可不要認(rèn)為工作空間目錄就是工程目錄呀!
那就接著看下邊的吧:
如果我要在C:\Users\Administrator\Desktop\2017.2.19\K60_Example_v2.2_2017.02.20這個目錄中創(chuàng)建一個smartcarB.eww文件,并且能打開工程該怎么做呢?

最快捷方法就是把之前的smartcarB.eww文件復(fù)制到我們指定的位置,然后再次用notepad++打開smartcarB.eww文件,對$WS_DIR$\smartcarB.ewp路徑進(jìn)行修改。
剛剛學(xué)習(xí)的相對這里馬上就要用到了哦!
現(xiàn)在$WS_DIR$:工作空間目錄就變成了C:\Users\Administrator\Desktop\2017.2.19\K60_Example_v2.2_2017.02.20 ,然后我們要用相對路徑的方式找到smartcarB.ewp文件。怎么做呢?

能看懂$WS_DIR$\Project\iar\smartcarB.ewp的意思嗎?其實就是循著文件夾找到指定的文件啦!
我們就可以在我們自己指定的地方打開工程了。

這里我就不演示了。
今天就只介紹兩個關(guān)于IAR的知識哦,以后接著寫。
這里還寫一點(diǎn)關(guān)于c語言的知識點(diǎn)。
1.關(guān)于ASCII碼表的問題
在單片機(jī)開發(fā)中,我曾經(jīng)為了節(jié)省空間,就喜歡把標(biāo)志位定義成char,一般情況下還沒什么問題。但是又一次,程序出了點(diǎn)問題,我想把標(biāo)志位通過藍(lán)牙串口發(fā)送到我的手機(jī)上。既然是標(biāo)志位嘛,當(dāng)然一般定義的就是xxx_flag = 1 或者 xxx_flag = 0啦,但是發(fā)現(xiàn)手機(jī)上沒有收到任何數(shù)據(jù),我當(dāng)時還納悶?zāi)?,咦,怎么回事呢?藍(lán)牙模塊出了問題?
后來才想起來還有ASCII碼表這么個東西,ASCII碼值0對應(yīng)的是null呀,你當(dāng)然不會得到任何東西喏!
所以,在定義標(biāo)志位的時候要注意,看是定義的int 還是char型,int一般沒問題,當(dāng)時char型的時候,別忘了還有ASCII碼表這個咚咚。
2.c語言中關(guān)于變量類型的問題
我們在定義數(shù)據(jù)的時候,定義long ,int或者char型,比如說 int a = 123; long b = 123;要注意這些類型決定的是我們用多大的地址空間來存儲這些數(shù)據(jù),換句話說就是指定多少個字節(jié)給這個變量使用。他們不會決定變量地址的位數(shù),地址的長度是由硬件來決定的,比如說我們使用stm32,那么我們的地址位數(shù)就是32位,如果是51單片機(jī)的話,地址位數(shù)就是8位
3.c語言中指針是靈魂,也是最難懂的東西。
c語言中指針變量這個東西實在是太重要了。舉個例子,int a = 40 ; int * b = &a ;
這里b就是一個指針變量,b中存儲的就是變量a的地址。我們知道int a 中的int 指的是用int 也就是4個字節(jié)的空間來存儲40這個數(shù),int * b 中的int 指的是 b中存儲的地址是int型的。
那么,地址是int 型的是什么意思呢?我們又用多大的空間來存儲a的地址值呢?
下面一個問題一個問題的來解答:
(1)地址是int 型表示的是如果我們對變量的值就行操作的話從首地址算起,一次操作的是4個字節(jié),如果進(jìn)行地址的強(qiáng)制轉(zhuǎn)換,比如說 (unsigned char) &a ?,那么我們一次操作地址話就只能操作一個字節(jié)了。地址的強(qiáng)制轉(zhuǎn)換可以用來取一個數(shù)的高位,地位等等的。
(2)我們又用多大的空間來存儲a的地址值呢?定義指針變量的時候又沒有明確地指定。所以這里就是使用默認(rèn)值啦,一般來說就是用4個字節(jié)來存儲地址值。
以上觀點(diǎn)可能有很多錯誤的地方,歡迎指正。謝謝。qq:894237294