導航:首頁 > 源碼編譯 > 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 瀏覽:492
為什麼鴻蒙那麼像安卓 瀏覽:735
安卓手機怎麼拍自媒體視頻 瀏覽:185
單片機各個中斷的初始化 瀏覽:723
python怎麼集合元素 瀏覽:480
python逐條解讀 瀏覽:832
基於單片機的濕度控制 瀏覽:498
ios如何使用安卓的帳號 瀏覽:882
程序員公園采訪 瀏覽:811
程序員實戰教程要多長時間 瀏覽:974
企業數據加密技巧 瀏覽:134
租雲伺服器開發 瀏覽:813
程序員告白媽媽不同意 瀏覽:335
攻城掠地怎麼查看伺服器 瀏覽:600