欢迎来到天天文库
浏览记录
ID:40823741
大小:315.78 KB
页数:11页
时间:2019-08-08
《如何有效减少Nios II EDS所编译程式码大小》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、(原創)如何有效減少NiosIIEDS所編譯程式碼大小?(ICDesign)(NiosII)作者:真OO无双 来源:博客园 发布时间:2008-01-2015:05 阅读:1288次 原文链接 [收藏] Abstract由於體積和成本因素,嵌入式系統的記憶體都很小,所以系統開發人員都很在意編譯出的程式碼大小,本文討論減少NiosIIEDS編譯程式碼大小的方法。使用環境:NiosIIEDS7.2SP1Introduction以DE2而言,on-chipmemory最多只能49KB,SRAM只有512KB,SDRAM也只有8MB,這和Intelx86平
2、台動不動都有上G的記憶體不同,尤其有時為了簡化debug因素,只用on-chipmemory時,最常遇到的就是on-chipmemory塞不下所編譯的程式碼,以下討論幾種能有效減少NiosII程式碼的方法。Solution1.使用Release模式預設為Debug模式,由於需要debugsymbol,檔案大小較大。選好project,按右鍵,ActiveBuildConfiguration->勾選Relase。由於NiosIIEDS除了軟體project外,還會自帶一個systemlibraryproject,兩個project都要改成Release模式。2.
3、調整gcc參數NiosIIEDS預設的gcc並沒有啟動最佳化,可以調成-O3或者-Os。選好project,按右鍵,Properties,左側選C/C++Build,在左側TotalSettingstab選General,在右側OptimizationLevels選Optimizemost(-O3)或Optimizesize(-Os),效果可能要自己實際試試看,且將DebugLevel選None。 3.使用Reduceddevicedrivers一些周邊提供了兩種模式的驅動程式,一種強調的是『速度』,一種強調的是『檔案大小』,NiosIIEDS預設使用強調『速
4、度』的驅動程式,勾選ReducedDeviceDrivers可有效減少程式碼大小。選好project,按右鍵,SystemLibraryProperties,將Reduceddevicedrivers打勾。4.縮小Maxfiledescriptors常數預設為32,根據NiosIISoftwareDeveloper'sHandbook說法,將此常數變小有助於減少編譯程式碼大小。選好project,按右鍵,SystemLibraryProperties,設定Maxfiledescriptors常數。5.將stdout、stderr、stdin設為null若你的軟
5、體程式完全沒用到stdout、stderr、stdin,可將此設為null,將可略為減少編譯程式碼大小。選好project,按右鍵,SystemLibraryProperties,將stdout、stderr、stdin設為null。6.使用SmallClibrary若你使用到ANSIC函數,可選擇使用SmallClibrary,這是gcc為嵌入式系統重新量身訂作的ANSICstandardlibrary。選好project,按右鍵,SystemLibraryProperties,將SmallClibrary打勾。7.使用UNIX-StyleFileI/O若你
6、還想進一步減少編譯程式碼大小,就連SmallClibrary都不要用,事實上,NiosII的HAL已經提供了UNIX-StyleFileI/O函數,直接使用將可有效減少編譯程式碼大小。8.自己實作ANSIC函數若你只需要一小部份的ANSIC函數,事實上可以自己實作,而不要使用整個ANSIClibrary。如getchar()函數:1int getchar(void) {2 char c;3 return ( read (0, &c, 1) == 1) ? (unsigned char) c : EOF;4}9.使用Lightwieghtdevicedriv
7、erAPI一些周邊如JTAGUART、UART、Optrex16207LCD支援LightweightdevicedriverAPI,可減少編譯程式碼大小。選好project,按右鍵,SystemLibraryProperties,將LightweightdevicedriverAPI打勾。10.使用Minimalcharacter-modeAPI若你僅使用簡單的IO功能,可不需includeANSI的stdio.h,而用sys/alt_stdio.h取代,sys/alt_stdio.h提供了alt_printf()、alt_putchar()、alt_put
8、str()與alt_getchar()
此文档下载收益归作者所有