iar编译信息是如何输出的
① 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文件了。