Ⅰ DOS下面 如何用IAR編譯程序
第一種編譯方法( 編譯直接生成class 文件,執行需先創建包的路徑)
假設當前目錄為/src/java/ ,則編譯命令為:
javac HelloWorld.java
假設當前目錄為/src/ ,則編譯命令為:
javac /src/java/HelloWorld.java
或者使用相對路徑:
javac java/HelloWorld.java
執行完該命令後, 在/src/java/ 目錄下生成一個HelloWorld.class 文件。執行文件(在java 目錄下新建目錄a ,在a 目錄下新建目錄b 將HelloWorld.class 至於b 目錄下;執行java a.b.HelloWorld ),必須要按照包的結構先創建目錄。
第二種編譯方法( 編譯直接生成包的路徑)
假設當前目錄為/src/java/ ,則編譯命令為:
javac -d . HelloWorld.java
說明:"." 為指定編譯路徑為當前目錄;生成的HelloWorld.class 所有目錄為/src/java/a/b/HelloWorld.class 。
javac -d c/d HelloWorld.java
說明:c/d 為指定編譯路徑為/src/java/c/d ,同樣也可以寫成絕對路徑如javac -d d:/ HelloWorld.java ,前提是路徑必須先存在;生成的HelloWorld.class 所有目錄為/src/java/c/d/a/b /HelloWorld.class 。
假設當前目錄為/src/ ,則編譯命令為:
javac -d . java/HelloWorld.java
說明:生成的HelloWorld.class 所有目錄為/src/a/b/HelloWorld.class 。
javac -d java/c/d java/HelloWorld.java
說明:生成的HelloWorld.class 所有目錄為/src/java/a/b/HelloWorld.class 。
第三種編譯方法(先把源文件按照包結構放到指定的目錄中,然後執行編譯命令)
假設當前目錄為/src/java/,先在目錄中創建目錄/a/b,然後編譯命令:
javac a/b/HelloWorld.java
下面總結一下對於帶包的類進行編譯和執行時的一些要點:
1、編譯時可以不考慮包結構的問題,不論用哪種方法,其實本質都是一樣的,只需要讓javac命令找到所需要編譯的原文件(*.java)即可。編譯時可以用相對或者絕對路徑來為javac命令提供源文件的位置信息。
2、初學者易混淆classpath的作用,對於java命令的-cp選項和javac命令的-classpath選項,以及配置環境變數時的 CLASSPATH.其作用是不變的:都是指定所需要的class文件的位置。所不同的是,執行javac編譯時的-classpath選項用於指定被編譯的源文件需要調用另外的用戶自定義類的位置.。執行java命令是根據classpath來尋找所需要執行的class文件的位置;而javac命令不能根據classpath來找源文件,只能根據classpath來尋找所需要用到的類。
下面舉例來說明該問題:
假設以下代碼(位置:/src/java/code/a/b/TestT.java):
package a.b;
import c.d.T;
public class TestT {
public static void main(String[] args) {
T t = new T();
t.p();
}
}
package a.b;
import c.d.T;
public class TestT {
public static void main(String[] args) {
T t = new T();
t.p();
}
}
引入的文件(位置:/src/java/code/tmp/c/d/T.java)
package c.d;
public class T {
public void p(){
System.out.println("class:T");
}
}
package c.d;
public class T {
public void p(){
System.out.println("class:T");
}
}
假設現在編譯兩個文件(目錄:/src/java/),則編譯命令為:javac -classpath code/tmp code/a/b/TestT.java 執行命令為:java -cp code;code/tmp a/b/TestT
如果當前目錄為:/src/java/code/,則編譯命令為:javac -classpath tmp a/b/TestT.java執行命令為:java -cp .;tmp a/b/TestT
假設現在編譯不同磁碟的三個文件(目錄:e:/src/java/),則編譯命令為:
假設以下代碼(位置:e:/src/java/code/a/b/TestT.java):
view plain to clipboardprint?
package a.b;
import c.d.T;
import e.f.T1;
public class TestT {
public static void main(String[] args) {
T t = new T();
t.p();
T1 t1 = new T1();
t1.p();
}
}
package a.b;
import c.d.T;
import e.f.T1;
public class TestT {
public static void main(String[] args) {
T t = new T();
t.p();
T1 t1 = new T1();
t1.p();
}
}
引入的文件1(位置:d:/java/code/tmp/c/d/T.java)
view plain to clipboardprint?
package c.d;
public class T {
public void p(){
System.out.println("class:T");
}
}
package c.d;
public class T {
public void p(){
System.out.println("class:T");
}
}
引入的文件2(位置:c:/code/tmp/e/f/T1.java)
view plain to clipboardprint?
package e.f;
public class T1 {
public void p(){
System.out.println("class:T1");
}
}
package e.f;
public class T1 {
public void p(){
System.out.println("class:T1");
}
}
如果當前目錄為:e:/src/java/
編譯命令為:javac -classpath d:/java/code/tmp;c:/code/tmp code/a/b/TestT.java
執行命令為:java -cp code;d:/java/code/tmp;c:/code/tmp a/b/TestT
說明:javac命令中的classpath必須指定引入類的路徑;同樣java命令中的cp必須引入引入類的class的路徑也需指定執行類的路徑
實例:
package test;
enum T{
HELLO,WORLD,HAA;
}
package test;
import static test.T.*;
public class A {
private T t;
public A(T t){
this.t = t;
}
public static void main(String[] args){
System.out.println(new A(HELLO));
System.out.println(new A(HAA));
}
@Override
public String toString(){
return this.t + " ";
}
}
編譯命令:javac -d . T.java
javac -d . A.java
執行命令: java test.A
Ⅱ iar使用makefile編譯
要編譯出在 iar開發板上運行的可執行文件,需要使用到交叉編譯器 iar-linux-gnueabihf-gcc 來編譯,在終端中輸入如下命令:
iar-linux-gnueabihf-gcc -g -c led.s -o led.o
上述命令就是將 led.s 編譯為 led.o,其中「-g」選項是產生調試信息,GDB 能夠使用這些
調試信息進行代碼調試。「-c」選項是編譯源文件,但是不鏈接。「-o」選項是指定編譯產生的文
件名字,這里我們指定 led.s 編譯完成以後的文件名字為 led.o。執行上述命令以後就會編譯生
成一個 led.o 文件
2 、arm-linux-gnueabihf-ld 鏈接文件
arm-linux-gnueabihf-ld 用來將眾多的.o 文件鏈接到一個指定的鏈接位置。我們在學習SMT32 的時候基本就沒有聽過「鏈接」這個詞,我們一般用 MDK 編寫好代碼,然後點擊「編
譯」,MDK 或者 IAR 就會自動幫我們編譯好整個工程,最後再點擊「下載」就可以將代碼下載
到開發板中。這是因為鏈接這個操作 MDK 或者 IAR 已經幫你做好了,因此我們現在需要做的就是確定一下本試驗最終的可執行文件其運行起始地址,也就是鏈接地址。這里我們要區分「存儲地址」和「運行地址」這兩個概念,「存儲地址」就是可執行文件存儲在哪裡,可執行文件的存儲地址可以隨意選擇。「運行地址」就是代碼運行的時候所處的地址,這個我們在鏈接的時候就已經確定好了,代碼要運行,那就必須處於運行地址處,否則代碼肯定運行出錯。比如設備支持 SD 卡、EMMC、NAND 啟動,因此代碼可以存儲到 SD 卡、EMMC 或者 NAND 中,但是要運行的話就必須將代碼從 SD 卡、EMMC 或者NAND 中拷貝到其運行地址(鏈接地址)處,「存儲地址」和「運行地址」可以一樣,比如STM32 的存儲起始地址和運行起始地址都是 0X08000000,輸入如下命令
arm-linux-gnueabihf-ld -Ttext 0X87800000 led.o -o led.elf
上述命令中-Ttext 就是指定鏈接地址,「-o」選項指定鏈接生成的 elf 文件名,這里我們命名
為 led.elf
Ⅲ 關於IAR for MSP430的編譯問題,小女子先謝過了,在線等。。。
第一,連上模擬器,看設備管理器 io 里有沒有模擬器。在Workspace下面是一個帶下拉菜單的文本框,這里有系統的創建配置(build configurations),默認時系統有兩種創建(build)配置:Debug和Release。預設配置是Debug,在這種模式下,用戶可以進行模擬和調試;在Release模式下,是不能進入調試狀態的
都對看下一項
第二,打開iar,打開工作空間(工程),點左上project,打開options...,設置成下圖
第四,連接好板子供電,連接好模擬器與板子,模擬器與電腦,檢查設備管理器,io里是不是板子和模擬器都有。還有就是檢查板子上的跳帽,一般有兩個跳帽是接上就不能用模擬器,一般來講,斷開 TCK和 RTS跳線帽、RESET和 DTR跳線帽,取了才行。
由於需要,最近開始自學IAR編程軟體,經過不斷使用,現在對IAR工程編譯、創建、調試等等有了大致的了解,總得來說開始不太習慣,而且網上使用IAR編寫51單片機程序的也不多,因此相關歷程不怎麼好找,但是習慣之後感覺IAR比Keil還是更勝一籌吧!
下面以一個矩陣按鍵檢測為例,大致記錄下IAR的使用方式吧
①新建工程,如圖
②添加文件
③編寫代碼
④設置生成文件信息
大致就是以上幾個步驟了,另外再加一點代碼調試設置
下面做個比較吧
1.IAR由於不支持位操作(sbit這種),所以操作位需要通過移位來完成,比如設置P1口1 3 5電平為0,則可以這么寫P1&=~((1<<1)|(1<<3)|(1<<5));,雖然看起來比較麻煩,不過從實際來看,這么操作比位定義方便,因為一個埠可能需要設置的位很多,此時位定義就會失去意義,當然了,KEIL也是支持這種移位操作的
2.IAR頭文件,首先最好添加一個通用頭文件,比如io8051.h ioarv.h等等,然後設置工程的時候再在general options下面選擇需要的cpu,具體為什麼這樣做,我還是不太明白,反正ARM就沒有這樣的一個通用頭文件,不過這樣還是很方便的,只要是51系列的通殺了
Ⅳ 用iar新建工程編譯選項設置
error[cp001]:
protection
check,
no
valid
license
found
for
this
prod
t
[20]
原因:安裝的時候沒有把注冊機的0x.....字串的小寫字母改為大寫字母。
warning[pe001]:
last
line
of
file
ends
without
a
newline
f:\emotion\iar\pk
升級\cc1110-8\main.c
原因:在使用iar時常常會彈出類似這樣一個警告,其實只要在最後一行多加一個回車就不會再有這個警告了.
error[e72]:
segment
bank_relays
must
be
defined
in
a
segment
definition
option
(-z,
-b
or
-p)
原因:這是用730b編譯的錯誤,可能是由於相對於目標工程版本過高的,後改用720h,沒有發生錯誤。
error[pe005]:
could
not
open
source
file
"stdio.h"
原因:頭文件路徑不對造成,改正的方法是在設置選項卡的c/c++
compiler
->
preprocessor選項里,將$toolkit_dir$\inc\clib\添到incl?
paths中。
Ⅵ 在IAR6.3上如何移植V3.5stm32的固件和建立工程,編譯等操作
在Project下依次創建Obj和List子文件夾,存放編譯過程中產生的中間文件。 3.我覺得你的問題不是如何建立工程,而是如何讓一個STM32跑起來,由於STM32與,FnSdRb
Ⅶ 用iar新建工程編譯選項設置
主要是沒有把包含的路徑加進工程,可以這樣操作: 1.打開工程,在工程名上右鍵,選擇「Options。。。。」項; 2. 選擇「C/C++ Compiler」菜單; 3. 在右邊的選項中選擇「Preprocessor」; 4. 在「Additional include directories:」下面查看路徑。 把你...
Ⅷ iar怎麼分組編譯
iar分組編譯方法如下。
1、單擊project—EditConfigurations然後可以new(新建)分組,當然也可以remove(刪除)分組。
2、新建完成之後,針對不同的分組。可以實現選擇性編譯,對所有的文件進行相應的配置,讓其分開分別編譯。
Ⅸ 如何使用IAR建立一個工程
用IAR建立完一個新的工程後,需要對工程選項的參數進行設置,具體步驟如下:
選擇 Project 菜單下的Options 配置與 CC2430 相關的選項。(快捷鍵Alt+F7)
1、General
Options選項,按下圖配置Target標簽,選擇Code model 和Data model,以及其它參數。
a、單擊 Derivative information 欄右邊的按鈕,
選擇程序安裝位置如這里是IARSystems\EmbeddedWorkbench4.05 Evaluation
version\8051\config\derivatives\chip-con 下的文件CC2430.i51。
b、Data Pointer 標簽,如下圖所示,選擇數據指針數1 個,16 位。
c、Stack/Heap 標簽,如圖下圖所示,改變XDATA 棧大小到0x1FF。
2、單擊 Options 中右邊框架內的Linker 選項,配置相關的選項。
a、Output 標簽,選中 Override default 可以在下面的文本框中更改輸出文件名。如果要用 C-SPY
進行
調試,選中 format 下面的 Debug information for C-SPY
b、Config 標簽,如下圖所示,單擊 Linker command file
欄文本框右邊的按鈕,選擇正確的連接命令文
件,如表所示。
3、單擊Options 中右邊框架內的Debugger 選項,配置相關的選項。在Setup 標簽按下圖所示設置。
在 Device Description file 選擇CC2430.ddf 文件,其位置在程序安裝文件夾下如
C:\Program Files\IAR Systems\Embedded Workbench 4.05 Evaluation
version\8051\
Config\derivatives\chipcon 。
最後按下「ok」保存設置。
4、便於記憶,總結下:3+2+1=OK
General Options選項:Target標簽、Data Pointer 標簽、Stack/Heap
標簽;(3個)
Linker 選項:Output 標簽、Config 標簽;(2個)
Debugger 選項:Setup 標簽;(1個)
OK了!