再谈.NET Micro Framework移植

简介: 从代码角度来说,不仅STM32F103的移植代码在不断完善,并且也已经移植和优化了基于STM32F207和STM32F407的相关代码。从硬件角度来说,也由最初完全借助第三方的硬件作为.NET Micro Framework开发板,演变为今天推出自行设计的开发板和物联网产品。

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

          

初次移植.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

相关文章
|
1月前
使用的是.NET Framework 4.0,并且需要使用SMTP协议发送电子邮件
使用的是.NET Framework 4.0,并且需要使用SMTP协议发送电子邮件
47 1
|
29天前
|
开发框架 缓存 监控
NET Framework 到 .NET 5/6 的迁移是重大的升级
本文详细介绍了从 .NET Framework 4.8 迁移到 .NET 5/6 的过程,通过具体案例分析了迁移策略与最佳实践,包括技术栈评估、代码迁移、依赖项更新及数据库访问层的调整,强调了分阶段迁移、保持代码可维护性及性能监控的重要性。
48 3
|
1月前
|
机器学习/深度学习 编解码 算法
【小样本图像分割-4】nnU-Net: Self-adapting Framework for U-Net-Based Medical Image Segmentation
《nnU-Net: 自适应框架用于基于U-Net的医学图像分割》是一篇2018年的论文,发表在Nature上。该研究提出了一种自适应的医学图像分割框架nnU-Net,能够自动调整模型的超参数以适应不同的数据集。通过2D和3D U-Net及级联U-Net的组合,nnU-Net在10个医学分割数据集上取得了卓越的性能,无需手动调整。该方法强调数据增强、预处理和训练策略等技巧,为医学图像分割提供了一个强大的解决方案。
64 0
【小样本图像分割-4】nnU-Net: Self-adapting Framework for U-Net-Based Medical Image Segmentation
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
本文讨论了在基于.NET 6和.NET Framework的WinForms项目中添加图表控件的不同方法。由于.NET 6的WinForms项目默认不包含Chart控件,可以通过NuGet包管理器安装如ScottPlot等图表插件。而对于基于.NET Framework的WinForms项目,Chart控件是默认存在的,也可以通过NuGet安装额外的图表插件,例如LiveCharts。文中提供了通过NuGet添加图表控件的步骤和截图说明。
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
|
3月前
|
开发框架 缓存 前端开发
实战.NET Framework 迁移到 .NET 5/6
从.NET Framework 迁移到.NET 5/6 是一次重要的技术革新,涵盖开发环境与应用架构的全面升级。本文通过具体案例详细解析迁移流程,包括评估现有应用、利用.NET Portability Analyzer 工具识别可移植代码、创建新项目、逐步迁移代码及处理依赖项更新等关键步骤。特别关注命名空间调整、JSON 序列化工具更换及数据库访问层重构等内容,旨在帮助开发者掌握最佳实践,确保迁移过程平稳高效,同时提升应用性能与可维护性。
124 2
|
3月前
|
开发框架 JSON 监控
实战指南:从 .NET Framework 迁移到 .NET 5/6 的策略与最佳实践
【8月更文挑战第28天】从 .NET Framework 迁移到 .NET 5/6 是一次重要的技术升级,涉及开发环境与应用架构的改进。本文通过具体案例分析,介绍迁移策略与最佳实践,帮助开发者顺利完成转变。
79 1
|
3月前
|
缓存 程序员
封装一个给 .NET Framework 用的内存缓存帮助类
封装一个给 .NET Framework 用的内存缓存帮助类
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
41 7
|
2月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
58 0