(原創) 如何有效減少Nios II EDS所編譯程式碼大小? (IC Design) (Nios II)
2008-01-20 15:05
561 查看
Abstract
由於體積和成本因素,嵌入式系統的記憶體都很小,所以系統開發人員都很在意編譯出的程式碼大小,本文討論減少Nios II EDS編譯程式碼大小的方法。
使用環境:Nios II EDS 7.2 SP1
Introduction
以DE2而言,on-chip memory最多只能49KB,SRAM只有512KB,SDRAM也只有8MB,這和Intel x86平台動不動都有上G的記憶體不同,尤其有時為了簡化debug因素,只用on-chip memory時,最常遇到的就是on-chip memory塞不下所編譯的程式碼,以下討論幾種能有效減少Nios II程式碼的方法。
Solution
1.使用Release模式
預設為Debug模式,由於需要debug symbol,檔案大小較大。
選好project,按右鍵,Active Build Configuration -> 勾選Relase。由於Nios II EDS除了軟體project外,還會自帶一個system library project,兩個project都要改成Release模式。
int getchar(void) {
2 char c;
3 return ( read (0, &c, 1) == 1) ? (unsigned char) c : EOF;
4}
9.使用Lightwieght device driver API
一些周邊如JTAG UART、UART、Optrex 16207 LCD支援Lightweight device driver API,可減少編譯程式碼大小。
選好project,按右鍵,System Library Properties ,將Lightweight device driver API打勾。
![](http://images.cnblogs.com/cnblogs_com/oomusou/WindowsLiveWriter/NiosIIEDSNiosII_D3F8/nios_ii_size_06_772589e1-aac0-40c4-82ca-ca5efa09212f.gif)
10.使用Minimal character-mode API
若你僅使用簡單的IO功能,可不需include ANSI的stdio.h,而用sys/alt_stdio.h取代,sys/alt_stdio.h提供了alt_printf()、alt_putchar()、alt_putstr()與alt_getchar(),如此將可減少編譯程式碼大小。
11.移除不需要的驅動程式
若有硬體周邊存在,無論你軟體程式是否存取該硬體,Nios II EDS預設會幫你加上該硬體的驅動程式,如此將會增加編譯程式碼大小,請手動移除不需要的硬體驅動程式。
12.避免Clean exit
Clean exit會將所有C函數內部I/O buffer清除,並呼叫任何對atexit()註冊的函數,Nios II EDS預設使用Clean exit。
選好project,按右鍵,System Library Properties ,不要選Clean exit(flush buffers)。
![](http://images.cnblogs.com/cnblogs_com/oomusou/WindowsLiveWriter/NiosIIEDSNiosII_D3F8/nios_ii_size_07_33110767-b120-41fd-8860-a219aa363707.gif)
13.勾選Program never exits
嵌入式系統通常不會結束,所以可勾選Program never exits減少exit所造成的負擔。
選好project,按右鍵,System Library Properties ,勾選Program never exits。
![](http://images.cnblogs.com/cnblogs_com/oomusou/WindowsLiveWriter/NiosIIEDSNiosII_D3F8/nios_ii_size_08_78ee7dac-a787-45e0-a49d-707f99731cfb.gif)
14.不要使用C++
Nios II EDS預設支援C++,但C++所編譯的程式碼大小較大,建議使用純C語言撰寫。
選好project,按右鍵,System Library Properties ,不要勾選Support C++。
![](http://images.cnblogs.com/cnblogs_com/oomusou/WindowsLiveWriter/NiosIIEDSNiosII_D3F8/nios_ii_size_09_ab638627-b5c2-4bbf-9d92-27655cade454.gif)
See Also
(原創) 如何使用ModelSim-Altera對Nios II仿真? (SOC) (Nios II) (SOPC Builder) (ModelSim) (DE2)
Conclusion
我只是將Nios II Software Developers's Handbook中提到的方法簡單的加以整理,更詳細請直接參考Altera手冊。
Reference
Nios II Software Developer's Handbook
紫藤2的NiosII如何降低代碼長度
由於體積和成本因素,嵌入式系統的記憶體都很小,所以系統開發人員都很在意編譯出的程式碼大小,本文討論減少Nios II EDS編譯程式碼大小的方法。
使用環境:Nios II EDS 7.2 SP1
Introduction
以DE2而言,on-chip memory最多只能49KB,SRAM只有512KB,SDRAM也只有8MB,這和Intel x86平台動不動都有上G的記憶體不同,尤其有時為了簡化debug因素,只用on-chip memory時,最常遇到的就是on-chip memory塞不下所編譯的程式碼,以下討論幾種能有效減少Nios II程式碼的方法。
Solution
1.使用Release模式
預設為Debug模式,由於需要debug symbol,檔案大小較大。
選好project,按右鍵,Active Build Configuration -> 勾選Relase。由於Nios II EDS除了軟體project外,還會自帶一個system library project,兩個project都要改成Release模式。
int getchar(void) {
2 char c;
3 return ( read (0, &c, 1) == 1) ? (unsigned char) c : EOF;
4}
9.使用Lightwieght device driver API
一些周邊如JTAG UART、UART、Optrex 16207 LCD支援Lightweight device driver API,可減少編譯程式碼大小。
選好project,按右鍵,System Library Properties ,將Lightweight device driver API打勾。
![](http://images.cnblogs.com/cnblogs_com/oomusou/WindowsLiveWriter/NiosIIEDSNiosII_D3F8/nios_ii_size_06_772589e1-aac0-40c4-82ca-ca5efa09212f.gif)
10.使用Minimal character-mode API
若你僅使用簡單的IO功能,可不需include ANSI的stdio.h,而用sys/alt_stdio.h取代,sys/alt_stdio.h提供了alt_printf()、alt_putchar()、alt_putstr()與alt_getchar(),如此將可減少編譯程式碼大小。
11.移除不需要的驅動程式
若有硬體周邊存在,無論你軟體程式是否存取該硬體,Nios II EDS預設會幫你加上該硬體的驅動程式,如此將會增加編譯程式碼大小,請手動移除不需要的硬體驅動程式。
12.避免Clean exit
Clean exit會將所有C函數內部I/O buffer清除,並呼叫任何對atexit()註冊的函數,Nios II EDS預設使用Clean exit。
選好project,按右鍵,System Library Properties ,不要選Clean exit(flush buffers)。
![](http://images.cnblogs.com/cnblogs_com/oomusou/WindowsLiveWriter/NiosIIEDSNiosII_D3F8/nios_ii_size_07_33110767-b120-41fd-8860-a219aa363707.gif)
13.勾選Program never exits
嵌入式系統通常不會結束,所以可勾選Program never exits減少exit所造成的負擔。
選好project,按右鍵,System Library Properties ,勾選Program never exits。
![](http://images.cnblogs.com/cnblogs_com/oomusou/WindowsLiveWriter/NiosIIEDSNiosII_D3F8/nios_ii_size_08_78ee7dac-a787-45e0-a49d-707f99731cfb.gif)
14.不要使用C++
Nios II EDS預設支援C++,但C++所編譯的程式碼大小較大,建議使用純C語言撰寫。
選好project,按右鍵,System Library Properties ,不要勾選Support C++。
![](http://images.cnblogs.com/cnblogs_com/oomusou/WindowsLiveWriter/NiosIIEDSNiosII_D3F8/nios_ii_size_09_ab638627-b5c2-4bbf-9d92-27655cade454.gif)
See Also
(原創) 如何使用ModelSim-Altera對Nios II仿真? (SOC) (Nios II) (SOPC Builder) (ModelSim) (DE2)
Conclusion
我只是將Nios II Software Developers's Handbook中提到的方法簡單的加以整理,更詳細請直接參考Altera手冊。
Reference
Nios II Software Developer's Handbook
紫藤2的NiosII如何降低代碼長度
相关文章推荐
- 【转】 如何有效減少Nios II EDS所編譯程式碼大小? (IC Design) (Nios II)
- (原創) 如何在μClinux開發第一支Hello World程式? (IC Design) (DE2) (Nios II) (OS) (Linux) (μClinux) (C/C++) (gcc)
- (原創) 如何在DE2將CCD影像顯示在彩色LCD? (Nios II軟體篇 + μC/OS-II + SRAM + 驅動程式) (IC Design) (DE2) (Nios II) (μC/OS-II) (SOPC Builder) (TRDB-LCM)
- (原創) 如何在Nios II使用Zip File System? (IC Design) (Nios II) (DE2)
- (原創) 如何在DE2將CCD影像顯示在彩色LCD上? (Nios II軟體篇 + onchip memory) (IC Design) (DE2) (Nios II) (SOPC Builder) (TRDB-LCM)
- (原創) 如何破解Quartus II 7.2 SP3? (IC Design) (Quartus II) (Nios II)
- (原創) 如何在Nios II顯示8位數的七段顯示器? (IC Design) (DE2) (Nios II)
- (原創) 如何破解Quartus II 6.1? (初級) (IC Design) (Quartus II) (Nios II)
- (原創) 如何解決Nios II的Timestamp不match的錯誤訊息? (IC Design) (DE2) (Nios II) (Quartus II) (SOPC Builder)
- (原創) 如何破解Quartus II 6.0? (IC Design) (Quartus II) (Nios II)
- (原創) 如何在Nios II EDS 8.0使用Host File System與Zip File System? (SOC) (Nios II)
- (原創) 如何自己用SOPC Builder建立一個能在DE2上跑μC/OS-II的Nios II系統? (IC Design) (DE2) (Quartus II) (Nios II) (SOPC Builder) (μC/OS-II)
- (原創) 如何破解Quartus II 7.1? (IC Design) (Quartus II) (Nios II)
- (原創) 如何在Nios II使用16x2字元液晶顯示器? (IC Design) (DE2) (Nios II)
- (原創) 如何使用硬體 + μC/OS-II 的方式『播放SD卡內wav檔音樂』? (IC Design) (DE2) (Quartus II) (Nios II) (μC/OS-II)
- (原創) 如何在DE2用軟體存取SDRAM? (IC Design) (DE2) (Nios II)
- (原創) 如何使用Nios II C2H compiler? (IC Design) (DE2) (Nios II) (Quartus II) (SOPC Builder) (C/C++) (C2H)
- (原創) 如何加速Altera的EDA工具? (IC Design) (Quartus II) (Nios II) (SOPC Builder)
- (原創) 如何設定Nios II EDS最佳環境? (SOC) (Nios II)
- (原創) 為什麼Nios II reset後,軟體程式就不會動了? (IC Design) (DE2) (Nios II) (SOPC Builder)