导航:首页 > 源码编译 > iar编译器优化关闭

iar编译器优化关闭

发布时间:2022-09-08 18:37:34

‘壹’ 如何让IAR编译器自动移除库里不用的函数以节省FLASH

需要用avr studio重新建立工程,并进行一些改编才可以仿真,因为编译器不一样,一个是IAR一个是avr-GCC。
具体说来区别主要体现在中断的写法上,还有iar的库里的头文件中有一些位操作的宏gcc的库里并没有。建议你搜索关键字:“AVR IAR GCC 区别”

‘贰’ 同样的一段程序,CCS 和 IAR 编译运行的结果不同

优化举个简单例子:int
i;i=1;i=2;i=3;i=4;i=5;i=6;i=7;i=8;i=9;i=10;这段代码会被直接优化成
i=10;连续10次给i赋值,只有最后一次才有意义。前面的赋值没有意义,会被直接优化掉。如果后面i也没有被使用,则变量i本身没有意义,直接优化掉。最后编译出来的代码就是空。进一步,把上面的赋值换成循环int
i;for(i=1;i<10;i++);这段代码也会被优化成i=10;循环相当于连续给i赋值9次,循环里面i的值是多少,是没有意义的,最后循环退出时的i值才有意义,相当于最后一次的赋值i=10;如果后面的程序没有用到i,则变量i本身没有意义,直接优化掉。最后编译出来的代码就是空。谨记:空循环是没有意义的,有点优化能力的编译器,都会将空循完全环优化掉。如果需要延时,请加上volatile,或者调用编译器的延时函数,或者用编译参数禁止优化,或者使用内嵌汇编。总之,不要使用没有volatile的空循环带实现延时,这是不规范的。

‘叁’ IAR的c文件窗口 f()不显示函数怎么解决

没有显示说明当前文件的函数并未在任何地方使用,编译器优化后直接去掉了此部分代码的编译。而且这段没有被编译进去的代码,在仿真的时候,连断点都没法打上去。
你检查下代码,结构,编译条件等,想办法去掉选择方面的限制。

‘肆’ 为什么编译器IAR 暂停或中断后,watching窗口不停是闪烁

这样的问题我没有遇到过。卸载掉,重装个最新版本的试一下吧!

‘伍’ 如何设置iar优化等级

果在A行设置的断点,单步调试的时候却只能到达A后边的某几行,可能的一个原因就是代码优化的等级太高了,导致编译器实际上没有在A行停顿。
解决办法:
在OPTION下修改优化等级

IAR默认的是最高优化等级。如果程序不大建议不优化。如果优化等级高,那么一些非汇编的延时函数可能无法执行,一些局部变量的值可能在使用过后,即便没有离开自己的作用

‘陆’ IAR 编译器的相关问题(MSP 430 5438)

"+ 114 bytes shared"或linking后的"+ 114 bytes absolute"指的是您在程序中有144bytes 使用@ operator 或 #pragma location=operator 或__no_init volatile语法定义的数据。也可以说是可以在汇编中定义的数据。举例:P1OUT在430头文件中就用到了上述语法,当您读写P1OUT时,编译器和链接器就认为您使用了一个上述sahred/absolute数据。
编译器和链接器并不能真正地辨认出什么是RAM什么是Flash,它们使用DATA(没有指定固定的数据)和CONST/CODE(有指定固定的数据)概念来工作。
特意咨询了IAR员工,答对给分啊!

‘柒’ 老大们请问下编译mpi的问题

1、icc

Intel C/C++编译器接受遵守ANSI C/C++ , ISO C/C++ standards,GNU inline ASM for IA-32 architecture标准的输入。与linux下常用的gcc兼容并支持更大的C语言扩展,包括源文件、命令行参数、目标文件。不支持gcc的inline方式的汇编。例,f.c

#include

int main(int argc, char* argv[]){

printf("Hello\n");

return 0;

}

编译:icc -c f.cpp -o f.o

链接:icc f.o -o f

运行:./f

注意,编译与链接都由icc来完成,icc常用命令行参数:

-o 输出文件命名

-I include路径

-L lib路径

-l 包含的lib名

-c 仅生成目标文件(*.o),不链接

-On n=0,1,2,3 编译器优化选项,n=0关闭编译器优化,n=3使用最激进的优化

-c99[-] 打开/关闭 c99规范的支持

详细的请参照icc的manpage.

2、ifort

Intel Fortran编译器支持F77/90/95标准并与CFV(Compaq Visual Fortran)兼容。例,f.f90

program f

print *, "Hello"

stop

end

编译:ifort -c f.f90 -o f.o

链接:ifort f.o -o f

运行:./f

编译与连接同样由ifort来完成,ifort常用命令行参数:

-o 输出文件命名

-I include路径

-L lib路径

-l 包含的lib名

-c 仅生成目标文件(*.o),不链接

-On n=0,1,2,3 编译器优化选项,n=0关闭编译器优化,n=3使用最激进的优化

-std90 使用F90标准编译

-std95 使用F 95标准编译

-f77rtl 编译使用F77运行方式的代码(用于解决特殊问题)

These options optimize application performance for a particular Intel? processor or family of processors. The compiler generates code that takes advantage of features of the specified processor.

Option

Description
tpp5 or G5 Optimizes for Intel? Pentium? and Pentium? with MMX? technology processors.
tpp6 or G6 Optimizes for Intel? Pentium? Pro, Pentium? II and Pentium? III processors.
tpp7 or G7 Optimizes for Intel? Pentium? 4, Intel? Xeon?, Intel? Pentium? M processors, and Intel? Pentium? 4 processors with Streaming SIMD Extensions 3 (SSE3) instruction support.
On Intel? EM64T systems, only option tpp7 (Linux) or G7 (Windows) is valid.

About tpp:

Intel Fortran Compiler Options:

Intel(R) Fortran Compiler Options:

ifort编译器提供了非常多的优化参数

$ ifort --help | more 查看就可以
也可以定位到某个参数

$ifort --help | grep -5 '-mkl'
-5表示显示查找到的行及下面5行的内容。

3、Intel MKL数学库针对Intel系列处理器进行了专门的优化,主要包含的库有:

基本线形代数运算(BLAS)

向量与向量、向量与矩阵、矩阵与矩阵的运算

稀疏线形代数运算

快速傅立叶变换(单精度/双精度)

LAPACK(求解线形方程组、最小方差、特征值、Sylvester方程等)

向量数学库(VML)

向量统计学库(VSL)

高级离散傅立叶变换

编译:

icc multi.c -I/opt/intel/mkl/include –L/intel/mkl/lib –lmpi_ipf –o multi

4、MPI程序编译

消息传递接口(MPI)并行程序设计模型程序的编译命令。例,f.c

include

#include

main(argc,argv)

int argc;

char *argv[];

{

char name[BUFSIZ];

int length;

MPI_Init(&argc,&argv);

MPI_Get_processor_name(name, &length);

printf("%s: hello world\n", name);

MPI_Finalize();

}

编译与连接均使用mpicc,参数与mpicc中定义的编译器相同,这里与icc相同。

mpicc –c hello.c –o hello.o

mpicc hello.o –o hello

运行使用mpirun 命令,将运行需要的节点定义在文件中并在-machinfile中制定。

文件: nodelist

node1

node1

node2

node3

运行:

$mpirun –machefile nodelist –np 4 ./hello

node1: hello world

node1: hello world

node2: hello world

node3: hello world

5、32位向64位的移植

32位程序到64位移植中应注意的常见问题:

数据截断:

由于long类型变量的运算(赋值、比较、移位等)产生。long定义在x86上为32bits,而在ia64上为64bits.容易在与int型变量运算时出现异常。

处理方法:尽量避免不同类型变量间的运算,避免将长度较长的变量赋值到较短的变量中,统一变量长度可以解决这个问题。简单的对于32位转移到64位可以将所有long定义转换为int定义。

‘捌’ 单片机编程,不用跳转的子程序,IAR编译器,mega128

1.有一种关键字叫inline,虽然我不用IAR,但是我想常规的编译器都会支持这种功能,当inline出现在函数声明前面的时候,编译器会将这个函数在调用处自动展开
2.你说的循环10遍的问题,有一种编译优化叫循环展开,即将小于一定循环次数的循环操作直接像你所说的依次执行,而不是通常循环指令,这个操作要结合编译器手册看具体使用说明了,所以你还是要研究一下IAR的编译优化,看过这块,你的问题应该得到解决

‘玖’ 求教STM32F051 官方库IAR编译警告为什么

在 SECTION .text:CODE:REORDER(1) 改成 SECTION .text:CODE:REORDER:NOROOT(1) 或 SECTION .text:CODE:REORDER:ROOT(1) 注意 NOROOT和 ROOT 的区别,如果NOROOT表示如果符号没有被关联的时候是被优化掉的, 如果想不被优化则使用ROOT.

‘拾’ 使用IAR开发STM32的时候在哪里设置优化等级

右击工程-->Options-->c/c++compiler-->Optimization

阅读全文

与iar编译器优化关闭相关的资料

热点内容
卡尔曼滤波算法书籍 浏览:768
安卓手机怎么用爱思助手传文件进苹果手机上 浏览:843
安卓怎么下载60秒生存 浏览:802
外向式文件夹 浏览:235
dospdf 浏览:430
怎么修改腾讯云服务器ip 浏览:387
pdftoeps 浏览:493
为什么鸿蒙那么像安卓 浏览:735
安卓手机怎么拍自媒体视频 浏览:185
单片机各个中断的初始化 浏览:723
python怎么集合元素 浏览:480
python逐条解读 浏览:832
基于单片机的湿度控制 浏览:498
ios如何使用安卓的帐号 浏览:882
程序员公园采访 浏览:811
程序员实战教程要多长时间 浏览:974
企业数据加密技巧 浏览:134
租云服务器开发 浏览:813
程序员告白妈妈不同意 浏览:335
攻城掠地怎么查看服务器 浏览:600