原创 Microsoft .NET Micro Framework移植开发笔记之移植初步

2015-2-2 18:45 1724 17 20 分类: MCU/ 嵌入式 文集: .NET Micro Framework USB移植

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

20150202183202736.jpg

这里我们需要下载SDK4.3(MF对应VS的开发包)和Porting Kit 4.3(RTM QFE1)(MF的源代码包)。下载得到这两个文件20150202183315983.jpg,分别解压安装。然后还需要Microsoft Visual Studio 2012(注意MF4.3.1一定是要VS2012),这软件大家都熟悉,自行百度下载安装就可以,注意要**就可以了(这些软件及后面编译环境需要的文件,我也会用网盘共享出来)。最后面需要的就是Keil MDK了,玩STM32 的自然是再熟悉不过了,理论上是任何版本都可以的,这里以MDK5.11为例。这些软件都已经安装准备好后,就可以开始建立移植环境了。

打开E盘(也有可能是其它盘),就可以看到20150202183422634.jpg这个文件夹,这个就是MF4.3的源代码包,我们所有的移植都是在这里修改编译的。进入这个文件夹,找到20150202183529771.jpg这个文件,点左键->编辑(我这里用的是notepad++来编辑),然后把里面的代码全删掉,改成为

@echo off

setenv_base.cmd MDK PORT %* C:\Keil_v5\ARM

注意C:\Keil_v5为你的Keil的安装路径

然后保存退出。然后再打开E:\MicroFrameworkPK_v4_3\tools\Targets,找到20150202183559591.jpg这个文件,同样右建->编辑,

20150202183627465.jpg

20150202183651374.jpg

在相应位置加上红框内的代码。然后是

20150202183719407.jpg

将红框内的RV31改成ARMCC然后保存退出。

接下来就是请出来大石头的编译脚本,让我们可以免去在CMD中敲指令,直接双击就可以进行编译。把20150202183759520.jpg这两个脚本文件复制到E:\MicroFrameworkPK_v4_3\Solutions\STM32Stamp文件夹中,这里STM32Stamp就是官方提供的STM32F1系列的移植的基本代码,后面所有基于STM32F1的移植都是从这里开始的,但注意的是MF的要求Flash最小是256K,只有Flash大于256K的STM32F1的芯片才能运行MF,目前我都是基于STM32F103ZET来移植的,最小的试过STM32F103RD也刚好满足要求。Debug编译跟release编译差别后面再讨论,这里我们双击release编译.bat开发编译,如下图

20150202183824123.jpg

第一次编译大概要十多分钟,具体时间因电脑配置而异。满怀期待的等待编译结果,等来的却是去编译出错20150202183847777.jpg

编译出错,就需要我们就修改错误,直到编译成功。MF编译最大的难点就在于没有IDE提示那里有错误,导致绝大部分的人只看到编译过程有一路飘红,却不知道怎么去定位错误,然后去修改错误。大石头的编译脚本还有个便利的地方就是会自动输出编译报告,我们可以通过编译报告来查找定位错误。找到STM32stamp文件夹下的20150202183910598.jpg文件,用记事本或者Notepad++来打开它。这里用Ctrl+F的查找功能,查找error这个关键词来找到错误提示20150202183952273.jpg

可以找到报告最后面一个error20150202184018358.jpg

这里并没有指出错误的在哪里,只是说编译某个文件有错误,很多人在钻在这里,怎么也看不出什么错误,其实我们都可以忽略这个,而真正错误的提示还在前面,我们可以根据MSB3073这个错误代码来查到前面的具体的错误报告。20150202184036197.jpg

可以到相同的错误代码,也可以看到前一句提示的6 errors,这两句前面的提示才是真正错误的提示,继续往前翻报告就看到非常熟悉的报告,没错这正是MDK的错误报告的风格。20150202184117771.jpg

再看所有的error都是floating-point variable错误,浮点不支持,因为STM32F1系列(M3)的芯片是不支持浮点的,所以编译出错了。这里我们要把浮点编译关掉,编辑STM32stamp文件夹下的20150202184234698.jpg文件,然后20150202184252868.jpg

把红框的true改成false,把1改成0,保存退出。再次双击release编译.bat开始编译,第一次编译就快多了,很快看到编译完成,这次编译就可以成功了,然后把编译后的文件复制到根目录下面的MFbin文件夹里。

20150202184318989.jpg

我们打开E:\MFBin\STM32Stamp目录就可以看到固件文件。20150202184357638.jpg

下一步当然就是烧写固件到STM32 的板子上,玩STM32的人都知道怎么烧写,我这里喜欢用J-Flash来烧写bin文件到开发板,也可以用ISP下载。固件下载完成后,连接上STM32板子上UART1,打开串口调试助手,把波特率设置成115200,复位下STM32的板子就可以看到MF的开机信息了。20150202184432331.jpg

至此,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

PARTNER CONTENT

文章评论3条评论)

登录后参与讨论

用户1103167 2015-2-3 11:08

真是难得,很有价值!没想到还有这个玩意儿!好!

mzwhhwj 2015-2-2 18:26

我这边是正常的

用户403664 2015-2-2 14:24

图片图片图片~~
相关推荐阅读
mzwhhwj 2017-12-07 08:49
物联网前端后台1——一条硬件狗的学习历程
        距上次写MQTT的文章,不知不觉已经过了三个月了,本来打算写自己搭建MQTT Borker的,但这方面的资料只要一百度都有,难度也不大,又加上项目比较忙,一直没时间写文章。从上个月开始...
mzwhhwj 2017-09-12 08:18
物联网核心之MQTT移植
在上一篇文章中,只是讲了MQTT的主要内容,至于怎么移植到STM32上,怎么使用才是最重要的关键。这里使用的平台是RT8711的WIFI SOC,使用的LWIP跟FreeRTOS,移植使用跟STM32...
mzwhhwj 2017-09-12 08:15
打造实用个性的Log输出宏
 我们在调试嵌入式程序的时候,用IDE+调试器是最直接的方式,但是很多时候我们还需要用串口输出来打印一些Debug的信息,来帮助我们调试。串口调试最简单的方式的话,最简单就是用printf来打印。但是...
mzwhhwj 2017-08-24 08:39
物联网核心之MQTT(一)
       MQTT,目前物联网的最主要的协议,基本所有收费的云平台都是基于MQTT协议,比如机智云,和所有的开放云平台比如中国移动的oneNet、百度的云平台也都支持MQTT的接入。虽然MQTT很...
mzwhhwj 2016-03-18 18:47
硬件狗的浪漫
硬件平台:STM32F4-discovery开发平台:VS2013+VisualGDB5.12   ...
mzwhhwj 2015-11-06 09:24
评论:@sunyzz 博客中提到的“【博客大赛】“虚短”“虚断”两板斧,搞定运算放大器!”
学习了...
EE直播间
更多
我要评论
3
17
关闭 站长推荐上一条 /3 下一条