第2节 软件开发流程.docx
《第2节 软件开发流程.docx》由会员分享,可在线阅读,更多相关《第2节 软件开发流程.docx(13页珍藏版)》请在冰豆网上搜索。
第2节软件开发流程
6.2.1NiosII程序的构成
每个NiosII程序包括一个应用工程,可选的库工程和一个板支持包工程。
用户将NiosII程序编译成一个能在NiosII处理上运行的可执行和连接的格式(ExecutableAndLinkedFormatFile——.elf)的文件。
应用工程
NiosIIC/C++应用工程包括组成一个可执行的.elf文件的源代码的集合。
一个典型的应用的特征是一个源文件包含main()——主函数。
应用工程包括libraries和BSP中被调用的函数的源代码。
库工程
库工程是一个库文件(.a)中的源代码的集合。
库文件中通常包含可重用的,通用的函数,这些函数可被多个应用工程所共享。
比如,数学函数库。
库工程没有main()函数。
BSP工程
NiosIIBSP工程是包含特定系统支持代码的特殊的库。
BSP为SOPCBuilder系统的处理器提供定制的软件运行环境。
NiosIIEDS提供相应的工具可以修改设置以控制BSP的行为。
NiosIIIDE和NiosIIIDE开发流程文档中使用"systemlibrary"来指代BSP。
BSP包括如下的组成部分:
硬件抽象层(HAL)
NewlibC标准库
设备驱动
可选的软件包
可选的实时操作系统(RTOS)
硬件抽象层(HAL)
HAL提供一个非线程的,类UNIX的C/C++运行环境。
HAL可以提供通用的I/O设备,允许用户newlibC标准库的函数编程来访问硬件,如printf()。
使用HAL可以最小化(或消除)通过直接访问硬件的寄存器来控制外设和与外设通信。
NewlibC标准库
Newlib是为了嵌入式系统的应用,而对C的标准库进行精简的开源实现。
包括一些常用的函数的集合,如printf()、malloc()和open()等。
设备驱动
每个设备驱动管理一个硬件设备。
HAL为SOPCBuilder系统中的每一个需要驱动程序的设备实例化一个驱动程序。
在NiosII软件开发环境中,设备驱动具有如下的属性:
一个设备驱动是和一个特定的SOPCBuilder设备相关联的。
驱动程序可能有一些设置可以影响驱动程序的编译,这些设置包含在BSP的设置中。
可选的选件包
软件包是用户可以选择加入到BSP工程中,提供附加的功能的源代码。
比如NiosII版本的NichStack®TCP/IP协议栈。
NiosIIIDE和NiosIIIDE设计流程文档使用"软件组件"来指代软件包。
在NiosII软件开发环境中,软件包具有如下的典型特性:
A软件包和特定的硬件没有关联
软件包有一些设置会影响它的编译,这些设置.包含在BSP的设置中。
在NiosII软件开发环境中,软件包和库工程是不同的,软件包是BSP工程的一部分,不是一个单独的库工程。
可选的实时操作系统(RTOS)
NiosIIEDS包含第三方的C/OS-II实时操作系统,用户可以选择加入到BSP中。
C/OS-II基于HAL,实现了一个简单的、welldocumented调度程序。
用户可以修改设置,这些设置也是包含在BSP设置中。
其它的操作系统可从第三方的软件厂商获得。
.
6.2.2NiosIIIDE软件开发步骤
采用NiosIIIDE开发流程,用户使用NiosIIIDE图形用户界面来创建、修改、编译、运行和调试NiosII程序。
IDE创建和管理用户的makefile。
如果用户对编译进程和工程设置干预比较少,而且不需要定制的脚本,采用这种流程比较好。
NiosIIIDE是基于流行的EclipseIDE框架以及EclipseC/C++开发工具(CDT)插件。
NiosIIIDE在后台运行其它的工具,对用户屏蔽了底层工具的细节,提供了一个统一的开发环境。
借助工程的创建和配置向导,NiosIIIDE使用起来很容易,尤其是对NiosII的初学者帮助很大。
Altera公司提供了Windows和Linux操作系统的NiosIIIDE。
下面以电子钟的软件开发为例来介绍软件开发的过程。
1.新建IDE管理的工程
NiosIIIDE提供了新工程的向导,指导用户创建IDE管理的工程。
启动NiosIIIDE,出现NiosIIC/C++的窗口。
首先创建NiosIIC/C++应用程序,在File菜单中选择newNiosIIC/C++Application,启动创建NiosIIC/C++应用工程的向导。
为新的NiosII工程命名:
这里NiosII的工程名为digi_clock。
选择目标硬件:
选择电子钟的硬件的系统的PTF文件,IDE根据该文件来建立系统库。
选择新工程的模板:
这里选择为BlankProject。
在该窗口中,用户可以选择是创建一个新的系统库,或是利用已有的系统库,缺省的配置是新建一个系统库。
如在图中直接点击Finish,则选择新建一个系统库。
在上图中点击Finish之后,NiosIIIDE创建新的工程,IDE也创建了系统库工程*_syslib。
这些工程出现在IDE工作台的NiosIIC/C++工程视图中。
digi_clock为C/C++工程,digi_clock_syslib[SOPC]为系统库工程。
建立C的源文件,首先选中digi_clock工程,然后单击右键,在弹出菜单选择NewSourceFile,用户也可以在选择File菜单NewSourceFile。
进行如上的操作会出现下图的窗口提示用户输入源程序的文件名,本例取名为digi_clock.c,注意一定要加上后缀名,点击Finish完成。
用户采用同样的步骤来建立头文件,最后选择HeadFile即可,将头文件命名为digi_clock.h
2.编译工程和管理工程
对源程序和头文件编辑完成之后,对工程进行编译,编译的方法,是右键单击digi_clock工程,然后在弹出菜单中选择BuildProject,如下图,或者选择Project菜单BuildProject。
编译成功后,在工程下面会出现一个Binaries的目录,其中有一个可执行的文件digi_clock.elf。
编译中出现的错误和警告,IDE会在窗口给出,用户根据系统提供的信息进行修改。
在菜单中,用户还可以对工程一些重要的选项进行设置。
有如下的一些设置:
Properties——主要是管理工程和硬件以及其它工程的关联。
SystemLibraryProperties——管理硬件的特定的设置,比如通信设备,存储器的分配。
RunAs——管理程序是在硬件上运行,还是在指令仿真器环境下运行。
DebugAs——管理是在硬件上调试程序,还是在指令仿真器环境下。
Properties设置
在上图中点击Properties出现下图的窗口,该窗口的为Info页,显示的该工程的一些信息,不用设置,还有其它的页也无须设置,这里重点介绍C/C++Build页,C/C++Indexer页。
在上图中点击C/C++Build,出现下图所示的窗口,在该窗口中,用户关心的选项有Configuration下拉列表框、ToolSettings选项卡。
Configuration下拉列表框选择编译工程时采用调试模式(Debug)还是发布(Release)模式。
不同的模式对应不同的编译器设置,优化级别和调试级别都可能不同,用户也可以自己来设置编译器的优化级别和调试级别,如下图中的ToolsSettings页中的NiosIICompiler的General栏。
选用Release模式能很大程度减小程序空间并提高程序的执行性能。
在上图中点击C/C++Indexer,出现如下图所示的窗口,在该窗口中,用户在AvailableIndexers下拉列表框中,可以选择可用的检索器,这里有三个选项,第一个选项是不使用Indexer;第二个选项是FastC/C++Indexer;第三个是FullC/C++Indexer。
各种Indexer的特点也给出了说明。
借助于检索器,用户可以方便地找到程序文件中的相关信息。
SystemLibraryProperties的设置
在工程的弹出菜单中点击SystemLibraryProperties,出现下图的窗口