NiosII软件架构解析
作者: 蔡伟纲
https://www.wendangku.net/doc/b44103331.html,
2007年09月29日
内容简介
本书以Altera公司的技术资料为蓝本,结合作者多年的Nios软件开发经验及长期在EDACN专业论坛NiosII版块担任版主积累的心得,首先从复位、中断、编程环境、设备驱动以及应用程序二进制接口5个方面对NiosII软件架构进行横向揭密,接着又从汇编语法、makefile、链接脚本、调试手段以及开发技巧等多个角度对NiosII软件架构进行纵向解析,纵横交错层层揭开了NiosII软件架构的真面目,既可作为NiosII嵌入式软件开发的中高阶指导书,也可作为NiosII软件开发手册。
本书书名虽为‘NiosII软件架构解析’,但内容涵盖嵌入式软件开发的方方面面,主要面向学习或从事嵌入式软件开发的学生和工程技术人员,也可作为相关专业研究生和高年级本科生的教材。
导读
版本
本书基于NiosII IDE(Version: 6.0,Build: 93)编写。
章节框架
本书内容基于‘程序’框架编写,既有主程序也有函数库?。前5章:中断揭密篇、复位揭密篇、HAL揭密篇、外设驱动篇以及应用程序二进制接口篇是本书论述的重点,它们一起构成了主程序部分。而后续的各章节则构成了函数库,供主程序调用,它们的存在是为了让读者能更好的消化和吸收前5个章节的内容。
字体及其用途说明
正文
正文字体;
代码
该字体用于源文件中的代码;
注释
该字体用于源文件中的注释;
强调
该字体起到强调作用,可以帮助读者在阅读的时候更快的抓住关键字,从而更轻松的理解文中所要表达的含义;
超链接
读者通常可以在目录中找到该字体格式的文字,这样可以帮助纸张版本书籍的阅读者更快的检索到文中的相关知识;而电子版本书籍的读者则可以通过鼠标单击的动作直接跳到相关内容;
小贴士
此类字体的内容通常是作者的一些心得体会、经验积累、小窍门以及一些需要读者特别注意的内容;
第一级列表
第二级列表
第三级列表
第四级列表
此类字体为列表格式,它是本书使用最多的一种字体,其最主要的特点是
可以让文字内容层次分明、重点突出;
源文件阅读须知
本书在解读HAL源文件时大量引用了NiosII软件架构中的预处理器、特殊宏定义、汇编伪指令以及链接脚本中定义的符号,为了避免在源文件中大量的重复介绍这些知识点,也为了读者更好的阅读和理解源文件,我把这些知识点分门别类,归纳为独立的四个章节:NiosII之软件架构中的预处理器、NiosII之软件架构中的特殊宏定义、NiosII之汇编语言相关语法以及NiosII之链接脚本(linker script)。希望读者在阅读本书源文件之前能对这些章节有所了解,并结合这几个章节解读源文件。
最佳阅读流程
本书大部分知识具有很强的应用背景,读者很难一下子理解文中所要传达的全部内容,因此本书的最佳阅读流程是:首先通读全文,不求深入理解和掌握文中的每个知识点,但求对各章节有个感性认识,然后在实际项目开发或自学过程中碰见问题后,判定问题属性并结合目录快速定位相关知识,此时再对知识点进行仔细咀嚼、消化和吸收。
最好的学习方法:理论结合实践,带着问题学习!
我读大学的时候,为了自学单片机,曾经反反复复、一遍又一遍的阅读关于51单片机的书籍,可是1年过后,却还是觉得两手空空,什么也不会。后来有幸参加全国电子线路竞赛,仅半个月时间,对51单片机就能够运用自如。所以,不管学习什么东西,能够实际动手并带着问题学习将起到事半功倍的效果。
学好NiosII的前提
单片机硬件基础
较强的C语言编程能力
较强的调试能力(调试能力远比编程能力重要)
初级汇编语言基础
初步了解GNU编译器工具链的工作原理
了解QuartusII的开发流程
良好的英文阅读能力,因为所有nios的权威资料都来自altera的官方网站https://www.wendangku.net/doc/b44103331.html,/literature/lit-nio2.jsp
一个NiosII参考开发板,最好是出自于altera公司
一个要求用NiosII处理器开发的项目,没有项目也不要紧,两者的区别在于
前者的学习过程是: 碰见问题->解决问题->提高自己
后者的学习过程是: 构思问题->解决问题->提高自己
获取NiosII的相关帮助
求助方式
Altera官方网站有一个mysupport网页,用户可以提交问题,目前已支持中英文版本 https://https://www.wendangku.net/doc/b44103331.html,/eservice/
Nios的官方论坛https://www.wendangku.net/doc/b44103331.html,
这是个英文网站,里面都是Nios的高手,其中有很多版主都是Nios的鼻祖
向Altera的FAE求助;
如果你们的产品量很大,或者是个大公司,就可以向Altera或者代理商直接求助: https://www.wendangku.net/doc/b44103331.html,/corporate/contact/con-index.html 国内也有几个不错的Nios论坛:
https://www.wendangku.net/doc/b44103331.html,/bbs/forum-540-1.html
https://www.wendangku.net/doc/b44103331.html,/ecbbs/index.asp?boardid=9
如果希望尽快得到别人的回复,问题的描述是非常重要的。为了得到最快的响应,最好在提问时说明下面的详细信息:
QuartusII版本
NiosII IDE版本
QuartusII或NiosII IDE的详细出错信息
问题的详细描述
尝试过的解决办法
很多时候还需要提供项目的源文件
自助方式
NiosII IDE集成的帮助系统,主要提供与IDE相关的帮助.
打开NiosII IDE,选择菜单: NiosII IDE->Help->Help Contents, 此时会弹出一个Help网页,该网页支持搜索功能,你可以在里面输入你所要查找信息的关键字,就可以得到相关信息;
Altera的官方提供了一个Find Answer的网站,这个网站汇总了与altera相关的问题及其解答;并且该网站除了简单的关键字搜索外还采用了google技术的高级搜索功能: https://www.wendangku.net/doc/b44103331.html,/support/spt-answers.html
在安装完NiosII IDE之后,系统会在
网络资源
Altera官方的NiosII相关文档下载网址
https://www.wendangku.net/doc/b44103331.html,/literature/lit-nio2.jsp
Altera官方的ftp资源,提供QuartusII, NiosII IDE等软件的各种版本下载ftp://https://www.wendangku.net/doc/b44103331.html,/outgoing/release/
Altera官方网站上提供的NiosII相关的视频demo,对初学者非常有帮助https://www.wendangku.net/doc/b44103331.html,/education/demonstrations/online/embedded -processor/onl-nios2.html
Altera提供的技术培训课程,很多是免费的哦?
https://https://www.wendangku.net/doc/b44103331.html,/etraining/etraining.asp
基于niosforum的nioswiki,虽然目前内容不多,但是相信随着时间的推移,一定会成为nios资源的集中营
https://www.wendangku.net/doc/b44103331.html,
本书的维护和升级
本书内容基于‘程序’框架编写,目录相当于程序框架、文中的超链接相当于子程序调用,而前面‘内容简介’以及‘导读’等章节则相当于程序的注释。同样,为了再版的需要,本书也需要制定维护和升级的策略。?
信息反馈途径
书籍邮箱:
书籍博客:https://www.wendangku.net/doc/b44103331.html,
奖励方式
凡反馈了重大bug,并最终被收录到下一版书籍的读者,都将被列入下版书籍的感谢者名单并免费获赠新版书籍1本。所以反馈bug信息的读者不要忘了留下详细的通信地址和邮编以及真实姓名。
感言
一本不错的书可以让你得到很多‘鱼’,而一本真正的好书不但可以让你得到‘鱼’,更重要的是教会了你‘渔’。?
从提笔开始写这本书到最终的完成已经整整1年半了,写书的过程就是自学的过程:从刚开始被.section等汇编伪指令弄得晕头转向,到中间为了弄懂makefile、linker script而在网上苦苦搜索好几个月,再到最终整本书的完成,经历了无数次无知的烦恼与得解的欢愈,最贴切的而简单的心情描述应该是‘痛并快乐着’吧!
联系作者
本书有一个博客网站https://www.wendangku.net/doc/b44103331.html,,上面包含了本书的样章、源码以及本书的更新和勘误。除此之外,作者的所有原创文章、范例、实验以及傻瓜式教学资料都将在博客发布,欢迎广大读者访问博客。
您可以通过给作者发送e-mail。作者会阅读所有的来信,但可能因收信量过大而无法及时对所有邮件作出回复。
目录
详细目录请到我的博客下载:
https://www.wendangku.net/doc/b44103331.html,/u1/34012/showart_271958.html
NiosII之软件开发工具介绍
1.1前言
本章主要介绍Altera提供的NiosII处理器软件开发相关工具,分以下四个目录: NiosII集成开发环境及其相关工具
Altera命令行工具
GNU编译器工具链
软件库和嵌入式软体元件
本章并不对所有工具进行详细的介绍,但是会在文中指出最适合的参考文档。
1.2NiosII集成开发环境及其相关工具
1.2.1NiosII IDE
功能
NiosII IDE是NiosII处理器的软件集成开发环境,所有软件开发相关的任务都可以在IDE中进行,包括代码编辑、编译、链接以及调试等.
参考文档
请参考NiosII IDE帮助系统,可以通过NiosII IDE的菜单直接进入:
NiosII IDE -> Help -> Help Contents
NiosII IDE帮助系统非常有用,用户可以快速定位NiosII IDE所有菜单选项的以及IDE工作原理的相关介绍。例如用户可以通过搜索关键字‘makefile’找到IDE编译环境的相关介绍。
1.2.2Flash Programmer
功能
NiosII IDE集成了Flash Programmer,它允许用户通过IDE提供的图形用户界面直接对目标板上的flash进行编程操作. Flash Programmer不但可以支持Altera提供的参考开发板,也支持用户自定义的开发板,它可以同时完成下面数据的烧写工作: 项目的可执行代码和数据
FPGA硬件配置数据
其它自定义文件,例如:HAL文件子系统
参考文档
Nios II Flash Programmer User Guide.pdf,其下载链接如下:
https://www.wendangku.net/doc/b44103331.html,/literature/ug/ug_nios2_flash_programm er.pdf
1.2.3Instruction Set Simulator
功能
指令集仿真器Instruction Set Simulator(ISS)是Altera提供的用于仿真
NiosII指令集的软件仿真器.它的主要特点是不依赖于硬件,用户可以在没有任何硬件板子的条件下进行代码的调试和仿真工作;
注意事项
ISS只是一个简单的指令集仿真器,而不是一个系统仿真器,功能具有很大的局限性;
参考文档
请参考NiosII IDE帮助系统,可以通过NiosII IDE的菜单直接进入:
NiosII IDE -> Help -> Help Contents
1.2.4Quartus II Programmer
功能
Quartus II Programmer是QuartusII软件的一部分,但是用户也可以在NiosII IDE的界面下直接打开Quartus II Programmer.它的主要功能是将FPGA的配置文件下载到目标板.
参考文档
请参考Quartus II Programmer的帮助文档,打开Quartus II Programmer后,按下F1键即可打开它的帮助文档.
1.3Altera命令行工具
1.3.1命令行工具的位置
Altera提供的命令行工具位于目录:
1.3.2命令行工具的使用
用户可以在Nios II Command Shell环境下运行命令行工具。NiosII IDE中很多功能都是通过调用这些命令行工具实现的。举个例子,用户可以通过编写一个脚本文件来自动完成整个项目的编译任务,而无须打开NiosII IDE。
1.3.3命令行工具的帮助
每一个命令行工具都提供自己的帮助文档(遗憾的是这些帮助文档大都不够详细,对于初学者而言,要熟悉这些工具有很大的难度),用户可以通过打开Nios II Command Shell,然后键入下面的命令来获取相关帮助:
1.3.4NiosII IDE命令行工具
用户可以利用NiosII IDE命令行工具直接完成NiosII IDE项目的创建和编译等工作,而不必打开NiosII IDE图形用户界面。这些工具允许用户以命令行脚本的形式来控制NiosII IDE的工作。实际上这些工具是在后台运行NiosII IDE,所以用户不会看到NiosII IDE的图形用户界面。
1.3.4.1nios2-create-system-library
创建一个新的系统库项目
1.3.4.2nios2-create-application-project
创建一个新的C/C++应用项目
1.3.4.3nios2-build-project
创建或者更新makefile文件,并根据makefile文件编译项目
注意:该工具只适用于由IDE自动创建和管理makefile文件的项目.
1.3.4.4nios2-import-project
导入一个已经创建的NiosII IDE项目到当前的workspace.
1.3.4.5nios2-delete-project
将一个项目从NiosII IDE的当前workspace移走,并选择性的从文件系统中删除相关文件.
1.3.4.6nios2-download
将代码下载到目标处理器以供调试和运行,更详细的介绍请参考NiosII之VerifyFailed小结;
1.3.4.7nios2-flash-programmer
将数据烧写到目标板上的flash;实际上我们前面介绍的Flash Programmer(P13)正是通过调用该命令行工具来完成flash的编程工作的.
1.3.4.8nios2-gdb-server
翻译GNU调试器(GDB)远程串行协议包并通过TCP传输给目标NiosII处理器的JTAG 模块.
1.3.4.9nios2-terminal
该工具主要负责NiosII IDE与目标处理器上JTAG模块之间的通信.
1.3.4.10validate_zip
验证指定的zip文件是否与Read-only zip file system(P21)兼容.
1.3.4.11nios2-debug
将程序下载到目标处理器并运行debugger.
1.3.4.12nios2-console
打开FS2的命令行接口并建立与NiosII处理器之间的通信,如果为其提供srec文件,那么该文件会被下载到目标处理器.FS2是与NiosII IDE绑定的一个第三方软件调试工具,能提供强大的调试功能.
1.3.4.13nios2-configure-sof
该工具负责配置FPGA.如果没有指定sof文件,它将自己在当前目录或者ptf文件所在目录搜索合适的sof文件.
1.3.5文件转换工具
当数据在不同的命令行工具中传递的时候,可能需要用到文件转换工具。
1.3.5.1bin2flash
将binary文件转换为.flash文件,以供Flash Programmer(P13)使用.
1.3.5.2elf2dat
将.elf可执行文件转换为适合于Verilog HDL硬件模拟器的.dat文件.
1.3.5.3elf2flash
将.elf可执行文件转换为.flash文件,以供Flash Programmer(P13)使用. 更详细的介绍请参考NiosII软件架构解析之复位揭密篇;
1.3.5.4elf2hex
将.elf可执行文件转换为intel的.hex文件格式.
1.3.5.5elf2mem
该工具将根据给定的.elf和.ptf文件生成给定的NiosII系统上的存储设备的内容文件.
1.3.5.6elf2mif
将.elf可执行文件转换为QuartusII的存储器初始化文件.mif.
1.3.5.7flash2dat
将.flash文件转换为适合于Verilog HDL硬件模拟器的.dat文件.
1.3.5.8mk-nios2-signaltap-mnemonic-table
该工具将根据给定的.elf和.ptf文件生成供Altera-SignalTapII逻辑分析器使用的包含NiosII指令和符号的助记符表的.stp文件.
1.3.5.9sof2flash
将FPGA配置文件.sof转换为.flash文件,以供Flash Programmer(P13)使用.
1.4GNU编译器工具链
Altera为NiosII处理器提供了一套标准的GNU编译器工具链.
这套GNU工具位于下面的目录:
nios2-elf-
下面简单列举几个常用的GNU工具:
nios2-elf-gcc
make
nios2-elf-as
nios2-elf-ld
nios2-elf-objdump
nios2-elf-size
1.5软件库和嵌入式软体元件
1.5.1Hardware abstraction layer (HAL) system
library
硬件描述层系统库
HAL(Hardware abstraction layer,硬件描述层)是NiosII处理器的软件开发环境,它为程序员提供了底层设备驱动、HAL API以及C标准库等丰富的资源.更详细的信息请参考NiosII软件架构解析之HAL揭密篇;
1.5.2MicroC/OS-II RTOS
MicroC/OS-II是由Micrium公司开发的一个非常受欢迎的嵌入式实时操作系统.
Altera已经为用户移植好了MicroC/OS-II实时操作系统,并将其内嵌到NiosII IDE中,用户可以非常方便快捷的使用和配置MicroC/OS-II实时操作系统;需要注意的是只有完整版的NiosII IDE 6.0的才内嵌MicroC/OS-II实时操作系统,网络评估版是没有的,而6.1之后的完整版和网络评估版都内嵌了MicroC/OS-II实时操作系统;关于MicroC/OS-II实时操作系统的相关信息请参考Nios II Software
Developer’s Handbook 之 MicroC/OS-II Real-Time Operating System,其下载链接为:
https://www.wendangku.net/doc/b44103331.html,/literature/hb/nios2/n2sw_nii52008.pdf
1.5.3Lightweight IP TCP/IP stack
Lightweight IP TCP/IP stack(lwIP)是一个轻量级的TCP/IP协议栈,其主要特性是以最小的资源占用实现完整的TCP/IP协议,因此特别适用于嵌入式系统.Altera 已经在NiosII处理器上为用户移植好了lwIP,并内嵌到NiosII IDE中.用户可以在IDE中非常方便的将uC/OSII和lwIP结合到自己的项目中. lwIP的相关信息请参考Nios II Software Developer’s Handbook 之 Ethernet & Lightweight IP,其下载链接为:
https://www.wendangku.net/doc/b44103331.html,/literature/hb/nios2/n2sw_nii52013.pdf