嵌入式系统课程设计
作者 : 贾世祥 俞建新 马小飞 肖建 编著
出版日期 : 2015-04-10
ISBN : 978-7-111-49637-3
适用人群 : 高校计算机专业本科生
定价 : 39.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 255
开本 : 16
原书名 :
原出版社:
属性分类: 教材
包含CD :
绝版 :
图书简介

综合实践是嵌入式系统教学中的重要实验环节。本书是基于VxWorks操作系统的嵌入式系统综合实践教材。在本书的前导部分,介绍了VxWorks/Tornado的基本知识,概述了VxWorks综合课程设计的特点与分类,以及综合课程设计的基本类型与步骤。在本书的核心部分介绍了控制类、模拟器类、游戏类、实用软件类……等类型课程设计的基本解决方案、关键技术和实验要点。
在本书给出的两个到三个嵌入式综合课程设计实验讲解中,涉及到了选题说明、功能设计、任务划分和模块划分、详细设计、测试设计、测试用例、测试报告、运行结果等教学范例内容。为了方便读者的使用,本书附有配套光盘,内含正文阐述的VxWorks综合课程设计范例的工程文件。
本书可作为高等院校研究生、本科生进行嵌入式系统教学或者案例教学的教材,也可作为工程技术人员和嵌入式系统爱好者的参考读物。

图书特色

随着嵌入式产品的日益普及,嵌入式系统课程越来越受到教育界的重视。但嵌入式系统课程涉及的内容繁多,系统性、综合性强,特别是要求学习者一定要经过充分的实践来巩固、理解相关的理论知识,掌握嵌入式系统设计和开发的主要方法和技能。本书基于作者多年的教学积累,以及主流的ARM 9平台和VxWorks操作系统,通过几类常见的嵌入式系统开发案例,使学习者能够系统学习初步的嵌入式系统设计和开发方法。
本书特点
厘清了嵌入式系统课程实践教学的三个层次,从单项实验到课程设计,再到自主创新实践。本书的课程设计项目是从作者近十年教学过程中积累的单项实验中提炼而来,并有效融合,可以帮助学习者循序渐进地进行实践。
作者将嵌入式系统设计分为控制类、模拟器类、通信类、地理位置服务类、游戏类和实用工具类,并从中选择最典型的三类,通过介绍三个实用、有趣的课程设计项目,使学习者了解嵌入式系统开发过程的全貌,进而可以对书中提出的其他典型课程设计项目加以尝试,提高嵌入式系统设计与开发的技能。
详细介绍了课程设计案例从选题、功能设计和运行原理、数据流设计、任务划分、函数流程分析、IPC设计、详细代码分析、测试设计、测试用例和测试结果报告、测试结果展示的过程,并提供了相关的学习资源,读者可在此基础上进行系统学习。

图书前言

嵌入式系统课程的教学内容大致包括:嵌入式处理器、现场可编程逻辑器件设计、嵌入式操作系统、嵌入式调试技术、外部设备与驱动、软硬件协同设计、典型应用项目、高级语言程序设计等。这门课程的教学内容多,系统性和综合性的特点较强。只从课堂上学习这些理论知识是远远不够的,需要通过各种课程内和课程外的实验活动来深化、夯实、巩固对嵌入式理论与知识的理解,进而掌握嵌入式系统设计和开发的主要方法和技能。因此,实验是嵌入式系统课程的重要环节。
一般而言,嵌入式系统教学实验活动可以分为单项实验、课程设计和自主创新实践三个类别。
1.单项实验
单项实验是基础实验,属于软硬件工作原理的验证性实验。单项实验的典型代表有硬件实验、软件实验和软硬件实验。硬件实验主要指单个外部设备的裸板驱动程序和实验板的引导加载程序实验。软件实验主要指操作系统的特别函数功能实验,还包括高级语言的特别函数功能实验。软硬件实验主要涉及外设驱动和控制程序的综合实验,例如在开发板的LCD模块上显示表达式和计算结果的计算器实验,以及多个开发板联网的黑白棋实验。
通过单项实验,学生可以在嵌入式实验平台上验证理论知识、工作原理、编程技巧和技术解决方法。以基于ARM处理器和VxWorks操作系统的实验平台为例,单项实验可以包括:Tornado 集成开发环境实验、WindSh命令实验、VxWorks组件裁减实验、模拟器VxSim应用实验、软件逻辑分析仪WindView实验、实时多任务实验、字符设备驱动实验、网络驱动实验、IPC实验、闪存实验、WindML图形用户界面实验等。
单项实验的特点是面向技术细节,引导学生逐步掌握硬件器材的运作机制和函数编程原理,训练学生掌握嵌入式开发过程中的一个单项作业。单项实验所需要的实验时间长短不一。举例来说,工具和操作界面类型的实验借助实验指导书可以在几分钟内完成,含有源代码的实验则需要学生投入较多的时间理解和消化。例如,一个LCD驱动程序实验大约需要学生一到两天的时间进行源代码阅读,这样才能完全理解该LCD控制器各个寄存器的作用,以及LCD驱动程序的架构和编程方法。
单项实验有许多不足。首先,如果学生没有足够的时间通读源代码,就容易造成即使得到了正确实验结果,但也不理解程序内部流程的“知其然不知其所以然”现象。此外,单项实验的程序多半是实验平台供应商已经开发好并且经过调试、排错的。直接阅读经过他人调试好的程序,而不经过调试和排错,实验者对现有程序的认识就比较肤浅,容易停留在表面,无法深入理解程序代码的细节与技巧。为了克服单项实验的局限性,需要让学生掌握单项实验编程的要领,如让实验者对于每一个单项实验至少完成一个替换练习或者修改练习。例如,变换高分辨率LCD输出画面的外观,让学生理解图形用户界面相关函数的作用、功能和编程方法。又例如,对包含三个外设驱动的组合单项实验程序,添加另外两个独立的外设驱动,做到在集成开发环境下编译通过,并且要求这5个外设都能够在调度程序的协调控制下正常动作。这样就让学生理解了开发板上裸板运行系统的生成原理,它是经过对多个单独外设驱动程序进行集成和控制而获得的。
2.课程设计
一般认为,嵌入式系统课程设计是一种学生在学校学习期间,结合在嵌入式系统课程中学习得到的理论知识,自主独立完成的较大编程规模的应用实验。所以也可称之为嵌入式系统课程设计实验,或者嵌入式系统综合课程设计实验。上述这三个术语的内涵基本是一致的,都表达了一个意思,即课程设计是嵌入式系统教学中的一个重要实验环节。
参考百科知识门户网站(例如百度百科、互动百科)的定义,嵌入式系统课程设计是“为掌握嵌入式系统课程教学内容所进行的实验设计或者实践”。它的含义大致与嵌入式系统综合实践工程(或者嵌入式系统综合实验工程)的含义相当。
我们认为,对于高等院校IT专业的学生而言,嵌入式系统课程设计实验就是让学生综合在校期间已经学习到的各门课程知识和技能,针对一个简单的实际项目解决方案或者一个简单的应用原理,开动脑筋,完成项目构思以及实验方案设计、开发、测试和文档制作的全套作业,以提高应用能力和动手操作能力。由于嵌入式系统课程设计(实验)或者综合实践工程都应该在一个学期的一门课程里完成,两者的含义非常接近,可以认为一门课的课程设计就是这门课的综合实践工程,反之亦然,因此,在本书里,我们不加区别地使用这两个名称。
课程设计实验是单项实验项目的集成实验或者综合应用实验。例如开发一个在嵌入式开发板上运行的图形数字时钟,就需要在高分辨率的液晶屏上绘制一个具有交互功能的指针式时钟和数字时钟,它是键盘驱动、LED七段数码管驱动、LCD驱动、触摸屏驱动、RTC编程、GUI编程、控制程序编程等多个单项实验的无缝衔接与集成。
嵌入式综合课程设计实验具有一定的难度,而且经常具有工程性质和原型开发性质。多数情况下课程设计实验不是单项实验的简单堆砌,可以认为它是介于高等院校的实验项目与专业团队研发项目之间的过渡性实验工程项目。学生在学校经受了课程设计实验的实训之后,到了工作岗位就能够较快地熟悉所面临的工作,独立地完成工作任务。
在课程设计实验的开始阶段,学生通常得不到现成的解决方案和答案。因此让学生自己思考、查阅参考资料、最终完成可行性分析和设计报告是比较好的做法。这要求学生投入较多的时间和精力。在许多情况下,由于课程设计的功能综合性强,工作量比较大,经常需要两人或者更多人组成团队才能够完成。这样就提供了一个团队工作的实验环境,学生可以从中体验嵌入式开发团队的工作方法。综合课程设计实验一般要求学生在学校课程学习的中间阶段着手进行,并且在全部课程结束之前完成。
3.自主创新实践
自主创新实践是比课程设计或者综合实践层次更高的实验活动,它需要更加综合的理论知识和实践技能,这往往超越了一个专业课程群的知识范畴,与多个专业的课程相关。以嵌入式系统的自主创新实践为例,它涉及处理器技术、软件技术、电子工程、自动控制技术、通信技术等,工程开发性质更加突出,要求的技术水平更高。
自主创新实践强调应用和实用,要求实验成果能够产生一定的经济效益或者社会效益,至少能够产生一个好的教学案例。例如设计开发一个嵌入式处理器的指令集模拟器就是一个很好的自主创新实践活动。如果开发成功,就有可能投入实际的科研或教学运用中,也有可能作为嵌入式软件工具产品出售。
自主创新实践具有提高开发水平、深入关键技术和注重细节的特点。一个自主创新实践项目往往就是一个产品原型的正式开发。在实践过程中,通常由教师和学生共同组成一个研发团队。这样的团队会提出不低于当前技术水平的解决方案,最终给出一个完整、可运行的工程原型,而且在设计、编码、测试、试运行的各个阶段提供质量合格、文笔流畅、图表规范的文档。
自主创新实践还常常具有产、学、研相结合的特点。企业和科研院所的技术人员也可以加入以教师和学生为主的团队中,参与实践项目开题、项目咨询、项目评估、项目测试和项目鉴定等活动。业界专业技术人员的参与对提升学生的专业技能意义重大,使他们能够接触到嵌入式专业工作者的观点和做法,从更加广阔的视野来考虑实践活动中所遇到的技术创新问题。产、学、研相结合能够使培养出的毕业生具有较强的适应能力,毕业后能够更快地适应自己的工作岗位。
本书的编写背景
本书署名作者当中的前三位是南京大学的校友,第4位是南京邮电大学的EDA实验室高级实验师。从2004年到2013年,四位作者都先后参加过嵌入式系统课程设计的实验活动。
在南京大学计算机系历时近10年的本科生和研究生嵌入式系统课程教学中,使用的硬件嵌入式实验平台之一是CVT2410(创维特公司的ARM 9实验箱产品),使用的典型操作系统之一是VxWorks 5.5/Tornado 2.2,使用的与VxWorks配套的图形用户界面是WindML 3.0。在参与嵌入式系统教学和实验的过程中,作者们一再强调实验环节的重要性,并对修课学生参加实验环节给予力所能及的指导和帮助。
在VxWorks的实验教学活动中,我们整理出50多个单项实验,并在此基础上先后提出了近十个课程设计让优秀学生实践,包括:自动洗衣机模拟器、实时时钟、华容道、飞行棋、联网跳棋、自动售票机模拟器等。
由于我国目前嵌入式系统综合课程设计的教材还比较少,而在实际教学过程中学生对这一类图书又有较大的需求,作为嵌入式系统课程的任课教师,我们有责任帮助学生解决综合课程设计的实验用书问题。为了给学生提供一个开发步骤合格、流程正确、能启迪思维的教学用书,我们从2010年起就开始着手制订编写计划,准备对其中的若干个课程设计的工作原理、任务功能、任务划分、任务设计方案和测试方案做出较为全面的总结,写作一本实验项目案例教材。基于这个计划,我们一边致力于嵌入式系统课堂教学,一边致力于实验环节的实践、指导和管理。在陆续积累VxWorks教学和实验的基础上,我们优选了3个比较完善的课程设计作为重点加以剖析和描述,逐步地编写出本书的各个章节。
通过阅读本书,读者可以加深对VxWorks重要知识点的理解,掌握嵌入式系统课程设计的概貌与过程,并借鉴本书的三个课程设计对书中提出的其他典型课程设计项目加以尝试,提高嵌入式系统设计与开发的技能。
致谢
在本书的编写过程中,参考和借鉴了许多专家学者的研究成果,我们在列举参考文献时可能有疏漏,在此向相关所有者和机构表示诚挚的谢意。
由于作者专业教学水平有限及编写时间紧,书中难免有不当甚至错误之处,恳请读者批评、指正和评价,与我们一起对书中内容进行完善。我们对来自读者的评价、批评和建议信息表示欢迎和致谢,将认真地考虑并酌情处理。
反馈信息请通过以下方式与作者联系:
E-mail:jiashixiang@sohu.com,yujianxin@nju.edu.cn

编 者

上架指导

计算机\嵌入式编程

封底文字

随着嵌入式产品的日益普及,嵌入式系统课程越来越受到教育界的重视。但嵌入式系统课程涉及的内容繁多,系统性、综合性强,特别是要求学习者一定要经过充分的实践,来巩固、理解相关的理论知识,掌握嵌入式系统设计和开发的主要方法和技能。本书基于作者多年的教学积累,基于主流的ARM9平台和VxWorks操作系统,通过几类常见的嵌入式系统开发案例,使学习者能够系统学习初步的嵌入式系统设计和开发方法。
本书特色:
厘清了嵌入式系统课程实践教学的三个层次,从单项实验到课程设计,再到自助创新实践。本书的课程设计项目是从作者近10年教学过程中积累的单项实验中提炼而来,并有效融合,可以帮助学习者循序渐进地进行实践。
作者将嵌入式系统设计分为控制类、模拟器类、通信类、地理位置服务类、游戏类和实用工具类,并从中选择最典型的三类,通过三个实用、有趣的课程设计题目进行介绍,使学习者了解嵌入式系统开发过程的全貌,进而可以对书中提出的其他典型课程设计项目加以尝试,提高嵌入式系统设计与开发的技能。
本书详细介绍了课程设计案例从选题、功能设计和运行原理、数据流设计、任务划分、函数流程分析、IPC设计、详细代码分析、测试设计、测试用例和测试结果报告、测试结果展示的过程,并提供了相关的学习资源,读者可在此基础上进行系统学习。

图书目录

前言
第0章 引言1
0.1 对读者基本知识和技能的要求1
0.2 对读者自行开展课程设计的期望2
第1章 VxWorks/Tornado概述3
1.1 VxWorks基本组成3
1.2 VxWorks特点4
1.3 Tornado概述5
1.4 VxWorks任务管理6
1.4.1 任务状态转换7
1.4.2 任务框架8
1.4.3 任务相关API函数9
1.4.4 任务相关API函数使用范例10
1.5 VxWorks任务间通信12
1.5.1 信号量13
1.5.2 信号量语句编程实验14
1.5.3 消息队列16
1.5.4 消息队列语句编程实验19
1.5.5 管道19
1.5.6 信号(软中断)20
1.5.7 进程间通信函数综合使用范例22
1.6 VxWorks中断机制27
1.7 VxWorks设备驱动28
1.7.1 VxWorks设备描述符29
1.7.2 VxWorks的I/O系统29
1.7.3 基本I/O接口30
1.7.4 安装VxWorks驱动程序31
1.8 VxWorks图形组件32
1.8.1 WindML 3.032
1.8.2 通用图形库33
1.8.3 WindML基本知识34
1.8.4 UGL获得输入设备信息的详细解释35
1.8.5 典型WindML绘图程序结构36
1.8.6 UGL常用的窗口函数38
1.9 小结40
第2章 嵌入式系统课程设计概述41
2.1 嵌入式课程设计的基本特点41
2.2 嵌入式课程设计的教学目标42
2.3 嵌入式课程设计的基本分类42
2.3.1 控制类课程设计42
2.3.2 模拟器类课程设计43
2.3.3 通信类课程设计43
2.3.4 地理位置服务类课程设计44
2.3.5 游戏类课程设计46
2.3.6 实用工具类课程设计46
2.4 嵌入式课程设计的基本步骤46
2.4.1 选题说明书46
2.4.2 可行性分析48
2.4.3 概要设计49
2.4.4 任务划分58
2.4.5 常用编码规则58
2.4.6 头文件编程范例60
2.4.7 代码优化62
2.4.8 测试方案设计和测试用例65
2.4.9 测试报告68
2.4.10 实验文档编写指导69
2.5 小结70
第3章 控制类课程设计71
3.1 LED点阵汉字滚行显示扩展板71
3.1.1 软硬件开发环境71
3.1.2 硬件功能分析与设计71
3.1.3 扩展板电路设计77
3.1.4 汉字显示原理80
3.1.5 软件功能分析与设计82
3.1.6 驱动程序设计87
3.1.7 测试方案设计90
3.1.8 测试应用程序设计90
3.1.9 CPLD程序注解92
3.1.10 VxWorks驱动程序注解95
3.1.11 驱动程序测试步骤和测试结果109
3.2 其他实现方案110
3.3 思考题111
3.4 替换练习111
3.5 小结111
第4章 模拟器类课程设计112
4.1 列车自动售票机模拟器112
4.1.1 概述113
4.1.2 自动售票机软硬件环境需求113
4.1.3 自动售票机用户需求113
4.1.4 功能分析和设计115
4.2 数据分析116
4.2.1 主要结构体数据变量定义117
4.2.2 数据流分析118
4.3 任务划分和定义119
4.4 人机交互设计120
4.4.1 主函数progStart设计125
4.4.2 usrAppInit函数126
4.4.3 模拟钱币输入时间限制处理127
4.5 进一步理解TTVM程序128
4.5.1 完整源代码清单阅读指南128
4.5.2 任务处理流程的着色说明128
4.5.3 二进制信号量使用分析128
4.5.4 消息队列使用分析129
4.5.5 其他IPC语句使用131
4.6 任务执行流程分析131
4.6.1 LCD任务的处理流程131
4.6.2 触摸屏任务的处理流程135
4.6.3 计算任务的处理流程137
4.6.4 输入任务的处理流程142
4.6.5 输出任务的处理流程146
4.6.6 键盘任务的处理流程150
4.6.7 LED数码管任务的处理流程150
4.6.8 自动售票机模拟器的主要函数152
4.7 测试方案设计154
4.8 异常处理测试方案设计155
4.9 测试结果和故障排除159
4.10 思考题160
4.11 联网自动售票机模拟器161
4.12 小结161
第5章 网络游戏类课程设计162
5.1 跳棋溯源162
5.2 联网跳棋电子游戏简介163
5.2.1 软硬件环境163
5.2.2 主要功能163
5.3 跳棋游戏运行指南164
5.3.1 运行前的准备工作164
5.3.2 游戏操作说明164
5.4 自然人走棋版本系统设计168
5.4.1 主界面设计168
5.4.2 棋位极坐标系设计170
5.4.3 绘图坐标系设计171
5.4.4 主要数据结构和数组赋值173
5.4.5 颜色确定算法175
5.4.6 旋转映射算法176
5.4.7 走棋规则178
5.4.8 光标改变及走棋设计178
5.4.9 可达棋位搜索算法179
5.4.10 游戏胜利的判断及排名和记录步数算法180
5.4.11 判断当前和下一步该谁走棋的算法180
5.4.12 程序模块划分181
5.4.13 任务划分181
5.4.14 数据包结构描述181
5.4.15 网络通信处理流程182
5.4.16 光标闪烁的实现及信号的使用182
5.4.17 程序间通信183
5.4.18 图形界面绘制183
5.4.19 函数184
5.5 任务函数处理流程187
5.5.1 progStart任务187
5.5.2 taskGame任务188
5.5.3 taskGlint任务189
5.5.4 taskRecv任务190
5.5.5 taskTick任务和taskTimeShow任务192
5.6 机器走棋版本系统设计192
5.6.1 跳棋游戏平台描述193
5.6.2 可判优坐标系设计193
5.6.3 机器走棋的棋盘坐标系变换194
5.6.4 智能走棋策略196
5.6.5 数据结构改动198
5.6.6 程序模块改动198
5.6.7 taskCMP任务工作原理及流程图198
5.6.8 开局阶段走棋函数说明199
5.6.9 中局阶段走棋函数说明200
5.6.10 收尾阶段走棋函数说明202
5.6.11 循环走棋判断203
5.6.12 程序间通信204
5.6.13 每步走棋等待时间设置205
5.6.14 增加的函数205
5.7 机器走棋版本编程指南206
5.7.1 跳棋B版本的工程文件206
5.7.2 处理流程总控制结构206
5.7.3 对模板程序中智能走棋算法的改造207
5.7.4 改造后的程序测试及算法评估215
5.8 编码过程中的故障排除217
5.9 设计测试方案并进行测试217
5.9.1 测试方案217
5.9.2 测试实施218
5.9.3 6个自然人玩家的实测记录218
5.9.4 4个自然人玩家的实测记录219
5.9.5 2个自然人玩家和1个机器玩家的实测记录221
5.9.6 2个机器玩家的实测记录221
5.9.7 2个自然人玩家和4个机器玩家的实测记录222
5.9.8 6个机器玩家的实测记录222
5.10 机器棋手博弈走棋算法223
5.10.1 博弈走棋的图例说明224
5.10.2 红色玩家的优选走棋路径225
5.10.3 黄色玩家的优选走棋路径226
5.10.4 绿色玩家的优选走棋路径227
5.10.5 浅蓝色玩家的优选走棋路径229
5.10.6 深蓝色玩家的优选走棋路径230
5.10.7 紫色玩家的优选走棋路径231
5.10.8 当前玩家敏感走法案例图解232
5.10.9 博弈算法基本处理流程233
5.11 功能扩展练习和替换练习237
5.12 小结239
附录 WindML绘图程序例子240
参考文献246

教学资源推荐
作者: [美] M.Morris Mano(M.莫里斯﹒马诺)  Charles R.Kime(查尔斯 R. 凯姆)  Tom Martin(汤姆﹒马丁)著
作者: 袁春风 吴海军 武港山 余子濠 编著
作者: Yale N. Patt Sanjay J. Patel
作者: [美] J. 斯坦利·沃法德(J. Stanley Warford)著
参考读物推荐
作者: (美)Sun Microsystems, Inc
作者: Mark Artiges等
作者: 汪文祥 邢金璋 著