“.NET Micro Framework是嵌入式开发中令人激动的一步,本书将帮助开发人员为未来作好准备。”
——Rick Rashid,微软研究院高级副总裁
本书介绍使用具有丰富的、托管代码环境的.NET Micro Framework进行应用开发。你将学到如何使用.NET Framework和Microsoft Visual C#通过真实案例、专家介绍和示例代码来有效地为小型设备构造健壮的应用。
本书内容包含:
■使用面向对象的手段来进行嵌入式设备编程。
■建立输入和输出端口对象。
■开发详细的文本和图形显示来支持复杂用户交互。
■在应用中增加Windows SideShow技术。
■在嵌入式应用程序中实现现有应用中的功能。
■绑定硬件事件到WPF元素。
■使用TCP/IP建立嵌入式网络连接。
■使用仿真技术进行快速原型设计、实验、测试和调试。
■为资源受限的设备优化性能。
Donald Thompson 微软研究院工程总监。他负责智能个人对象技术(Smart Personal Objects Technology,SPOT)初始阶段的软件、协议及技术策略展望。他也帮助搭建在MSN Web上的广告投放系统。
Rob S. Miles 移动设备开发方面的微软最有价值专家(MVP)。他也是英国Hull大学计算机科学学院的一位教育专家。他讲授Visual C#编程、软件开发以及虚拟机架构课程。
马骐 微软最有价值专家、微软认证讲师、Nokia认证讲师。他拥有超过10年的软件设计、需求分析、项目管理和编程经验,超过8年的微软高级技术培训中心软件开发软件管理培训和企业管理培训经验,以及多种嵌入式平台(包括Symbian、Brew、Palm、WinCE)开发经历。
无
Microsoft NET技术提高了程序员的桌面应用程序和服务器应用程序的开发效率。NET Micro Framework扩展了这些优点并向嵌入式设备领域提供强大的工具,其目标就是允许你在已经熟悉的高层次和托管代码环境下进行开发,而不必在枯燥、晦涩难懂的嵌入式标准环境中浪费精力。底层访问可以通过上层的面向对象抽象进行,这也是C#的编程方式。
本书描述了使用NET Micro Framework进行嵌入式设备开发的核心概念。我们通过实践来学习各种各样的程序例子,以便说明所讨论的概念,从通用的GPIO和中断,到Client/Server网络,再到辅助技术,比如Windows Sideshow。
读者对象
如果你在开发嵌入式代码但不熟悉C#以及NET的原则,那么这本书适合你。如果你已经写过C#桌面应用程序但不熟悉嵌入式开发,那么这本书同样适合你;本书中假设你已经熟悉嵌入开发概念并且有开发经验。本书不是C#教程,但还是在NET Micro Framework中使用适当的篇幅介绍C#的基本概念,尽管这些概念对熟悉桌面开发的C#程序员来说有些不同。对于那些希望探索微型设备,传感器以及机器世界的程序员来说,我们希望学习本书是有用的第一步。
系统要求
为了运行本书的代码,你需要如下的软硬件环境:
Microsoft Windows XP Service Pack 2
Microsoft Visual Studio 2005 Standard Edition 或者 Microsoft Visual Studio 2005 Professional Edition 或者 Microsoft Visual Studio 2005 Team Suite
对于实际设备开发(不是模拟器开发), 需要NET Micro Framework兼容的开发工具包,例如Freescale iMXS(参见我们网页上提供的最新的兼容硬件列表)
Windows Vista(开发SideShow应用程序)
示例代码
本书中讨论的所有代码程序均可以从如下网址中获得:
http://wwwmicrosoftcom/mspress/companion/9780735623651
本书支持
微软出版社对本书提供支持,参照以下网址:
http://wwwmicrosoftcom/learning/support/books/
疑问和评论
如果你对本书以及相关内容有任何评论、疑问或想法,请访问上面的网址,并向微软出版社发Email:
mspinput@microsoftcom
或者通过邮局,寄信给以下地址:
Microsoft Press
Attn:Inside Microsoft Windows SharePoint Services 30 Editor
One Microsoft Way
Redmond, WA 980526399
请注意,对微软软件产品的支持不会通过以上地址获得。
致谢
作者希望向Microsoft Press出版社(以及相关人员)致谢,因为他们发掘了这个项目的价值,在写作过程中为我们提供指导,使得文字更加可读。特别是Ben Ryan、Devon Musgrave和Victoria Thulman。另外特别感谢Terry Cook给我们进行技术审核,给我们提出了深刻又全面的指导。
Donald Thompson 的致谢
首先,我想感谢“TinyCLR”的原始作者Davide Massarenti,没有他就没有这一切的存在。Davide原来是我的团队中SPOT的服务器方面的一个开发人员。没隔多久我们就发现了客户端方向的错误。Davide一人独自承担起来解决这一问题,我把他“隐藏”了三个星期直到他完成了一个原型版本的兼容ECMA的公共运行时。几周以后,我们将新的方案提交给微软研究院的领导Rick Rashid,接着就是Bill Gates和Steve Ballmer。他花了很长时间去寻找时机,提供一个完美的解决方案,最后冒着极大的风险并将他的生活完全地投入到这一未知的领域去实现它。
接下来,我要感谢整个NET Micro Framework团队尤其是Colin Miller(产品单元经理), Roger Wolff(高级开发工程师),Lorenzo Tessiore(高级开发工程师)以及Jonathon Kagle(高级程序经理),他们杰出的贡献、反馈以及建议使得我们的书完美。谢谢你们!
Rob Miles的致谢
我要感谢微软对这个未知的领域进行探索,并制造出这么漂亮的“小东西”。同样我要感谢赫尔大学能让我花些时间做自己的事情。作 者 简 介
Donald Thompson
在10岁的时候, 我的生活中发生了两件具有重要意义的事情:我成为好莱坞的一个专业的儿童演员,以及我收到了我的第一台电脑(一台C64)。在之后的八年,我参与了大量的电视节目、商业演出、电视剧以及电影和一些传奇人物同台演出,例如Burt Lancaster、Gene Kelly、Michael Landon、Tom Hanks、Rob Reiner,甚至T先生。然而这一切都没有当我打开我的《Compute!》或者《Byte》杂志并翻到大段的程序列表,然后在接下来的四天费尽苦心地将那些密密麻麻的代码输入、调试最终看到图像和听到声音时那么让人震撼和兴奋!永远不会忘掉我这样问自己的那天“如果我把它们稍稍改动一下会发生什么呢?”
时间倒转到25年前:我历经了几次重要的计算机技术领域革命,尤其是在Microsoft工作的那段时间。至今,我仍旧十分喜欢我和电影业之间的联系,但只是作为一名电影院的爱好者(当我能找到的时候)。我和妻子Kelly生活得很幸福,并且养了两只非常可爱的小猫Max和Lucy,远离办公室的生活让我感觉到我的生命中并不是只有工作(尽管事实就是如此)。
Rob Miles
我在学校的时候开始了自己的编程生涯,我的第一次写的程序是打卡器,将它发送到一个远距离主机并在两个星期后收到条少发了一个分号的消息。很多年过去了,我落下分号的这个习惯依旧不改,虽然已经好了很多了。到目前为止,我已经在英国的赫尔大学工作了25年,从计算机中心换到电子工程再到我现在工作——计算机科学。我同时也参与了很多工程项目,当编写的软件将生产日期时间戳应用到百威啤酒或者其他产品的时候,这真的是一件让自己非常骄傲的事情。我同时也因在英国的Independent报纸上发表了整版面的诗而以差劲诗人著称。我在东约克郡与妻子“1”Mary生活得非常开心(她称我为丈夫“0”),并且有了世界上最棒的孩子David和Jenny,经常和他们一起学习,我们一家非常幸福。
“.NET Micro Framework是嵌入式开发中令人激动的一步,本书将帮助开发人员为未来作好准备。” ——Rick Rashid,微软研究院高级副总裁 本书介绍使用具有丰富的、托管代码环境的.NET Micro Framework进行应用开发。你将学到如何使用.NET Framework和Microsoft Visual C#通过真实案例、专家介绍和示例代码来有效地为小型设备构造健壮的应用。 本书内容包含: ■使用面向对象的手段来进行嵌入式设备编程。 ■建立输入和输出端口对象。 ■开发详细的文本和图形显示来支持复杂用户交互。 ■在应用中增加Windows SideShow技术。 ■在嵌入式应用程序中实现现有应用中的功能。 ■绑定硬件事件到WPF元素。 ■使用TCP/IP建立嵌入式网络连接。 ■使用仿真技术进行快速原型设计、实验、测试和调试。 ■为资源受限的设备优化性能。 Donald Thompson 微软研究院工程总监。他负责智能个人对象技术(Smart Personal Objects Technology,SPOT)初始阶段的软件、协议及技术策略展望。他也帮助搭建在MSN Web上的广告投放系统。 Rob S. Miles 移动设备开发方面的微软最有价值专家(MVP)。他也是英国Hull大学计算机科学学院的一位教育专家。他讲授Visual C#编程、软件开发以及虚拟机架构课程。 马骐 微软最有价值专家、微软认证讲师、Nokia认证讲师。他拥有超过10年的软件设计、需求分析、项目管理和编程经验,超过8年的微软高级技术培训中心软件开发软件管理培训和企业管理培训经验,以及多种嵌入式平台(包括Symbian、Brew、Palm、WinCE)开发经历。
Donald Thompson;Rob S. Miles:暂无简介
马骐 张欣 杜伟:暂无简介
在嵌入式应用正在逐渐渗透到人们的生活的今天,对普通消费者来说,评判一个嵌入式系统的重要标准就是成本,而NET Micro Framework正是由微软公司推出的专门用于处理能力和存储能力有限的设备的嵌入式平台。它提供了一个可引导的运行时环境(并非实时的运行时环境),与需要有Windows CE系列操作系统支持才能运行的嵌入式平台NET Compact Framework相比,可以大大减少对设备处理和存储能力的要求。这使其在民用嵌入式设备上得以大显身手。
软件是嵌入式设备的灵魂,本书基于微软的NET Micro Framework平台全面讲解了嵌入式设备开发。
本书亮点
本书主要通过NET Micro Framework对嵌入式应用程序的开发做了全面介绍。两位作者都是微软NET Micro Framework嵌入式开发的专家,在NET Micro Framework嵌入式开发方面颇有建树,整理了许多从实践总结的一手资料,为我们献上了一本非常实用的书籍。
本书按照NET Micro Framework初学者的学习过程,从NET Micro Framework简介开始,由浅入深地讲解如何使用NET Micro Framework开发嵌入式设备,其中包括:NET Micro Framework的基础介绍、NET Micro Framework基础程序的开发、网络开发、用户界面开发、以及SideShow开发、模拟器制作和设备开发实例。所有章节都以理论结合代码分析的方式进行讲解,读者可按照书中说明进行实际操作,使读者既“知其然”,也“知其所以然”。
技术更新
人们往往对新技术的层出不穷感到无奈,有时会犹豫是否应该去迎接挑战。其实,接受新技术并不意味着摒弃原有的旧技术。与其他技术一样,NET Micro Framework也从10走到20版,并还会向前发展,最近NET Micro Framework 30 也已经正式发布了。它的功能增加了许多,但NET依然会是NET,设备还是要拿在手里——这种模式在很长时间里不会有太大变化。无论从哪里起步,开始总是要有的。若要了解NET Micro Framework嵌入式设备开发,那么,这是一次难得的机会。
本书的使用
本书除了文章本身,其配套的示例代码也十分有用(甚至可以说是必备的),它们都可以到指定站点进行下载。在学习之后若能反复研究,一定会有所收获。
在阅读本书的同时还可以参考我们团队和信息产业部软件与集成电路促进中心出版的《NET Micro Framwork 嵌入式开发入门与典型实例》,该书包括一些关于中文处理和实例开发的内容,是一本更加偏重于实例开发的教材。如果能很好的配合本书阅读,将使您对`NET Micro Framework开发有更加深入的理解。
致谢
感谢本书的作者,Donald Thompson和Rob Miles,感谢他们为广大NET Micro Framework嵌入式设备开发爱好者提供了精彩的书籍。
特别感谢微软(中国)有限公司中国技术中心的杜伟,他是微软中国Micro Framework推广战略以及技术培训负责人,感谢他给大家推荐这本非常优秀的书籍。
还要特别感谢微软(中国)有限公司中国技术中心的亓光宇,感谢他能够在百忙之中抽出大量的时间来参与本书的翻译和指导工作,他在微软丰富的软件开发以及嵌入式和娱乐设备开发经历给我们的翻译提供了强大的技术支持。
同时,也要特别感谢北京拓杰凯业科技有限责任公司的创建者之一徐毅,以及系统架构师王淼,感谢他们能从各自繁忙的工作中抽出大量的时间,一同完成本书的翻译工作。
还特别感谢中软国际从事移动与嵌入式研究工作的技术专家张欣和孙立,感谢他们能从各自繁忙的工作中抽出大量时间,与大家一起完成本书的翻译工作。
感谢所有支持和帮助我的朋友和家人,感谢他们能够理解我,不断地从生活上和精神上支持着我,让我能够克服种种难关,完成本书的翻译工作。
由于时间仓促,本书难免出现许多不足之处,恳请各位读者批评指正,感谢你们对本书和嵌入式开发的关注。微软最有价值专家马骐每当一个人满怀热情地投身于一个项目的时候,他们最喜欢的人通常也会遭受一些磨难。在过去6年中,我严重地忽略了我的家庭。首先是我的妻子Kelly,她悉心照料我的生活,毫不夸张地说,我们之间没有一点摩擦。我的父亲是我们家庭中一位真正的作家(但是他都是写一些真实的事情,而不是科技内容)。我的母亲就是别人眼中的那种“绝不放弃”的人。我亲爱的姐姐,以及她的家庭(她丈夫和他们非常聪明、灿烂的孩子)。感谢你们所有人我才得以献身于这项工作。感谢你们所做的一切。
——Donald
Victor Borge说:“我要感谢我的父母使得这一切成为可能,而我的孩子让这一切成为必要。”对我的父母来说,我希望这是对他们给我的无处不在并从不结束的音乐课程的一部分回报。对那些不得不和我住在一起几个月的人,尤其是我的妻子Mary,我想说对不起以及感谢你们对我的支持。
——Rob序言
我一直关注于“普”式计算。基于这个概念,计算机不再是训练有素的人们去做某些工作的平台,而是为我们提供了一个可以相互协作的环境来提高我们的生活。我可不想像现在这样禁锢在办公室中,我希望在任何地点都可以与那些不引人注意的终端交互,信息通过自己的方式找到那些可以处理请求的地方。比如在写这篇序言的时候,我可能正对着电话耳机讲话,然后命令旁边的打印机打出草稿以便细读,这就是我们中一些人所向往的世界。
5年前,我曾向Donald Thompson提出加入微软研究院的一个团队,当时这个团队正在进行普式计算方面的研究。团队并没有打算继续过去10多年中所进行的一系列普式计算的研究,相反他们决定开发一个商业产品以解决在那个时期遇到的所有问题,其中一个必须解决的有趣问题就是为这个产品选择合适的平台。当时有几个可能的选择,其中一些适合商业,而另一些只适用于研究组织内部。他们甚至对最有希望的几个方案开发了原型,但是后来他们还是认为没有哪个方案可以为产品的成功提供一个所需要的平台。这个产品要求非常省电,这样设备才能支持电池供电;同时还要求处理器和内存尽可能便宜,这样才有商业价值。然而,这些标准的嵌入式设备的独特要求是:这些设备被要求向其他程序员开发的应用程序开放。这个要求意味着两点:这个平台必须以一种安全的方式接受新应用程序;并且,与这个平台相关的应用程序开发环境可以被尽可能多的程序员使用。这种对嵌入式设备和台式机特性独特的组合决定了这个平台需要满足两方面的限制。
在我们谈话中,Donald提出团队正在着手进行的一个新方法。一名叫Davide Massarenti的程序员做了一些初步的试验,并认为可以开发一个“裁减”版的NET公共语言运行时(CLR)。 这个裁减版的CLR需要支持:在满足足够执行权限的情况下,从硬件直接执行托管代码。对于那些工作在NET Framework和NET Compact Framework中的人来说,下面几个方面的要求是革命性的。首先,其他框架都是在现有操作系统上的一个运行时库; 其次, 即使不考虑下层的操作系统,其他框架本身也是兆字节为单位的,更不要说那些仅能考虑几千字节的设备了。 这些革命性要求的结果就是:CLR必须裁减到合适的范围,而且各个部分的设计和每个算法的实现都要重新考虑。这样才能在满足大小限制和省电要求的同时,保持托管环境的稳定性。满足这些要求的一个例子就是序列化。由于小型设备通过无线协议来发送信息,被发送信息中的每个位就代表一个电流,因此NET的序列化算法被重新设计并提高了20%的效率。
上面的故事讲述了微软的NET Micro Framework是如何从无到有的。在随后的一年多时间里,这个框架被精炼并投入使用。当其被发布到智能手表上后,更多的基于这个平台的应用开始出现,这里既有微软内部的也有微软外部的。从那时起,这个平台被用在了,MSTV机顶盒和最初的Windows Vista Sideshow设备,以及逐步增长的外部商业产品,大家对这个平台的关注越来越多,这确实令人振奋。
正如Donald和我在第一天讨论的那样,这个平台的核心价值就是:为广大程序员提供一个基于现代计算机模型的环境,并且为团队在设备上提供对附加的桌面开发元素(例如Web Services)的支持,同时继续使框架小型化,扩展可使用的应用程序范围平台。对我来说,这个平台最成功的时刻是,当我将NET Micro Framework介绍给一个很有经验的NET程序员的时候,他十分兴奋地发现,他可以在几分钟之内开始使用GPIO并且能够用他以前从未想过的方式控制硬件了。
这个平台给我们带来了Donald和Rob合著的这本书。本书内容涵盖了从如何提供现代计算模型中健壮性和效率,到如何使用NET Micro Framework进行底层开发。如果你是一个熟悉NET或者C++的程序员,那么你会发现在学习几章之后,也可以用你从未想过的方式来控制硬件。如果你是一个嵌入式程序员,那么你会发现托管代码和worldclass工具对开发应用程序来说是如此方便,以致你将发现你不再想回到以前。这本书演示了如何使用模拟器,这样即使你没有任何硬件,也可以开发和调试特定的应用程序。本书还包含了几个例子,其使用了本书编写时已经可用的几个开发环境。甚至在我写这个前言的时候,更多的开发板已经可用了。读者可以有很大的选择空间,通过下面的网址可以访问最新的开发板列表
http://msdnmicrosoftcom/embedded/netmf
我认为,Donald是第一个将NET Micro Framework上的嵌入式应用程序开发比作使用Microsoft Visual Basic开发桌面应用程序。这改变了游戏的规则,更多的程序员则为小型设备开发应用程序,提高了应用程序开发效率,在嵌入式领域显著地提高了创新率。当你学习本书并开始熟悉NET Micro Framework的时候,我希望你学着思考如何将你的才智更轻松地融入到每天接触的对象中,如果将这些对象联系起来,则可以创建更大的成绩。以这种方式,你就可以创建这样一个世界:计算机遍及各个角落,并相互协作来提高我们的生活质量。Colin Miller,NET Micro Framework 产品部经理
译者序
序言
前言
致谢
作者简介
第一部分预备工作
第1章构建基于NET Micro Framework的小型连接设备
11微软为何创建NET Micro Framework
12NET Micro Framework与微软
嵌入式产品相适合
13什么是NET Micro Framework
131可引导的运行时
132NET Micro Framework
133NET Micro Framework硬件
抽象层
134框架库
135用户界面Shell
136Visual Studio集成
137系统需求
14小结
第2章NET以及NET Micro
Framework简介
21NET和NET Micro Framework
211NET和开发人员的需求
212NET Micro Framework上的
托管代码
213编译器以及代码生成
214NET Framework
215基于对象的硬件表示法
22小结
第3章开始
31和Visual Studio集成
32安装NET Micro Framework SDK
33创建一个新工程
34项目设置
35默认的C#代码
36编译、发布和执行
37交互式调试
38部署到目标设备
39小结
第二部分:让NET Micro Framework
为你服务
第4章构造一个设备
41终极版闪光灯
42驱动输出
421创造一个输出端口对象
422实例和引用
423控制对象
43输入端口对象
44完整的程序——我们的第一个
闪光灯
45输入事件
451方法和委托
452中断处理器方法
453连接中断处理器到事件
46完整的程序——使用中断的闪光灯
461类和数据成员
462继承和端口
463对象和设备
47用线程实现一个闪光灯指示特性
471前台和后台线程
472线程同步
473创建线程
48用定时器实现一个闪光灯指示特性
49数据记录闪光灯
491创建一个数据存储类
492C#中的异常
493记录数据
494通过RS232串行端口输出数据
410小结
第5章Net Micro Framework开发
51保留数据
511数据存储硬盘
512存储数据
513存储持久数据
514持久化与仿真器
52构建设备软组件
521嵌入式事件驱动软组件
522GPS组件状态及属性
523创建消息栈
524C#接口
525用组件和接口设计程序
53性能设计
531优化循环
532访问成员数据
533性能和类的继承
534数据类型和性能
535循环等待和系统性能
536对象托管
54小结
第6章网络
61获得连接
611OSI模式
612第一层:物理层
613第二层:数据链路层
614第三层:网络层
615第四层:传输层
616第五层:会话层
617第六层:表示层
618第七层:应用层
62客户端/服务器模型
63P2P模型
64MicrosoftSPOTNet
65带套接字的TCP/IP程序
651端口
652UDP
653TCP
66SystemNet 命名空间
67SystemNetSockets 命名空间
68构建一个闪光灯连接
681创建HQ服务器
682闪光灯配置协议
683从闪光灯连接HQ
684使用UDP更新HQ
685把UDP例子扩展为
P2P闪光灯
69小结
第7章创建界面显示
71Bitmap类
711创建Bitmap实例
712在位图上绘制
713在显示硬件上刷新位图
714NET Micro Framework中的
颜色
72绘制图形
721绘制普通的填充矩形
722绘制分级填充的矩形
723用透明度绘制矩形
724用圆角绘制
73添加资源到NET Micro Framework
项目
74图像绘制
75图像缩放
76绘制文本
761在位图中绘制文本
762计算渲染文本的长度
763在矩形区中绘制文本
764构造一个显示
765绘制大量文本
766WPF和NET Micro Framework
77Application类
78窗口和显示元素
781用StackPanel编排显示
782用Canvas准确放置组件
783更新显示元素
79显示元素层级
710显示文本
711显示图像
7111创建一个有钟面的表
7112自定义面板的大小
7113Panel类
712用户输入和事件
7121绑定到硬件事件
7122使用按钮事件
713创建一个动态用户界面
714小结
第8章使用SideShow作为用户界面
81SideShow概述
811SideShow设备能做什么
812SideShow和Windows
Vista SideBar
82SideShow设备管理
83SideShow设备和gadget程序
84创建和部署SideShow程序
841创建SideShow程序
842简单示例程序
843运行SideShow gadget程序
85SideShow内容和端点
851在SideShow设备上显示内容
852即时内容
853简单内容格式帮助类
854创建图像内容
86显示通知
87创建SideShow菜单页面
88弹出菜单
89创建SideShow对话页面
810SideShow设备事件
8101导航事件
8102gadget程序事件
8103连接和断开事件
811使用SideShow设备
812小结
第9章运用仿真器开发
91可扩展的仿真器
911可扩展仿真器设计
912模拟你的设备
913添加仿真组件
914创建自己的组件
915内置仿真器组件
916导入配置
917高级仿真器技术
92小结
第三部分:工程
第10章控制机器人
101硬件平台
102控制机器人工程
1021iRobot Roomba
1022以iRobot Roomba开始
1023构造一个表现Roomba的对象
1024对象实例和线程
1025机器人事件
1026性能权衡
103小结
第11章从原型到产品:案例学习
111案例学习 1:EmbeddedFusion
BallInMaze 游戏
1111关于 EmbeddedFusion
1112设备描述
1113为什么是 NET Micro
Framework
1114设计方法
1115使用NET Micro Framework和
Visual Studio开发
1116移植
112案例学习2:Vista SideShow
1121关于Rick Swaney和Vista
SideShow
1122设备描述
1123为什么使用NET Micro
Framework
1124设计方法
1125使用NET Micro Framework和
Visual Studio工作
113小结
词汇表