850 likes | 1.24k Views
第 6 章 软件设计流程和方法. 6.1 Nios II IDE 简介. Nios II IDE 为软件开发提供 4 个主要功能: 一、工程管理 二、编辑器和编译器 三、调试器 四、闪存编程器 统一开发平台,用于所有 Nios II 处理器系统。. 6.1 Nios II IDE 简介. ( 对话框位置: [File] →[New] →[C/C++ Application] ). 工程命名. 硬件抽象层系统库( HAL ) 轻量级 IP TCP/IP 库 uC/OS-II 实时操作系统( RTOS ) Altera 压缩文件系统. 指定硬件系统. 工程模板.
E N D
6.1 Nios II IDE简介 Nios II IDE为软件开发提供4个主要功能: 一、工程管理 二、编辑器和编译器 三、调试器 四、闪存编程器 统一开发平台,用于所有Nios II处理器系统。
6.1 Nios II IDE简介 (对话框位置:[File]→[New]→[C/C++ Application]) 工程命名 • 硬件抽象层系统库(HAL) • 轻量级IP TCP/IP库 • uC/OS-II实时操作系统(RTOS) • Altera压缩文件系统 指定硬件系统 工程模板 模板功能介绍 新工程向导 • 工程管理器 • 新工程向导 • 软件工程模板 • 软件组件
6.1 Nios II IDE简介 • 编辑器和编译器 • 文本编辑器 成熟的全功能源文件编辑器,包括:语法高亮显示C/C++程序代码、全面的搜索工具、文件管理、在线帮助和教程、快速定位及自动纠错、内置调试等功能。 • C/C++编译器 Nios II IDE使用GCC编译器,并为其提供了一个图形化用户界面。提供了一个易用的按钮式流程,允许开发人员手工设置高级编译选项,使得操作更简单方便。 Nios II IDE编译环境自动地生成一个基于用户特定系统配置(SOPC Builder生成的PTF文件)的makefile。编译/链接设置的任何改变都会自动映射到这个自动生成的makefile中。
6.1 Nios II IDE简介 • 调试器 软件调试器(GDB):是强大的、在GNU调试器基础之上的软件调试器。该调试器提供许多基本调试功能以及一些在低成本处理器开发套件中不会经常用到的高级调试功能。 基本调试功能包括:运行控制、调用堆栈查看、软件断点、反汇编代码查看、调试信息查看、指令集仿真器。 高级调试功能包括:硬件断点调试ROM或闪存中的代码、数据触发、指令跟踪。
6.1 Nios II IDE简介 • 闪存编程器 多数使用Nios II处理器的设计都需要采用闪存(Flash)来存储FPGA配置数据和/或应用程序。Nios II IDE提供了一个方便的闪存编程方法。任何连接到FPGA的兼容通用闪存接口(CFI)的闪存器件以及主动串行配置器件EPCS都可以通过Nios II IDE闪存编程器来烧写。
6.2 软件开发流程 • 借助工程的创建和配置向导,Nios II IDE使用起来很容易。 • 下面以电子钟的软件开发为例来介绍软件开发的过程。
1. 新建IDE的工程 • Nios II IDE提供新工程的向导,指导创建IDE工程。启动IDE,出现Nios II C/C++的窗口。
新Nios II工程命名 digi_clock。 • 选择目标硬件: 电子钟硬件系统(PTF文件) • IDE根据该文件来建立系统库。 • 选择新工程的模板:Blank Project。
选择创建一个新系统库(缺省),或使用已有系统库 选择创建一个新系统库(缺省),或使用已有系统库
点击Finish,创建完成工程。IDE同时创建系统库工程*_syslib。 IDE工作台的C/C++ 工程视图
建立C的源文件:选中digi_clock工程,点右键,选择NewSource File(FileNew Source File)
2. 编译工程和管理工程 • 源程序和头文件编辑完成后,进行编译 • 编译的方法:选中digi_clock工程,右键,菜单中选择Build Project(或ProjectBuild Project)
2. 编译工程和管理工程 • 失败:编译的错误和警告,在console窗口给出,根据该信息修改代码。 • 成功:出现Binaries目录,及一个可执行文件digi_clock.elf。是能在Nios II处理上运行的可执行和 连接格式(Executable And Linked Format File—.elf)
3. 参数设置 Properties——管理工程和硬件 System Library Properties——管理硬件的特定的设置,比如通信设备。 Run As——管理程序是在硬件上运行,还是在指令仿真器环境下运行,或在ModelSim软件环境下运行 Debug As——管理是在硬件上调试程序,还是在指令仿真器环境下。
Properties设置(C/C++Build) • Configuration:编译的调试模式,及编译器优化和调试级别 调试(Debug)模式:建议使用 发布(Release)模式:减小程序空间并提高程序的执行性能
Properties设置(C/C++ Indexer) 点C/C++ Indexer: Available Indexers选择检索器 • 第一个选项是不使用Indexer; • 第二个选项是Fast C/C++ Indexer;(建议使用) • 第三个是Full C/C++ Indexer。
System Library Properties的设置 • 标准输入、输出设备等:Jtag_uart • 使用嵌入式OS等(uC/OSII)
6.3 运行和调试程序 • 运行程序(Run) • Run之前需把硬件系统下载到FPGA中 • Nios II程序的运行可以发生在下面的环境 Nios II硬件。 指令集仿真器。 ModelSim软件环境下运行。
6.3.1 调试/运行环境设置 此时运行程序,报错信息? • 对调试环境的设置 (菜单:Run/Debug) Target connection和Debugger配置页;Main配置页 • Nios II Terminal communication device:与Nios II系统通信设备的选择:jtag_uart!
Target connection! (Jtag cable; 系统通信设备的选择)
点击Finish,创建完成工程。IDE同时创建系统库工程*_syslib。 IDE工作台的C/C++ 工程视图
建立C的源文件:选中digi_clock工程,点右键,选择NewSource File(FileNew Source File)
2. 编译工程和管理工程 • 源程序和头文件编辑完成后,进行编译 • 编译的方法:选中digi_clock工程,右键,菜单中选择Build Project(或ProjectBuild Project)
2. 编译工程和管理工程 • 失败:编译的错误和警告,在console窗口给出,根据该信息修改代码。 • 成功:出现Binaries目录,及一个可执行文件digi_clock.elf。是能在Nios II处理上运行的可执行和 连接格式(Executable And Linked Format File—.elf)
3. 参数设置 Properties——管理工程和硬件 System Library Properties——管理硬件的特定的设置,比如通信设备。 Run As——管理程序是在硬件上运行,还是在指令仿真器环境下运行,或在ModelSim软件环境下运行 Debug As——管理是在硬件上调试程序,还是在指令仿真器环境下。
Properties设置(C/C++Build) • Configuration:编译的调试模式,及编译器优化和调试级别 调试(Debug)模式:建议使用 发布(Release)模式:减小程序空间并提高程序的执行性能
Properties设置(C/C++ Indexer) 点C/C++ Indexer: Available Indexers选择检索器 • 第一个选项是不使用Indexer; • 第二个选项是Fast C/C++ Indexer;(建议使用) • 第三个是Full C/C++ Indexer。
System Library Properties的设置 • 标准输入、输出设备等:Jtag_uart • 使用嵌入式OS等(uC/OSII)
6.3 运行和调试程序 • 运行程序(Run) • Run之前需把硬件系统下载到FPGA中 • Nios II程序的运行可以发生在下面的环境 Nios II硬件。 指令集仿真器。 ModelSim软件环境下运行。
6.3.1 调试/运行环境设置 此时运行程序,报错信息? • 对调试环境的设置 (菜单:Run/Debug) Target connection和Debugger配置页;Main配置页 • Nios II Terminal communication device:与Nios II系统通信设备的选择:jtag_uart!
Target connection! (Jtag cable; 系统通信设备的选择)
6.3.2 调试/运行程序 • 相关环境的设置之后,选择Run As,再选择相应的运行环境,如Nios II Haredware。 • Console(控制台)显示调试和运行程序的信息。
6.4 硬件抽象层(HAL)系统库 用户软件开发的主要部分,包括系统的主程序main()和其它子程序。 应用程序开发: 驱动程序: 直接和底层硬件的宏定义打交道。 嵌入式系统的软件开发可分为2部分:
什么是HAL系统库? • 用户在进行嵌入式系统的软件开发时,会涉及到与硬件的通信问题。 • HAL(Hardware Abstraction Layer,硬件抽象层)系统库为与硬件通信的程序提供简单的设备驱动接口 • HAL应用程序接口(API)和ANSI C标准库综合在一起,使用户用类似C语言的库函数来访问硬件设备或文件,如printf()、fopen()、fwrite()等函数。 HAL系统库简介 • 它是用户在NiosⅡIDE中创建一个新的工程时,由 IDE基于用户在SOPC Builder中创建的NiosⅡ处理 器系统(PTF文件)自动生成。
HAL为嵌入式系统中的外围设备提供接口程序。 • HAL和SOPC Builder紧密相关,如果硬件配置有了变化,HAL设备驱动配置也会自动随之改动,从而避免了由于底层硬件的变化而产生的程序错误。 • 用户不必自己创建或拷贝HAL文件,也不必编辑HAL中的任何源代码。NiosⅡIDE 自动创建和管理HAL文件。
6.4 硬件抽象层(HAL)系统库 • HAL的构成 HAL系统库为用户提供下列支持: • 集成了ANSI C标准函数库,允许调用类似C标准库函数; • 提供访问NiosII系统每个设备的驱动程序; • 提供HAL API,用于标准的函数接口如设备访问、中断处理以及ALARM等; • 提供系统初始化函数,为main()函数和C库函数建立运行时环境 • 提供设备初始化函数,在main()函数前,分配设备空间并初始化所有的外围设备。
C标准库——Newlib • HAL系统库与ANSI C标准库一起构成HAL的运行环境(Runtime Environment)。 • Newlib是为了嵌入式系统的应用,而对C的标准库进行精简的开源实现。包括一些常用的函数的集合,如printf()、malloc()和open()等。 • HAL使用的C语言标准库是Newlib,它是的一种开放源代码的实现,是在嵌入式系统上使用的C语言程序库,正好与HAL和Nios Ⅱ处理器相匹配。
6.5 硬件抽象层(HAL)系统库 • HAL的构成(将硬件层和应用层联系起来) Nios II HAL 的结构
6.5 硬件抽象层(HAL)系统库 • 用户程序至少有四种方法访问硬件设备: 1. 调用C标准库函数,如printf()和fwrite(); 2. 调用硬件抽象的API函数,如write(); 3. 调用设备驱动程序,如alt_avalon_uart_write(); 4. 直接访问设备寄存器,如 IOWR_ALTERA_UART_RXDATA(base, data).