Microsoft .NET Micro Framework移植开发笔记之移植初步
Microsoft .NET Micro Framework(简称MF)是Microsoft .net家族当中最轻量的一个,它是一个完整的嵌入式系统可以运行在ARM7、ARM9、甚至Cortex-M系等这些低成本的ARM芯片上,用来托管C#、VB.NET的代码。简单的说MF就是一个嵌入式系统,然后你可以通过Microsoft Visual Studio来写C#或VB.NET的代码让它来运行,使得开发单片机软件就像开发Windows软件一样快捷方便。也正因为MF从4.0开始,Microsoft已经把它完全的开源了,而且可以移植到STM32芯片上,越来越多的C#程序员和嵌入式工程师对它感兴趣。具体MF的简介请参照百度百科。
自从接触MF以有半年之多,对MF的了解有一定的了解。目前在MF走的最前面两个前辈,一是叶帆,原来是Microsoft的MF项目组的成员,后成立叶帆科技,算是国内研究MF的开门鼻祖,网上关于MF的相关的资料基本上就是他的博文,我在刚开始研究移植的时候,就靠看他的博文来入门的;二是大石头和他的新生命团队,C#程序大神,通过MF走向嵌入式的开发,一直致力把MF运用在工控领域,他编写的编译脚本和编译环境使得很多研究MF的人带来极大的便利,我也是正因为在网上认识他而接触MF而走向研究MF的道路。
MF移植最大程度一直是在编译环境的建立,这是移植的第一次,也是对初学者来说最难的一步。100个想折腾MF的人,99个人都死在了这里一步,从而放弃了。因为MF移植这方面的资料在网上基本上都没有多少,更没有什么系统的移植教程,导致很多人遇到很多的问题都找不到解决的答案。我当初折腾近一个月的时间才把编译环境搞定,才开始进入移植的大门。这里我根据自身的经验和跟一些同道中人遇到的问题,来写这一篇的移植教程,希望能帮助想研究的MF移植的人能顺利的跨过这一步,也希望能够吸引更多的人来研究MF。
这里以.NET MF 4.3 RTM (QFE1)移植到STM32F103为基本来开始移植,也是因为这个组合,使得MF的应用起来越广。前面说的MF是完全开源的,我们可以用网上下载到它的源码,地址为http://netmf.codeplex.com/releases/view/118283
这里我们需要下载SDK4.3(MF对应VS的开发包)和Porting Kit 4.3(RTM QFE1)(MF的源代码包)。下载得到这两个文件,分别解压安装。然后还需要Microsoft Visual Studio 2012(注意MF4.3.1一定是要VS2012),这软件大家都熟悉,自行百度下载安装就可以,注意要**就可以了(这些软件及后面编译环境需要的文件,我也会用网盘共享出来)。最后面需要的就是Keil MDK了,玩STM32 的自然是再熟悉不过了,理论上是任何版本都可以的,这里以MDK5.11为例。这些软件都已经安装准备好后,就可以开始建立移植环境了。
打开E盘(也有可能是其它盘),就可以看到这个文件夹,这个就是MF4.3的源代码包,我们所有的移植都是在这里修改编译的。进入这个文件夹,找到这个文件,点左键->编辑(我这里用的是notepad++来编辑),然后把里面的代码全删掉,改成为
@echo off
setenv_base.cmd MDK PORT %* C:\Keil_v5\ARM
注意C:\Keil_v5为你的Keil的安装路径
然后保存退出。然后再打开E:\MicroFrameworkPK_v4_3\tools\Targets,找到这个文件,同样右建->编辑,
在相应位置加上红框内的代码。然后是
将红框内的RV31改成ARMCC然后保存退出。
接下来就是请出来大石头的编译脚本,让我们可以免去在CMD中敲指令,直接双击就可以进行编译。把这两个脚本文件复制到E:\MicroFrameworkPK_v4_3\Solutions\STM32Stamp文件夹中,这里STM32Stamp就是官方提供的STM32F1系列的移植的基本代码,后面所有基于STM32F1的移植都是从这里开始的,但注意的是MF的要求Flash最小是256K,只有Flash大于256K的STM32F1的芯片才能运行MF,目前我都是基于STM32F103ZET来移植的,最小的试过STM32F103RD也刚好满足要求。Debug编译跟release编译差别后面再讨论,这里我们双击release编译.bat开发编译,如下图
第一次编译大概要十多分钟,具体时间因电脑配置而异。满怀期待的等待编译结果,等来的却是去编译出错
编译出错,就需要我们就修改错误,直到编译成功。MF编译最大的难点就在于没有IDE提示那里有错误,导致绝大部分的人只看到编译过程有一路飘红,却不知道怎么去定位错误,然后去修改错误。大石头的编译脚本还有个便利的地方就是会自动输出编译报告,我们可以通过编译报告来查找定位错误。找到STM32stamp文件夹下的文件,用记事本或者Notepad++来打开它。这里用Ctrl+F的查找功能,查找error这个关键词来找到错误提示
这里并没有指出错误的在哪里,只是说编译某个文件有错误,很多人在钻在这里,怎么也看不出什么错误,其实我们都可以忽略这个,而真正错误的提示还在前面,我们可以根据MSB3073这个错误代码来查到前面的具体的错误报告。
可以到相同的错误代码,也可以看到前一句提示的6 errors,这两句前面的提示才是真正错误的提示,继续往前翻报告就看到非常熟悉的报告,没错这正是MDK的错误报告的风格。
再看所有的error都是floating-point variable错误,浮点不支持,因为STM32F1系列(M3)的芯片是不支持浮点的,所以编译出错了。这里我们要把浮点编译关掉,编辑STM32stamp文件夹下的文件,然后
把红框的true改成false,把1改成0,保存退出。再次双击release编译.bat开始编译,第一次编译就快多了,很快看到编译完成,这次编译就可以成功了,然后把编译后的文件复制到根目录下面的MFbin文件夹里。
我们打开E:\MFBin\STM32Stamp目录就可以看到固件文件。
下一步当然就是烧写固件到STM32 的板子上,玩STM32的人都知道怎么烧写,我这里喜欢用J-Flash来烧写bin文件到开发板,也可以用ISP下载。固件下载完成后,连接上STM32板子上UART1,打开串口调试助手,把波特率设置成115200,复位下STM32的板子就可以看到MF的开机信息了。
至此,MF已经运行起来了,完成了MF的基本的移植,后面移植就是根据我们的需求,在这个基础上不断的增加完善我们的固件。如果你可以完成到这一步,那恭喜你开始进入MF移植的大门。如果编译有问题或者是想更多的了解MF,可以加QQ群170024940随时提问。
相关的资料和软件:
1、 MF4.3的源码和SDK及编译环境脚本:http://pan.baidu.com/s/1sj4X7hN
2、 Microsoft Visual Studio 2012:http://pan.baidu.com/s/10czr4
3、 Keil MDK5.11:http://pan.baidu.com/s/1c0ANJ8W
4、 大石头的论坛:http://www.newlifex.com/
5、 叶帆的博客:http://www.cnblogs.com/yefanqiu/archive/2010/03/02/1676844.html
6、 作者的博客:http://bbs.ednchina.com/BLOG_mzwhhwj_2002493.HTM?source=ednc_topnav
用户1103167 2015-2-3 11:08
mzwhhwj 2015-2-2 18:26
用户403664 2015-2-2 14:24