IAR中工程相關(guān)配置及c語言易忘知識點(diǎn)

博客主頁,歡迎訪問: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ā)送給其他人使用是很正常的事呀!

這個時候相對路徑就登場了!

下面給一個使用相對路徑的例子:


icf文件

這是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文件打開:


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


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Ubuntu的發(fā)音 Ubuntu,源于非洲祖魯人和科薩人的語言,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 100,727評論 9 468
  • 1. 結(jié)構(gòu)體和共同體的區(qū)別。 定義: 結(jié)構(gòu)體struct:把不同類型的數(shù)據(jù)組合成一個整體,自定義類型。共同體uni...
    breakfy閱讀 2,273評論 0 22
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,632評論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,740評論 18 399
  • 如果你說你想要取得成功,那么這句話該顯得多么的蒼白無力啊。成功?似乎已是人人所追求的,但也只是似乎。人人都追求...
    玻璃大叔閱讀 625評論 0 1

友情鏈接更多精彩內(nèi)容