NiosII编程优化指南.docx

上传人:b****1 文档编号:3316104 上传时间:2023-05-05 格式:DOCX 页数:11 大小:266.11KB
下载 相关 举报
NiosII编程优化指南.docx_第1页
第1页 / 共11页
NiosII编程优化指南.docx_第2页
第2页 / 共11页
NiosII编程优化指南.docx_第3页
第3页 / 共11页
NiosII编程优化指南.docx_第4页
第4页 / 共11页
NiosII编程优化指南.docx_第5页
第5页 / 共11页
NiosII编程优化指南.docx_第6页
第6页 / 共11页
NiosII编程优化指南.docx_第7页
第7页 / 共11页
NiosII编程优化指南.docx_第8页
第8页 / 共11页
NiosII编程优化指南.docx_第9页
第9页 / 共11页
NiosII编程优化指南.docx_第10页
第10页 / 共11页
NiosII编程优化指南.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

NiosII编程优化指南.docx

《NiosII编程优化指南.docx》由会员分享,可在线阅读,更多相关《NiosII编程优化指南.docx(11页珍藏版)》请在冰点文库上搜索。

NiosII编程优化指南.docx

NiosII编程优化指南

[shared]NiosII编程优化指南

2009-12-0421:

43

Abstract

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

使用環境:

NiosIIEDS7.2SP1

Introduction

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

Solution

1.使用Release模式

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

選好project,按右鍵,ActiveBuildConfiguration->勾選Relase。

由於NiosIIEDS除了軟體project外,還會自帶一個systemlibraryproject,兩個project都要改成Release模式。

2.調整gcc參數

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

選好project,按右鍵,Properties,左側選C/C++Build,在左側TotalSettingstab選General,在右側OptimizationLevels選Optimizemost(-O3)或Optimizesize(-Os),效果可能要自己實際試試看,且將DebugLevel選None。

3.使用Reduceddevicedrivers

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

選好project,按右鍵,SystemLibraryProperties,將Reduceddevicedrivers打勾。

4.縮小Maxfiledescriptors常數

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

選好project,按右鍵,SystemLibraryProperties,設定Maxfiledescriptors常數。

5.將stdout、stderr、stdin設為null

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

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

6.使用SmallClibrary

若你使用到ANSIC函數,可選擇使用SmallClibrary,這是gcc為嵌入式系統重新量身訂作的ANSICstandardlibrary。

選好project,按右鍵,SystemLibraryProperties,將SmallClibrary打勾。

7.使用UNIX-StyleFileI/O

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

8.自己實作ANSIC函數

若你只需要一小部份的ANSIC函數,事實上可以自己實作,而不要使用整個ANSIClibrary。

如getchar()函數:

1

intgetchar(void)

{

2

  charc;

3

  return(read(0,&c,1)==1)?

(unsignedchar)c:

EOF;

4

}

9.使用LightwieghtdevicedriverAPI

一些周邊如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_putstr()與alt_getchar(),如此將可減少編譯程式碼大小。

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

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

12.避免Cleanexit

Cleanexit會將所有C函數內部I/Obuffer清除,並呼叫任何對atexit()註冊的函數,NiosIIEDS預設使用Cleanexit。

選好project,按右鍵,SystemLibraryProperties,不要選Cleanexit(flushbuffers)。

13.勾選Programneverexits

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

選好project,按右鍵,SystemLibraryProperties,勾選Programneverexits。

14.不要使用C++

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

選好project,按右鍵,SystemLibraryProperties,不要勾選SupportC++。

SeeAlso

(原創)如何使用ModelSim-Altera對NiosII仿真?

(SOC)(NiosII)(SOPCBuilder)(ModelSim)(DE2)

Conclusion

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

Reference

NiosIISoftwareDeveloper'sHandbook

紫藤2的NiosII如何降低代碼長度

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2