导航:首页 > 源码编译 > iar编译方法

iar编译方法

发布时间:2022-10-15 04:53:25

A. 用iar新建工程编译选项设置

主要是没有把包含的路径加进工程,可以这样操作: 1.打开工程,在工程名上右键,选择“Options。。。。”项; 2. 选择“C/C++ Compiler”菜单; 3. 在右边的选项中选择“Preprocessor”; 4. 在“Additional include directories:”下面查看路径。 把你...

B. IAR 编译怎么产生HEX文件,目前产生的是d51

打开工程,依次Project->Options->Output Converter,在这个界面勾选 Generate additional output,下拉框选择Intel extended,勾选 Override default,再输入你需要的hex文件名,点击OK就好了。最后重新编译一下工程,你就能在你工程文件(.eww)的\Debug\Exe中找到生成的hex文件了。

C. IAR中的问题解决方法求解

IAR中的问题解决方法求解
很显然你没有使能寄存器的位定义。方法如下:Project ——> Option ——> General Options ——> System(如下图所示),勾选

Enable bit definitions in I/O-Include files即可

2.MCU型号选择

如果和我一样都次都是以空工程创建的话,不过忘了第一步先进Project ——> Option ——> General Options ——> Target选择所使用的MCU型号,不然编译免不了要报错,如下图所示。

3. 堆栈大小

今天下午编译一个程序,0错误0警告,挺好,可一运行就跑飞,根本不能正常运行。

其实是我没有正常设置堆栈大小导致的这种问题,尤其是在写大工程时,这种错误出现的概率很高。GCC和IAR分配堆栈的方式不同,IAR先分配堆栈空间,相当于定义一个全局数组为堆栈空间,堆栈初始为堆栈空间最高地址;GCC不用先分配堆栈,自动把RAM剩余空间作为堆栈空间,堆栈初始为RAM最高地址。

先编译看看自己的程序用了多少ram,在看看总共有多少ram。

然后Project ——> Option ——> Linker ——> List选择生成LIST文件,并包含stack选项,如下图所示。

在./Debug/list目录下,得到.map(可能是.lst等其他格式)文件,用记事本打开,找到以下内容:

****************************************
* *
* CALL GRAPH *
* *
****************************************

->Sub-tree of type: Interrupt function tree that does not make
: indirect calls
CSTACK
| Stack used (prev) : 00000000
01 int_T0_OV
| Stack used (prev) : 00000000
| + function block : 0000000C

......(省略N行)

01 main
| Stack used (prev) : 0000003A
| + function block : 00000000
<-Sub-tree of type: Function tree
| Stack used : 000000E2

找到最大的Stack used,我的就是000000E2,这就是用到的最大的堆栈空间,保守一点,我设置成0x100字节,没有超过剩余RAM,再重新编译,运行,仿真器没有堆栈不足警告,程序也能正常运行了。

如下图所示:

4. 查看汇编

相信一个优秀的单片机软件工程师都多多少少会去看看编译器的汇编代码,看看有没有什么问题或者看看编译器有没有自作聪明的做些什么

Project ——> Option ——> C/C++ complier ——> List,勾选output assembler files,编译后则生成离线汇编代码文件

此时在工程目录下的Debug-->List即可看到所有参加编译的C文件对应的汇编文件,后缀名为*.s90

5.内联函数

inline函数传统上只有C++支持,但IAR EW也支持在C代码中使用inline.
#pragma inline:建议编译器对紧随其后的函数进行inline处理
#pragma inline = forced: 强制编译器对紧随其后的函数进行inline处理

复制代码
/***************************** 错误描述 ******************************************/
// tft.c中定义内联函数
#pragma inline = forced //强制inline
void TFT_Write_Colour(const RGB_COLOUR *rgb)
{
//...code....
}

// tft.h中声明函数
void TFT_Write_Colour(const RGB_COLOUR *rgb);

// main.c中调用函数
// 编译报错:main中引用了未定义的外部函数TFT_Write_Colour。

/***************************** 解决办法 ******************************************/
// tft.h中“定义函数”
#pragma inline = forced //在IAR EW430中,这里必须用强制inline;用inline可能导致编译器忽略内联,而定义成普通函数而出错。
void TFT_Write_Colour(const RGB_COLOUR *rgb)
{
//...code....
}

// main.c中包含tft.h,并调用函数
// 结果:编译正确
复制代码

6. 如何把变量定义到flash空间

unsigned char __flash temptab[] = {1,2,3,4,5}; <br>__flash unsigned char a @ 0x8; // 定义变量存放在flash 空间0X08单元

7. 关于内存模型

AVR 微控制器的其中一个特点是它有一种存储器访问方法均衡了“cheap access limited to small memory areas”与“more expensive accessmethods that can access any location in memory”。
在AVR_IAR C/C++编译器中,通过选择某种存储模式(memory model),可设置一些访问方法为默认的存储器访问方法(default memory accessmethod)。共有三种可用的存储模式——Tiny,Small 和Large。你的处理器选项决定了哪些模式可以使用。如果你不指定一种存储模式,则编译器自动设定-v0、-v1、-v2、-v3、-v5 选项下的默认方法为Tiny,-v4 和-v6 选项下的访问方法为Small。

8. 关于生成文件格式的设置

如图,在linker -> outpu ->other中可设置相应的输出文件格式.

比如要生成bin格式,选择raw-binary就可以了, 如果是要生成hex格式,那么可以选intel-extern ,不过这个时候文件扩展名是*.a90,可以把"Override default " 打钩,然后修改后缀名为hex就行了.

D. 求助!在IAR环境下编译程序时总是编译不对!

看看是不是开了另外一个窗口在debugging,如果有的话点击stop debugging(红色按钮)

就好了

E. 怎样在IAR中加入编译所需库的头文件

1、首先打开电脑,然后在电脑桌面中,找到并双击IAR打开软件,如图。

F. 怎样在IAR中加入编译所需库的头文件

1、首先打开电脑,然后在电脑桌面中,找到并双击IAR打开软件,如图。

G. 关于IAR for MSP430的编译问题,小女子先谢过了,在线等。。。

第一,连上仿真器,看设备管理器 io 里有没有仿真器。在Workspace下面是一个带下拉菜单的文本框,这里有系统的创建配置(build configurations),默认时系统有两种创建(build)配置:Debug和Release。缺省配置是Debug,在这种模式下,用户可以进行仿真和调试;在Release模式下,是不能进入调试状态的

都对看下一项

第二,打开iar,打开工作空间(工程),点左上project,打开options...,设置成下图

第四,连接好板子供电,连接好仿真器与板子,仿真器与电脑,检查设备管理器,io里是不是板子和仿真器都有。还有就是检查板子上的跳帽,一般有两个跳帽是接上就不能用仿真器,一般来讲,断开 TCK和 RTS跳线帽、RESET和 DTR跳线帽,取了才行。

H. 用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中。

I. IAR如何编译生成文件

项目中有些功能需要用汇编编写,所以想让编译器生成一个汇编框架,但是现在只能生成.r43和.lst文件,如何能生成.s43文件。
我的方法是这样,写一个同名的函数,在Project中选择Option命令,在List页中全选择,但现在生不成s43文件

J. IAR编译错误,请高手给看看是怎么回事

这是说明你的代码量超出了你预设的rom大小,一般iar编译程序后会根据一个
xxx.xcl文件把你的代码和数据链接到指定地址,iar的文件夹里面搜搜就能搜到,"-z(code)code=romstart-romend"是说你所有的代码都放置在以romstart为起始地址,romend为终止地址的一段连续的空间内,romstart为0x4000016c,romend为40003fff,貌似是个有16k
flash的arm。上面报错是因为你编译出来的code
size
是0x58b4,已经超过了这个空间,你能做的就是看看能不能缩减代码量。

阅读全文

与iar编译方法相关的资料

热点内容
app保存草稿怎么用 浏览:806
安卓如何进入proumb 浏览:141
主机虚拟云服务器 浏览:617
删除分区加密的空间会不会恢复 浏览:703
京东app客户上门怎么看搜索量 浏览:739
怎么在农行app购买黄金 浏览:45
c型开发板和单片机 浏览:146
虚拟机建立用户的模板文件夹 浏览:904
无锡代码编程培训班 浏览:631
eps图形数据加密 浏览:933
没有滴滴app怎么打车 浏览:101
大数乘法java 浏览:1001
如何登录服务器看源码 浏览:526
如何做服务器端 浏览:157
注册服务器地址指什么 浏览:434
文本命令行 浏览:98
扑克牌睡眠解压 浏览:196
rc4算法流程图 浏览:161
胡萝卜解压方法 浏览:38
扫描pdf格式软件 浏览:880