如何减小nios2程序空间大小转载 减小pdf文件大小

http://www.cnblogs.com/oomusou/archive/2008/06/10/1046257.html

(原創) 如何有效減少Nios II EDS所編譯程式碼大小? (IC Design) (NiosII)

Abstract
由於體積和成本因素,嵌入式系統的記憶體都很小,所以系統開發人員都很在意編譯出的程式碼大小,本文討論減少Nios IIEDS編譯程式碼大小的方法。

使用環境:Nios II EDS 7.2 SP1

Introduction
以DE2而言,on-chip memory最多只能49KB,SRAM只有512KB,SDRAM也只有8MB,這和Intelx86平台動不動都有上G的記憶體不同,尤其有時為了簡化debug因素,只用on-chip memory時,最常遇到的就是on-chipmemory塞不下所編譯的程式碼,以下討論幾種能有效減少Nios II程式碼的方法。

Solution
1.使用Release模式

預設為Debug模式,由於需要debug symbol,檔案大小較大。

選好project,按右鍵,Active Build Configuration ->勾選Relase。由於Nios II EDS除了軟體project外,還會自帶一個system libraryproject,兩個project都要改成Release模式。

2.調整gcc參數

Nios II EDS預設的gcc並沒有啟動最佳化,可以調成-O3或者-Os。

選好project,按右鍵,Properties ,左側選C/C++ Build,在左側 Total Settingstab選General,在右側Optimization Levels選Optimize most(-O3)或Optimizesize(-Os),效果可能要自己實際試試看,且將Debug Level選None。

3.使用Reduced device drivers

一些周邊提供了兩種模式的驅動程式,一種強調的是『速度』,一種強調的是『檔案大小』,Nios IIEDS預設使用強調『速度』的驅動程式,勾選Reduced Device Drivers可有效減少程式碼大小。

選好project,按右鍵,System Library Properties ,將Reduced devicedrivers打勾。

4.縮小Max file descriptors常數

預設為32,根據Nios II Software Developer'sHandbook說法,將此常數變小有助於減少編譯程式碼大小。

選好project,按右鍵,System Library Properties ,設定Max filedescriptors常數。

5.將stdout、stderr、stdin設為null

若你的軟體程式完全沒用到stdout、stderr、stdin,可將此設為null,將可略為減少編譯程式碼大小。

選好project,按右鍵,System Library Properties,將stdout、stderr、stdin設為null。

6.使用Small C library

若你使用到ANSI C函數,可選擇使用Small C library,這是gcc為嵌入式系統重新量身訂作的ANSI Cstandard library。

選好project,按右鍵,System Library Properties ,將Small C library打勾。

7.使用UNIX-Style File I/O

若你還想進一步減少編譯程式碼大小,就連Small C library都不要用,事實上,NiosII的HAL已經提供了UNIX-Style File I/O函數,直接使用將可有效減少編譯程式碼大小。

8.自己實作ANSI C函數

若你只需要一小部份的ANSI C函數,事實上可以自己實作,而不要使用整個ANSI Clibrary。如getchar()函數:

1intgetchar(void){
2charc;
3return(read(0,&c,1)==1)?(unsignedchar)c:EOF;
如何减小nios2程序空间大小(转载) 减小pdf文件大小
4}


9.使用Lightwieght device driver API

一些周邊如JTAG UART、UART、Optrex 16207 LCD支援Lightweight device driverAPI,可減少編譯程式碼大小。

選好project,按右鍵,System Library Properties ,將Lightweight devicedriver API打勾。

10.使用Minimal character-mode API
若你僅使用簡單的IO功能,可不需includeANSI的stdio.h,而用sys/alt_stdio.h取代,sys/alt_stdio.h提供了alt_printf()、alt_putchar()、alt_putstr()與alt_getchar(),如此將可減少編譯程式碼大小。

11.移除不需要的驅動程式

若有硬體周邊存在,無論你軟體程式是否存取該硬體,Nios IIEDS預設會幫你加上該硬體的驅動程式,如此將會增加編譯程式碼大小,請手動移除不需要的硬體驅動程式。

12.避免Clean exit

Clean exit會將所有C函數內部I/O buffer清除,並呼叫任何對atexit()註冊的函數,Nios IIEDS預設使用Clean exit。

選好project,按右鍵,System Library Properties ,不要選Clean exit(flushbuffers)。

13.勾選Program never exits

嵌入式系統通常不會結束,所以可勾選Program never exits減少exit所造成的負擔。

選好project,按右鍵,System Library Properties ,勾選Program neverexits。

14.不要使用C++

Nios II EDS預設支援C++,但C++所編譯的程式碼大小較大,建議使用純C語言撰寫。

選好project,按右鍵,System Library Properties ,不要勾選Support C++。

See Also
(原創) 如何使用ModelSim-Altera對Nios II仿真?(SOC) (Nios II) (SOPC Builder) (ModelSim) (DE2)

Conclusion
我只是將Nios II Software Developers'sHandbook中提到的方法簡單的加以整理,更詳細請直接參考Altera手冊。

Reference
Nios II Software Developer's Handbook

  

爱华网本文地址 » http://www.413yy.cn/a/25101010/39387.html

更多阅读

如何扩大c盘空间 为什么c盘无法扩展卷

如何扩大c盘空间——简介 如何扩大c盘空间,经常碰到很多朋友说看到别人的C盘剩余几十个G,再看看自己的几十M,郁闷的很,电脑经常报警空间不够,一个问题,如何扩大c盘空间呢,再这里我给大家详细介绍一下扩大方法。如何扩大c盘空间——工具/原

如何制作exe程序可执行文件 exe可执行文件制作

如何制作exe程序可执行文件——简介很多软件的运行都需要搭建环境,只有exe文件可以在不安装软件和数据库的环境下运行,那么怎么制作exe程序可执行文件呢,下面天使教你如何制作。如何制作exe程序可执行文件——工具/原料Microsoft Visu

如何免费装扮qq空间 qq空间皮肤制作教程

如何免费装扮qq空间——简介qq空间是腾讯公司开发出来的一个个性空间,在qq空间上可以书写日记,上传自己的图片,听音乐,写心情。根据自己的喜爱设定空间的背景、小挂件等,从而使每个空间都有自己的特色。如何免费装扮qq空间呢?几年前有好

声明:《如何减小nios2程序空间大小转载 减小pdf文件大小》为网友把酒临风分享!如侵犯到您的合法权益请联系我们删除