Microsoft的.NET Micro Framework与C#语言、加上Microsoft的Visual Studio,为工程师及编程人员的嵌入式系统设计提供了更多的选择余地。由于工程师不必编写boot-loader、驱动程序或其它低级代码,产品设计团队就可以缩短其设计时间。有了.NET Micro Framework,新接触嵌入式系统设计的工程师就可直接编写代码,无需特殊的工具或深入了解处理器及操作系统架构。
NET Micro Framework在微软研究院有较深的根源,在那里,计算机科学家们致力于简化较小、低功耗设计开发的研究。他们确信未来的电子设备将使用32位的处理器、电池、网络及新的协议,如Z-Wave及ZigBee等。为了设计更多的网络嵌入式设备,这些开发人员的数量及其工具效率都要大幅度地提高。
Microsoft研究团队从零开始,研究出.NET Micro Framework平台以解决这种问题。这种框架并不是某个旧软件或工具的简缩。不象Windows Embedded CE工其它嵌入式操作系统,.NET Micro Framework并不需要存储器管理部件(MMU)。所以开发人员可以在低功耗、低成本的ARM7处理器,及ARM9、Blackfin处理器上使用这种框架。这种框架软件只需要几百kbytes的RAM或Flash/ROM存储容量。通过比较,Windows Embedded CE的托管代码环境需要约10-12 Mbytes的存储容量。依赖于.NET应用编程接口(API)的设备之需要较少的存储容量,降低了产品成本。
.NET Micro Framework为应用编程提供了一种C#托管代码环境。C#语言学习、使用都比较容易,比C或C++更能提高编程人员的生产效率。托管代码环境意味着开发人员不必跟踪内在覆写或错误指向的指针等问题,这些问题根本就不存在。然后,C#代码中的垃圾回收以非确定的方式进行,开发人员不能创建实时的应用在.NET Micro Framework中运行。
Microsoft将.NET Micro Framework集成到其Visual Studio 2005包中,所以入熟悉该软件的编程人员可以迅速地开始一个项目。在2007年2月,Microsoft发布了.NET Micro Framework的第二版,适于基本的嵌入应用开发。Digi International、Freescale、Embedded Fusion及其它企业提供了与.NET Micro Framework兼容的硬件,开发人员可以迅速地开始有用的设计。(参见 “Get a Hardware Head Start”.)
Microsoft最初在其智能个人对象技术(SPOT)数字手表中应用了.NET Micro Framework。这些采用ARM7TDMI处理器的数字手表可通过FM副载波信号接收不断更新的新闻、体育、气候及交通信息。该SPOT数字手表项目对.NET Micro Framework进行了一次实际测试,帮助了Microsoft的研究人员改进框架软件。
NET Micro Framework的架构由几部分组成(图1)。该框架从上至下为开发人员提供多种内容。尽管堆栈有许多层,Microsoft的.NET Micro Framework学习与使用起来还是比较容易的。堆栈的顶部是开发人员或用户应用及库。一般来说,嵌入式系统开发人员可编写只能在此级别与框架交互的程序。
NET Micro Framework只提供了用于标准台式PC及服务器应用的较大Microsoft的.NET Framework中的部分特性。但是这部分特性可实施最适合于嵌入式设备的功能。这种方法允许开发人员在可能的情况下使用现有的代码,不必编写大量的的嵌入式.NET Micro Framework代码。
类库层通常简称为库,包括.NET及Windows Presentation Foundation (WPF)库。包含在.NET Micro Framework中的这种类库提供了面向对象的可重用类收集,这些类可用来开发嵌入式应用。C#库还包括加密、图形、访问SPI与I2C通信端口的能力。
NET Micro Framework内的通用语言运行时(CLR)提供了所有应用程序需要的运行时环境。CLR可管理内存、线程、代码执行、垃圾及异常处理、以及其它服务等。据Microsoft介绍,CLR每秒可执行约15,000次调用,以27.6MHz的时钟频率在为ARM7处理器编写的代码中管理方法。
下一层提供了可控制硬件的程序抽象层(PAL),但在嵌入式系统中不依赖于硬件工作。PAL在托管代码接口与硬件特定的代码间提供了一个明确的中间层。在处理器与外设紧上方的最低层中,框架提供了一个硬件抽象层(HAL)或对兼容操作系统的provision接口。因此,该框架可直接与下层硬件通信,也可作为操作系统的主机,如一个为.NET Micro Framework提供硬件服务及扩展的实时操作系统(RTOS)。这可让一个应用程序在RTOS线程中运行实时任务,而另一个RTOS线程中运行整个.NET Micro Framework。
硬件厂商(如Digi和Freescale)提供这种低层驱动器及以C++语言实施的CLR。开发人员用C#编写应用程序代码,并将其代码链接到.NET Micro Framework可启动的运行时环境中。由于该框架提供了完整操作系统(OS)的部分功能,它并不需要一个综合OS来管理一个嵌入式系统。因此,开发人员将.NET MicroFramework本身作为一个可启动的运行时环境。这里,可启动的运行时环境指直接在嵌入式硬件中运行的.NET Micro Framework代码。代码提供了启动支持、中断处理、线程与进程管理、堆积管理及其它操作系统通常提供的支持功能。
一个内置的.NET Micro Framework硬件仿真器比其它开发工具提供了更多的优势。一个硬件仿真器允许软件团队立即开始开发代码,而不必等到对原型硬件设计、构建并调试后再进行。用户与厂商可以使用XML来扩展默认的仿真器,这样开发人员无需触动任何硬件,即可创建并调试应用程序。硬件厂商还提供了定制的仿真器,可对硬件、模块或处理器等进行仿真。当然,最令他们欣慰的还是能看到其应用程序在实际的硬件上运行。
迅速了解有效的代码
Connect ME模块是一个可用.NET Micro Framework进行编程的设备示例。这种嵌入式serial-to-Ethernet模块在一个紧凑的RJ-45接口封装中容纳了一个ARM7TDMI处理器(55MHz),2Mbytes的NOR闪存、8Mbytes的SDRAM,及一个以太网PHY/MAC(图2)。
一个基于Express Logic ThreadX嵌入式内核的主操作系统,支持模块中的.NET Micro Framework。该内核包括一个完整的IPv4网络堆栈,可在应用程序代码中作为套接字接口。为.NET Micro Framework编写的应用程序可访问所有这些硬件无关的API,并可访问HAL支持的硬件类。Connect ME模块的HAL支持TCP/IP套接字、RS-232串行通信及通用I/O接口。
简单条件下试用
开发人员只需要四步骤即可创建并运行一个可读写到通用I/O端口的应用程序。以下的步骤假定在主开发PC和Connect ME模块之间有一个以太网编程连接。多数情况下,开发人员对Connect ME模块应用一个Digi Connect ME Digi JumpStart Kit或类似的基板:
步骤2.双击新创建项目中的主模块:Program.cs。在C# Main()函数中,添加以下代码:
InputPort MyInput = new
InputPort((Cpu.Pin)0,false,InputPort.ResistorMode.Disabled);
OutputPort MyOutput = new OutputPort((Cpu.Pin)1,false);
在Visual Studio 2005中,InputPort类的联机帮助信息介绍了所有的参数。第一个参数--(Cpu.Pin)0–说明了Connect ME模块上的第一个通用的I/O针脚。由Microsoft实施的第二个参数--false–调用一个杂讯滤波器可平滑输入状态变化的突波。Connect ME模块并不在HAL中使用此参数,并会忽略任何合格的值。最后的参数--InputPort.ResistorMode.Disabled – 允许HAL配置输入对三种电阻模式之一进行配置;PullUp、PullDown或Disabled。Connect ME模块也会忽略此值,尽管该代码示例指定为Disabled。
constructor OutputPort 类只有两个参数:要使用的GPIO针脚--(Cpu.Pin)1–对该输出针脚的初始状态--false。
步骤3.令Connect ME模块读取输入针脚的状态,只要为其指定一个Boolean类型即可。
bool InputState = MyInput.Read();
要写到输入中,使用Write() method:
MyOutput.Write(true);
步骤4.要编译及部署应用,选择点击Start Debugging按扭。主PC通过以太网连接将代码发送到Connect ME模块中的闪存上。然后模块就会开始从SDRAM上运行代码。程序的调试输出结果通过以太网调试连接进入Visual Studio Debug Output窗口中。
此例说明了必要工作只是编写、编译、部署及调试一个简单的在一个嵌入式目标上运行.NET Micro Framework及控制GPIO针脚的的应用程序。.NET Micro Framework还提供了一个InterruptPort类,但Connect ME模块的I/O针脚并不支持此类。其它硬件可提供一个编程人员可通过InterruptPort类访问的interrupt-input针脚。
类似的类、方法及属性允许开发人员轻松地控制串行I/O端口,并创建套接字服务器与客户端。Visual Studio 2005中的帮助文档描述了如何使用命令,即使没有多少C#经验的人也可在应用中使用该工具。
为了更好地理解如何应用.NET Micro Framework,开发人员可从Microsoft网站上下载.NET Micro Framework软件开发工具包(SDK)及评估版的Visual Studio 2005,免费使用其仿真器模型。他们也可购买一个开发工具包,如Digi Connect ME JumpStart kit (商品号DC-ME-MF).
|