没有想到,距第一次写.NET Micro Framework移植文章《移植初步:环境搭建》已经快两年半了。不过这两年多来的时光也没有虚度,还是做了不少工作的。从代码角度来说,不仅STM32F103的移植代码在不断完善,并且也已经移植和优化了基于STM32F207和STM32F407的相关代码。从硬件角度来说,也由最初完全借助第三方的硬件作为.NET Micro Framework开发板,演变为今天推出自行设计的开发板和物联网产品。

初次移植.NET Micro Framework是基于V 4.0版本,当前最新的版本已经是V4.2了,并且官方代码中也已经集成了第三方开发的基于STM32F103的代码,不过该代码移植的相对简单一些,并且大部分代码取之于ST官方的库,所以代码效率和未来扩展性方面还是有一定局限性的。

此外在此期间深圳的莫雨也推出了基于STM32F103移植的书籍《玩转.NET Micro Framework移植-基于STM32F10x处理器》。

基于STM32Fxxx的代码,我所移植的和官方还有莫雨移植的最大区别就是,没有基于ST的库代码,完全按照.NET Micro Framework一贯的风格,直接根据相关芯片手册,定义相关的寄存器结构体。此外就是对中断的处理,采用了动态设置,直接调用的技术。另外对时钟的处理也放弃了最初的Systick方式,采用了双时钟处理机制(这和官方的代码不同),而基于STM32F207芯片的代码,更是根据有些时钟计时变量可以支持32位的特点,做了特别的优化。另外一大特色在.NET Micro Framework标准功能的基础上,拓展了很多功能,比如支持TinyGUI、TinyIOs、System .Windows.Forms、GPRS、CAN、Modbus、Camera.PTC01和QuickPort等等扩展库。

随着.NET Micro Framework的影响力不断扩大(最早基于.NET Micro Framework的两大产品系统是SideShow和MSN Direct,目前由于物联网的不断发展,微软开始主推Microsoft .NET Gadgeteer和Netduino,这两类产品大大促进了.NET Micro Framework的发展),对.NET Micro Framework移植感兴趣的人也越来越多,这中间有不少人问我,移植的难度有大?

我在台北做.NET Micro Framework的培训和为一些网友做移植介绍的时候都会这样评价移植的难度。个人认为,移植由难到易分三种难度层次:

第一种:系统架构和CPU层面的移植最难

以前.NET Micro Framework仅支持ARM7和ARM9架构,Cortex-M3架构并不支持,这二者的最大的区别就是中断模式,ARM7和ARM9架构有两种中断,普通中断和快速中断,而Cortex-M3的中断模式更类似X86架构,有中断向量表,硬件层面支持中断嵌套。所以如果涉及到这方面的移植,相关中断架构必须调整。

目前官方的代码支持的MCU类型如下:

Atmel:AT91SAM7X 、AT91SAM9RL64、AT91SAM9260、AT91SAM9261

Analog Devices:ADSP-BF537

恩智浦(NXP):LPC22XX、LPC24XX

飞思卡尔(Freescale):MC9328

英特尔(Intel):PXA271(XSCALE)

瑞萨电子(RENESAS):SH2、SH2A、 SH7216、SH7264

意法半导体:STM32F103

如果你打算设计的硬件,所选的MCU恰好在上述列表,那么恭喜你,CPU相关层面的移植的工作就不需要做了。但是即使所选的MCU不在上述列表,移植的工作量也是有区别的,比如Atmel的 AT91SSAM9263虽然不在列表中,但是其寄存器定义和AT91SAM9260、AT91SAM9261有很大的相似性,所以工作量也相对较少。工作量最大的移植,就是MCU架构和已有的不同(非ARM7,ARM9和Cortex-M3),且MCU亦非上述列表的厂家,比如我曾经移植过的TI的DM355,这就需要你从零开始移植。

目前不少Cortex-M3内核的MCU芯片厂家都提供了相应的支持库,所以直接采用库代码也是一种省时省力的选择。不过如果选择库,就对库有了一种依赖性,如果库本身的函数有bug,那么调试的难度就会加大,并且也受限于库本身所支持的功能,因为你在库的基础上再扩展一些功能,相对比较难一些。

第二种:外围模块移植次难

如果所选择的MCU就是第一种中所列的MCU,那么这部分工作一般情况下,就不需要做了,剩下的就看你所选择的LCD、触摸屏、NandFlash以及以太网等模块了,建议还是选择.NET Micro Framework已经支持的模块,这样你的工作量就会大大降低。

第三种:模块集成和参数调整最易

自己设计的板子已经和官方支持的平台兼容了,所选的模块也都是官方代码所支持的,那么剩下的工作,无非就是个别参数调整(比如RAM的大小,地址等等),还有工程文件把各个模块代码进行集成了。

所有代码工作做好之后,最后一步,就是调试,调试,再调试了!!!这一步,老手,新手的差别就凸显出来了。嵌入式开发就是这样,代码完成仅仅占移植的工作量30%左右,剩下大部分工作就是调试,所谓老手,就是指调试经验异常丰富(其实不仅仅指调试功底,还应该包括对某些开发的原理异常清晰,比如USB,比如以太网,必须了解其运行机理,才能事半功倍的进行调试)的嵌入式开发者,所以说同样的开发工作有人几天就可以完成,而有人几个月不一定搞定,其缘由也在这里了。

周立功曾经在他的微博中这样说,他们这样的公司,真正会进行系统移植的不超过5个人(后来又进一步明确指出,他所谓的移植就是对新出的MCU,在没有多少可参考的资料的情况下,进行移植)。不过这个微博发出后,不少人进行吐槽,说什么能进行移植的人一大把之类了,其实就是因为,每个人心目中移植的标准是不一样的,大部分人所谓的移植,估计很像普通人心目中的IT高手,就是会装机的高手一样,而不是真正的代码编写级别的移植高手。

说了以上三种代码移植层次,其实这仅仅限于移植官方.NET Micro Framework现有的代码和功能,如果你想自己扩展自己的接口,并且希望自己的接口灵活,参数接口支持类,也支持事件等等功能,那么移植的难度会更上一个台阶,这就需要非常深入的了解.NET Micro Framework底层相关代码了。

总体而言,.NET Micro Framework的移植工作,比UCOSII复杂,但是比Linux和WinCE又要简单的多。此外.NET Micro Framework不是所谓的嵌入式系统,而是一个框架,不仅可以独立运行,还可以移植到Linux、WinCE和UCOSII等系统平台上来,这样的好处就是基于.NET Micro Framework的代码也许可以真正做到,一次编译到处运行了。

MF简  介:http://blog.csdn.net/yefanqiu/article/details/5711770

MF资料库:http://www.sky-walker.com.cn/News.asp?Id=25

再谈.NET Micro Framework移植相关推荐

  1. 《玩转.NET Micro Framework 移植-基于STM32F10x处理器》--微软中国.NET Micro Framework项目组工程师所作之序...

                                  序 2006年才偶然知道.NET Micro Framework,那是无意间翻阅一本当年的<程序员>杂志,发现有一篇马宁所写的. ...

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

    在前面的系列文章中我们不厌其烦地一一介绍了在NativeSample中如何开发和调试驱动.从今天开始,我们将介绍TinyCLR项目的相关知识,也许读者以为这又得需要洋洋洒洒十几篇才能介绍的完,其实不然 ...

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

    目前在Cortex-M3平台上最常见的嵌入式操作系统就是UCOSII了,除此之外可支持的主流嵌入式操作系统就难以见到了,这是因为Cortex-M3主频较低(常见72M),不支持MMU,片内Flash和 ...

  4. .Net Micro Framework导航总贴(新手必看)

    一.什么是.Net Micro Framework 它是一个.Net框架(微型框架),也是一个嵌入式系统OS,可以裸奔在ARM单片机上,也可以运行在别的嵌入式系统上.我们可以用VisualStudio ...

  5. .NET Micro Framework开发板用户简明手册(v3.0)

    说明:前段时间已经先后发布了<.Net Micro Framework开发板用户简明手册>和< .NET Micro Framework开发板用户简明手册(v2.0)>,分别对 ...

  6. 在Corex-M3开发板上移植.Net Micro Framework系列文章

    .NET Micro Framework 将 .NET 的可靠性和效率与 Visual Studio® 的高生产率结合起来,以针对价格较低.资源受限的小型设备开发应用程序,可帮助人们使用熟悉的 Vis ...

  7. 针对Micro Framework 3.0模拟器进行改造方法(浅谈)

    Micro Framework 3.0的SDK去年十月份就已经发布了,本打算在该SDK发布之后就把我以前开发的,可支持GPIO.I2C.SPI测试的模拟器同步升级为3.0版,以便早点支持VS2008( ...

  8. .NET Micro Framework动态调用C/C++底层代码(原理篇)

    .NET Micro Framework和WinCE系统不同,从应用开发角度来说,仅支持C#开发(从V4.2版本开始,才支持VB.NET开发),而不像WinCE应用开发,既可以用C#/VB.Net,也 ...

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

    SysTick驱动对TinyCLR来说非常重要,.Net Micro Framework系统的多线程和多任务(对托管代码来说是单任务多线程,但是还存在和托管代码同时运行的任务,如我们用MFDeploy ...

最新文章

  1. VMware扩大硬盘后修改Linux逻辑卷大小
  2. javascript断点调试方法
  3. 5.3.1计算机网络传输层之TCP可靠传输
  4. 【iBoard电子学堂】【iCore双核心板】资料光盘A盘更新,版本号为A6
  5. Allegro PCB find里面的筛选 各属性说明如 Clines或者Cline Segs
  6. MOCTF-Web-PHP黑魔法
  7. 实用帖 | 使用Visual Studio开发.NET Core推荐设置
  8. UIEdgeInsets
  9. 2016 年 ACM/ICPC 青岛区域赛 Problem C Pocky
  10. [html] 说下你对组件、模块、元素的理解,它们的区别在哪里?
  11. 2022年中国商业数据智能行业研究报告
  12. python网络编程学习笔记(二)
  13. ipconfig和ping 命令的各种参数
  14. php 文件上传框架,Laravel框架实现文件上传的方法分析
  15. HDU 1754 I Hate It 线段树RMQ
  16. 4款最受欢迎的Mac原型工具
  17. ArcGIS投影坐标系xy转地理坐标系经纬度
  18. 基于单片机的智能视力保护监控系统设计
  19. Please use torch.load with map_location=torch.device(‘cpu‘),If you are running on a CPU-only machine
  20. 结构建模设计——Solidworks软件之特征成型中拉伸凸台基体与设计树应用实战总结

热门文章

  1. Date、String、Calendar类型之间的转化
  2. 黑马程序员——程序结构
  3. [恢]hdu 1421
  4. LINQ to SQL自定义映射表关系(1:N or 1:1)
  5. eclipse使用方法02——链接Navigator view 与 Editor
  6. Android学习之在Eclipse看源代码的技巧
  7. java native方法
  8. Struts2之文件上传
  9. vb红绿灯自动切换_VB红绿灯程序.doc
  10. Java中==和equals、equals和hashCode的关系详解