iar编译器优化关闭
1. 如何设置iar优化等级
果在A行设置的断点,单步调试的时候却只能到达A后边的某几行,可能的一个原因就是代码优化的等级太高了,导致编译器实际上没有在A行停顿。
解决办法:
在OPTION下修改优化等级
IAR默认的是最高优化等级。如果程序不大建议不优化。如果优化等级高,那么一些非汇编的延时函数可能无法执行,一些局部变量的值可能在使用过后,即便没有离开自己的作用
2. 求助!在IAR环境下编译程序时总是编译不对!
看看是不是开了另外一个窗口在debugging,如果有的话点击stop debugging(红色按钮)
就好了
3. IAR工程窗口和编译窗口消失或混乱解决方法
1.关闭IAR;
2.定位到工程目录下的settings文件夹;
3.找到扩展名为.wsdt的文件;
4.删除该类型的文件;
5.重新打开工程。
4. 为什么编译器IAR 暂停或中断后,watching窗口不停是闪烁
这样的问题我没有遇到过。卸载掉,重装个最新版本的试一下吧!
5. 老大们请问下编译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定义。
6. 同样的一段程序,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的空循环带实现延时,这是不规范的。
7. IAR的c文件窗口 f()不显示函数怎么解决
没有显示说明当前文件的函数并未在任何地方使用,编译器优化后直接去掉了此部分代码的编译。而且这段没有被编译进去的代码,在仿真的时候,连断点都没法打上去。
你检查下代码,结构,编译条件等,想办法去掉选择方面的限制。
8. 如何让IAR编译器自动移除库里不用的函数以节省FLASH
需要用avr studio重新建立工程,并进行一些改编才可以仿真,因为编译器不一样,一个是IAR一个是avr-GCC。
具体说来区别主要体现在中断的写法上,还有iar的库里的头文件中有一些位操作的宏gcc的库里并没有。建议你搜索关键字:“AVR IAR GCC 区别”
9. IAR for stm8的程序,总是编译很慢很慢,不知道什么原因
将库编译为.a文件,就如MDK里的.lib文件,这样会不会快点。
我这里感觉在0.00000000000000000001s,其实没这么快哈哈,但是确实很快。
祝你愉快,满意请采纳。
10. 在IAR中编译程序后,IAR编译器完全没有反应,没有任何错误提示。这是怎么回事啊
1,你的IAR版本是多少,主要针对哪款ARM或MSP430,我的是iar embedded workbench for ARM 5.41
2,BUILD的窗口没有打开,通过"view"打开。
3,我的输出窗口:Total number of errors: 0
Total number of warnings: 28