當前位置:首頁 » 編程軟體 » iar編譯信息是如何輸出的

iar編譯信息是如何輸出的

發布時間: 2022-09-07 10:14:44

① iar如何生成hex文件

生成方法如下:

1、工具需求

(1)iar平台

2、第一種方法:首先在工程選項options裡面,選中output converter選項,接著勾中Generate additional output選項,

(1)然後在Output format 里選中Intel extended選項,繼續在Output file 下面勾上Override default就完成,在Exe文件夾里就有×××.hex,效果如圖所示。

② iar Embedded Workbench 如何看串口輸出信息

1)打開KE02 platinum的IAR工程,進入到platinum.c文件,找到main函數如下圖1,可以看到其調用了printf列印函數,而該工程是默認調用底層串口的,跳轉到該函數的定義如圖2,再繼續跳轉到out_char的函數定義如圖3,這下就屢清楚了,可以很直觀的看到工程默認是調用UART底層的,下面就要動手改造它對printf進行重定向;

2)首先需要注釋掉printf的實現函數,將其屏蔽掉,然後需要給printf一個重新指向的地址,下面就該常見的<stdio.h>這位老兄出場了(貌似當初自打我開始接觸Turbo C的時候就已經用到它了,老生常談的「Hello world」就是調用它內部的printf來實現的)。找到Common.h文件,將<stdio.h>添加到其中,如下圖,這樣凡是需要printf的文件只需要添加common.h頭文件即可:

3)這里先說說stdio.h文件的作用,打開stdio.h文件可以看到其內部定義了標准輸入輸出函數,包括常見的scanf和printf等函數,而這些函數所調用的底層即為IAR提供的鏈接到其Terminal的驅動,所以……懂的,呵呵。除此之外,肯定不滿足只輸出列印(給人略顯低端的趕腳有木有),所以為了體現我們不是「土豪」,有必要讓它交互起來,實現真正的串口功能(因為一些類似bootloader之類的還是需要輸入參數的),我在main函數添加了scanf語句用來測試輸入功能,如下:

4)准備工作就緒,編譯鏈接整個工程,然後下載到KE02的板子中並進入到Debug調試環境中,點擊View->Terminal I/O調出虛擬終端,然後全步運行,就可以看到Terminal下開始列印調試信息,如下。當然顯示輸出有點小case了,我們再試試輸入功能,在input框中輸入『a』,然後回車,如下圖,perfect:

5)還沒完,要玩就玩高端大氣上點檔次的,再探索探索呢,結果又發現個小驚喜,點擊上圖右下角的「Input Mode」,彈出設置框如下,很高端啊有木有:

③ 如何在IAR 上實現Printf 列印調試信息

這可能是因為程序中printf函數定向的輸出為串口函數的輸出,而不是默認的stdio的輸出,如下面代碼,你需要關注out_char函數的實現是stdio的函數還是串口的函數,常式代碼中outchar都是輸出到串口的!你所要做的是注釋掉printf的實現函數,然後再使用到printf的函數前加入#include ,那麼程序就會自動使用stdio標准輸入輸出的printf函數來完成列印工作!
int
printf (const char *fmt, ...)
{
va_list ap;
int rvalue;
PRINTK_INFO info;

info.dest = DEST_CONSOLE;
info.func = &out_char;
/*
* Initialize the pointer to the variable length argument list.
*/
va_start(ap, fmt);
rvalue = printk(&info, fmt, ap);
/*
* Cleanup the variable length argument list.
*/
va_end(ap);
return rvalue;

④ 在IAR上,怎樣查看編譯的信息

在View中打開Message窗口,在窗口中右鍵選擇options,在出來的對話框中的 Show build message:後面選擇編譯信息顯示的詳細程度,點擊確定後編譯一下,你就能在Message窗口中看到編譯信息了。

⑤ IAR如何編譯生成文件

項目中有些功能需要用匯編編寫,所以想讓編譯器生成一個匯編框架,但是現在只能生成.r43和.lst文件,如何能生成.s43文件。
我的方法是這樣,寫一個同名的函數,在Project中選擇Option命令,在List頁中全選擇,但現在生不成s43文件

⑥ IAR for STM8 的 編譯器 對Printf 的格式輸出不支持嗎

1: 一定一定要在主程序中加入 STDIO.H
2:putchar()要重新定義
3:串口波特率 115200 8 NO 1形式
4: 編譯器library 選型中 選擇FULL
5:如果實驗以上還是不行,還有一個方法就是自己來寫printf函數!

以下是網上摘抄的的printf函數,經過測試,完全可以用!

#include "stm8s.h"
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>//itoa()......庫中沒有
#include <string.h> //memset()

#include <math.h>
#include <ctype.h>
#define TRUE 1
#define FALSE 0
//#include <memory.h>
#define MAXBUF 15

#define DEFAULT_PRECI 3 //符點型默認精度

/*
由於不同的編譯器 putcha 和 getchar 形參和返回值略有不同。
因此此處採用宏定義的方式區別。

_RAISONANCE_ 和 _COSMIC_ 這2個宏是由編譯器自動添加的預編譯宏
*/
#ifdef _RAISONANCE_
#define PUTCHAR_PROTOTYPE int putchar (char c)
#define GETCHAR_PROTOTYPE int getchar (void)
#elif defined (_COSMIC_)
#define PUTCHAR_PROTOTYPE char putchar (char c)
#define GETCHAR_PROTOTYPE char getchar (void)
#else /* _IAR_ */
#define PUTCHAR_PROTOTYPE int putchar (int c)
#define GETCHAR_PROTOTYPE int getchar (void)
#endif /* _RAISONANCE_ */

⑦ 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 編譯怎麼產生HEX文件,目前產生的是d51

打開工程,依次Project->Options->Output Converter,在這個界面勾選 Generate additional output,下拉框選擇Intel extended,勾選 Override default,再輸入你需要的hex文件名,點擊OK就好了。最後重新編譯一下工程,你就能在你工程文件(.eww)的\Debug\Exe中找到生成的hex文件了。

熱點內容
ftp上傳和下載命令 發布:2025-03-21 22:59:45 瀏覽:83
壓縮包如何在電腦解壓 發布:2025-03-21 22:47:06 瀏覽:94
java氣候 發布:2025-03-21 22:37:19 瀏覽:143
外文期刊資料庫檢索 發布:2025-03-21 22:37:05 瀏覽:9
時間大使莫莫ftp 發布:2025-03-21 22:36:24 瀏覽:843
qtp腳本循環 發布:2025-03-21 22:28:05 瀏覽:279
寫腳本人員 發布:2025-03-21 22:21:07 瀏覽:56
sql一個表另一個表 發布:2025-03-21 22:19:27 瀏覽:463
安卓收割機哪個型號好 發布:2025-03-21 22:12:34 瀏覽:87
安卓怎麼盈利 發布:2025-03-21 22:11:01 瀏覽:581