【.Net Micro Framework PortingKit – 15】移植总结(兼谈MF未来发展)

从元旦开始,便利用业余时间从事基于Cortex-M3内核上的.Net Micro Framework的移植工作。虽然到现在算起来有一个多月的时间,但是我平日的正常工作时间大部分都花在和同事一起做WiFi驱动的开发上了,除去写这一系列文章的用时,真正在Cortex-M3内核上移植时间最多也就十几天。这并不说明我在嵌入式方面的功底多么深厚,虽说我PC平台上的软件开发时间有十几年的历史,但是做真正嵌入式的开发才是最近一两年的时间(以前虽说开发过PLC程序和WinCE平台上的组态软件,但充其量仅仅算是嵌入式应用开发),这也并不代表我对.Net Micro Framework有多了解,虽然进微软的工作主要就是做.Net Micro Framework开发,但一年多的时间里,有近半年的时间是做MSN Direct的相关工作(主要和SQL和Web服务打交道),唯一可说明的是移植.Net Micro Framework系统其实是件并不那么难的事,特别是针对那些真正的嵌入式开发高手来说。

为什么选择了基于Cortex-M3内核的芯片?一是因为这是ARM公司最新的技术结晶,代表了ARM公司的未来技术走向,二是通过了解发现,Cortex-M3从结构上颠覆了以前ARM7、ARM9、ARM11设计,不仅性能优异,开发简单,更是对不同公司出品的基于Cortex-M3核的芯片做了更为严格的限制(比如内存映射,前15个系统中断),使今后针对不同厂家的芯片移植工作量降到了最低。

至于为什么选择了EM-STM3210E开发板?那是因为手边有这么一块基于Cortex-M3的开发板。

我从一个普通的PC软件开发人员转为嵌入式软件开发人员(确切的说是Windows平台开发人员转为嵌入式开发人员,对Linux开发人员来说,这个过渡要容易的多)的经历,估计有很多人对此都比较感兴趣。其实这要感谢我们那个时代,我们上大学的时候,没有机会学习什么windows平台的开发,更没有那么多开发语言和架构要学习,我们可学的基本是BASIC和C语言(当然还有Pascal,Foxbase,dbase等开发语言),大学有近三年的时间都花在C/C++及数据结构上了,毕业设计所开发的《图书管理系统》(采用Borland C 3.1开发)最终还获得优。毕业以后竟然没有想到,在Windows开发为王的时代,也还有三次采用C/C++开发DOS平台上应用的经历。第一次是开发一个计量系统,主要从ISA采集卡中读取采集数据,其图形库也是复用的我做毕业时所开发的图形库;第二次是开发济钢焦炉四大机车自动化系统时,由于采用的是AB RsLogix5000 PLC,而位置采集是采用我原公司设计的红外标尺系统,由于其通信协议不是标准协议,所以采用RsLogix5000 PLC是无法直接获取位置数据的,所以另外采购了MVI56可编程模块,该模块就是一个独立的小型嵌入式系统,其操作系统为Tiny DOS,采用Borland C为其应用开发,详细内容,感兴趣的朋友可以看我以前写的文章《AB RsLogix5000 PLC第三方模块MVI56的编程开发》;第三次是开发隧道广告系统时,需要实现TCP/IP转串口功能,当时选用的是英创公司的一款DOS开发板,其开发环境也是Borland C3.1,详细情况仍请参见我写的文章《嵌入式系统之Modbus TCP to Modbus Rtu协议转换器开发》。

不厌其烦说这么多的目的,主要是想说明对嵌入式开发来说,C/C++非常重要,因为C/C++是嵌入式开发的主要语言,相对而言汇编的比例则很小(主要是启动代码部分),如果没有C/C++语言功底,学习嵌入式开发将是一个很难并且是很漫长的过程。

为什么选择.Net Micro Framework作为嵌入式开发的切入点?因为.Net MF相对其它嵌入式系统,即不简单(相对于UC/OS-II)也不复杂(相对于WinCE,嵌入式Linux),并且包略万象,知识面涉及很广,不仅包含一个小巧的操作系统,还包括CLR的精简运行时,难的可贵的是还包含一个强大的调试系统,真可谓 “麻雀虽小,五脏俱全”。

此外学习.Net Micro Framework也是Windows平台开发的人员顺利的过渡到真正嵌入式开发的最佳渠道,从这一点出发,你很容易过渡到其它嵌入式系统上来,如UC/OS-II,ucLinux、嵌入式Linux等系统;而WinCE则不然,学过WinCE的人都知道,WinCE开发比较难的就是驱动开发和平台移植,而这种代码编写、编译和调试都是基于微软自己的PB开发环境(目前已作为插件成为Visual Studio的一部分),你很难接触到什么MDK、RVDS、GCC等等开发工具,你为学WinCE而WinCE,你将被绑定,很难转入到其它嵌入式系统,至于WinCE应用开发,那和PC平台开发几乎没有什么区别,也许你已经开发了几年的WinCE应用开发,严格意义上讲,你仍不是一个真正的嵌入式开发人员。当然如果仅仅学习嵌入式Linux的应用开发,那么你也称不上一个真正的嵌入式开发人员,真正的嵌入式开发人员至少要有和中断和芯片的寄存器打交道的经历。

时间: 2024-08-17 15:07:03

【.Net Micro Framework PortingKit – 15】移植总结(兼谈MF未来发展)的相关文章

【.Net Micro Framework PortingKit – 09】串口驱动

虽然在PC机中,串口渐行渐远,但是在嵌入式领域,串口仍可以说是如日中天,因为它造价低廉.并且编程也比较方便,在没有显示屏或输入设备的系统上,串口更是不可或缺,和超级终端一道,共同解决了信息显示和输入问题. 经过这几天的努力,在Cortex-M3平台上的.Net Micro Framework的NativeSample移植工作就要一个段落了,目前已实现启动代码.SRAM.时钟(RCC).中断(NVIC).SysTick.GPIO.串口.NandFlash(FMSC)等相关功能,这些代码可以说是使T

【.Net Micro Framework PortingKit – 12】SysTick驱动开发

SysTick驱动对TinyCLR来说非常重要,.Net Micro Framework系统的多线程和多任务(对托管代码来说是单任务多线程,但是还存在和托管代码同时运行的任务,如我们用MFDeploy程序Ping TinyCLR或擦写Flash 的时候,就是另外的任务在执行)就是靠它来实现的. SysTick驱动有三个功用,一是我们上面所说的多任务和多线程支持:二是获得系统当前Tick,以此实现延时等待,比如我们常见的Events_WaitForEvents函数就靠它来实现延时功能的:三是为Na

【.Net Micro Framework PortingKit–10】世界首款Cortex-M3内核MFV4诞生

目前在Cortex-M3平台上最常见的嵌入式操作系统就是UCOSII了,除此之外可支持的主流嵌入式操作系统就难以见到了,这是因为Cortex- M3主频较低(常见72M),不支持MMU,片内Flash和片内RAM都比较小等等,这几点限制,就使诸如WINCE系统.嵌入式Linux等需要 MMU支持的系统无法进行移植,而不需要MMU支持的ucLinux目前也难以见到.不过现在好了,.Net Micro Framework V4从今天起,已正式步入Cortex-M3平台可支持的嵌入式系统行列了. 我们

【.Net Micro Framework PortingKit – 14】TinyCLR编译与测试

由于TinyCLR的相关代码与硬件无关,我们所做的就是根据实际需要,添加不同的Feature,此外就是合理配置 堆栈和代码存储位置.其主要工作,具体地来说就是搞定\Solutions\STM3210E\TinyCLR目录下的TinyCLR.proj和 scatterfile_tinyclr_mdk.xml文件. TinyCLR.proj文件和NativeSample.proj的内容类似,不过额外要添加一些由托管代码(C#)写好的库,比较重 要的就是mscorlib.pe,它是TinyCLR的核心

【.Net Micro Framework PortingKit – 13】LCD驱动开发

LCD驱动其实对TinyCLR并无必要,特别是在EM-STM3210E开发板上,因为该开发板上的内存太小了,片内64K,片外扩展了128K,加起来也不过172K,而我们知道针对320*240的显示大小,16bit的位图所占的大小就是150K,很显然.Net Micro Framework所提供的图形库如不加修改是很难正常运行的,不过对我们来说在LCD屏幕上显示文字信息也是值得期待的,如果修改一下图形库,在LCD 上画个线.画个圆和显示个位图也绝不成问题. 和我们以前开发的驱动相比,LCD的驱动开

【.Net Micro Framework PortingKit – 11】NandFlash驱动开发

对.Net Micro Framework系统来说,正常情况下Flash(包括NandFlash和NORFlash)分为六个区,分别为: 1.BLOCKTYPE_BOOTSTRAP(存放启动代码,一般为TinyBooter) 2.BLOCKTYPE_CONFIG(配置区,存放配置信息) 3.BLOCKTYPE_CODE(本地代码区,指TinyCLR代码) 4.BLOCKTYPE_DEPLOYMENT(托管代码区,存放用户的C#程序) 5.BLOCKTYPE_STORAGE_A(用户数据存储区)

【.Net Micro Framework PortingKit

要点亮LED灯或获得输入IO的状态应该是比较容易的,打开端口时钟,然后读写相关的GPIO寄存器就可以了,但是要实现一个输入中断,就要费些周折了. 对STM32(Cortex-M3)的芯片,要实现一个GPIO中断一般需要如下几步: 1.配置时钟控制器寄存器(RCC)的APB2RSTR,确保对应的GPIOA ~ GPIOG时钟使能. 2.对GPIO寄存器的CRL(或CRH)要设置正确的输入模式,如浮空输入模式(对接收IO中断来说,当然要设置成输入模式). 3.要通过AFIO寄存器配置中断的输入来源,

【转】 .Net Micro Framework 快速入门

   .Net Micro Framework 快速入门 收藏  一.简介   Microsoft .NET Micro Framework 2001年由微软研究院开始研发,并随后在其MSN Direct项目中使用该技术,2007年9月微软对外发布2.0,2008年10月 V3.0.2009年11月 V4.0.2010年5月 V4.1 beta,2009年并入.NET产品组,Digi.Atmel.飞思卡尔等半导体公司都先后为其推出了开发板,该技术可以应用到远程控制.智能家电.教育类机器.医疗电子

Micro Framework USB Driver开发

为Micro Framework开发USB驱动也有一段时间了,随着开发的深入,对USB理解也渐渐清晰起来. 从系统架构上来说为Micro Framework开发USB驱动有三个层面的工作.一是针对USB芯片的驱动移植( 很多ARM CPU都集成了USB功能),实现MF的HAL层要求的USB接口:二是开发PC平台上针对MF设备的USB驱 动:三是编写应用程序(非Micro Framework应用程序),通过USB接口直接和MF设备通信(这个工作是我 加的,其实完成前两步工作,就已经使MFDeplo