
如果对MF移植之前的东西有疑问,请看论坛置顶帖.Net Micro Framework导航总贴(新手必看)/ g) A. M6 R9 i& _' t $ R9 r, U5 ~7 h9 i8 f 硬件:STM32F103ZET6/STM32F103VET6,采用这两种MCU的任何开发板、学习板、核心板…… 软件环境: 系统:Win7 x86 其它系统我不肯定行不行,我两个都是Win7x86,估计WinXP也行。操作系统的影响应该不大! http://msdn.itellyou.cn/5 t3 S) y$ L+ \9 z, `8 C) P N2 F 开发:Visual Studio 2010 C#/C++ 必须安装VC++,很多人可能只有C#,那是不行的。vs2008据说可以,而vs2012没试过。( P, M" }+ B& d7 t' b http://msdn.itellyou.cn/ cn_visual_studio_2010_ultimate_x86_dvd_532347.iso (2.5 GB)5 Z8 C9 n1 b. b8 o9 o8 H 汇编:Keil MDK 4.54 这是编译为单片机固件用的,以前用4.12,后来升级到4.54,现在不确定4.12/4.50是否还可以。据说4.54成功的几率比4.12要高 https://pan.baidu.com/share/link?shareid=109154&uk=2432978109 http://www.kuaipan.cn/file/id_2378544298640124.htm$ r; z7 }, H) ?6 L 和谐包http://www.kuaipan.cn/file/id_2378544298617835.htm6 `% q$ f+ `9 @! Q/ {# V .Net Micro Framework Porting Kit 4.2(RTM QFE2), r2 a4 N9 [" Z (我们称之为MFPK422)$ B# {$ h9 n( E http://netmf.codeplex.com/releases/view/91594 https://pan.baidu.com/share/link?shareid=109166&uk=2432978109; { d W* Q+ |) J' U" w . n9 @5 i; w! M 另外,你还需要一个高级的文本编辑器,我用的是Notepad++! 强烈建议你把MFPK安装到有固态硬盘上!!!(为此我专门买了三星64G,419块)3 p; t; j- m+ O! `- `1 L$ x 一、安装% Z$ c+ r2 t, | Keil MDK安装到C:\Keil,一会我们要用C:\Keil\ARM,如果不是这个位置,一会就自己用Win7建立软链接,或者修改编译脚本,我不负责!, y( O1 S- N5 i* N: Q 自己河蟹,否则一会编译出错可自己负责。(今天果真就有人犯错,怎么换MFPK和MDK都是报两百多个错误)( c: s a+ B' X MFPK安装到C:\PK或者E:\MF\PK都行。 二、编译脚本: I A1 Z/ ~/ D6 T3 k7 ~0 k 我把编译做成了双击可用的批处理脚本,跟别人的有些不同,大家统一按照我的做。# ^# J _/ {& U8 b- {/ Y& L+ L 建议大家建立自己的SVN,托管整个PK目录,还可以记录每一次修改历史!3 X- k$ A/ R2 Z: s3 e9 } 1,PK根目录下有个setenv_MDK.cmd,如果没有,就新建一个,如果Keil安装目录不对,也是这里修改,整个文件就这两行! @echo off( t3 K( L, a7 L' E 6 C4 U% o" N' `6 _) F 2,修改根目录的setenv_base.cmd/ F0 ^* s0 \( k% L7 f7 W! {# e0 H 大概在14行,加上一种编译器MDK,因为写MDK4.12之类的太累了,也不方便升级MDK3 {7 e% O6 Q* K& w. k! X& } :ERROR 大概89行,增加这种MDK编译器$ T( a) u7 j, i+ }% I' v# G: u IF /I "%COMPILER_TOOL_VERSION%"=="ADI5.0" CALL :SET_BLACKFIN_VARS, p9 N( A! Z) {) l8 P6 H" N4 M# ` 3,Solutions目录里面,就存放着针对不同板子的编译方案。为了方便编译,我们直接在每个方案里面放置一个编译批处理脚本,这个脚本是通用的,拷贝到不同方案目录都可以。: W7 o- B% R/ t" b 这里以STM32Stamp为例,路径是:E:\MF\PK\Solutions\STM32Stamp\Release_Flash.bat2 N, }% s0 o4 E8 _8 z : 编译完成后,会把输出赋值到E:\MF\MFBin目录,MFBin目录与PK并排!, @1 ^0 @/ D4 n5 q& S# T # d+ O+ C- g- A1 m% G 4,既然我们前面增加了一种MDK编译器,那么还有一个地方要修改* A' Q/ L5 n! N9 O4 c0 M/ j5 \ MFPK是采用MSBuild这个编译系统的,所以我们要修改E:\MF\PK\tools\Targets\Microsoft.Spot.system.mdk.targets,大概40行增加5 A* G# ^ O" Q: Q5 ~ <span style="color:#93c763;"CC/span span style="color:#678cb1;"Condition/span=span style="color:black;""/spanspan style="color:#ec7600;"'$(COMPILER_TOOL_VERSION)'=='MDK'/spanspan style="color:black;""/span>"$(MDK_TOOL_PATH)\bin40\armcc.exe"</span style="color:#93c763;"CC/span><span style="color:#93c763;"CPP/span span style="color:#678cb1;"Condition/span=span style="color:black;""/spanspan style="color:#ec7600;"'$(COMPILER_TOOL_VERSION)'=='MDK'/spanspan style="color:black;""/span>"$(MDK_TOOL_PATH)\bin40\armcc.exe"</span style="color:#93c763;"CPP/span><span style="color:#93c763;"AS/span span style="color:#678cb1;"Condition/span=span style="color:black;""/spanspan style="color:#ec7600;"'$(COMPILER_TOOL_VERSION)'=='MDK'/spanspan style="color:black;""/span>"$(MDK_TOOL_PATH)\bin40\armasm.exe"</span style="color:#93c763;"AS/span><span style="color:#93c763;"LINK/span span style="color:#678cb1;"Condition/span=span style="color:black;""/spanspan style="color:#ec7600;"'$(COMPILER_TOOL_VERSION)'=='MDK'/spanspan style="color:black;""/span>"$(MDK_TOOL_PATH)\bin40\armlink.exe"</span style="color:#93c763;"LINK/span><span style="color:#93c763;"AR/span span style="color:#678cb1;"Condition/span=span style="color:black;""/spanspan style="color:#ec7600;"'$(COMPILER_TOOL_VERSION)'=='MDK'/spanspan style="color:black;""/span>"$(MDK_TOOL_PATH)\bin40\armar.exe"</span style="color:#93c763;"AR/span><span style="color:#93c763;"FROMELF/span span style="color:#678cb1;"Condition/span=span style="color:black;""/spanspan style="color:#ec7600;"'$(COMPILER_TOOL_VERSION)'=='MDK'/spanspan style="color:black;""/span>"$(MDK_TOOL_PATH)\bin40\fromelf.exe"</span style="color:#93c763;"FROMELF/span> 脚本这一步,如果没改对,就直接下载现成的吧!两个月前发布的,可能不适用于MF4.2(RTM QFE2)以上版本! .Net Micro Framework移植编译脚本 / L/ ]2 ]0 B1 }& ~' w' M1 q 三、编译 没错,到了这里,可以编译了!双击STM32Stamp里面的Release_Flash.bat,编译就开始了! 输出目录是E:\MF\PK\BuildOutput& t7 C* E6 A8 t6 l% z 第一次编译,需要非常非常久,传统SATA超过半个小时,SSD也得二十多分钟。. O% P0 _# n7 u7 b# T- D; \6 l 后面编译就快了,SATA需要5到10分钟,SSD需要两三分钟 然后,第一次编译,基本上会有错误,这个不用管它,再来一次,多编译几次,直到没有错误或者错误个数恒定下来为止!# O E {9 ~& H4 N3 y, Z3 G 在这一步,可能会产生各种各样的问题,只要我们找到问题所在,就可以使用相应的招数来对付! 编译脚本详解请看: .Net Micro Framework移植编译脚本& e" Y5 F$ I' V& B2 f % x" N! Q0 w- X! |1 y \8 w 为了尽可能的保持跟大家一样,我通过SVN把代码更新到刚安装PK的时候,2012年5月1日! 还删除了输出目录BuildOutput! x) B! l6 n2 h2 T5 I. p5 k# i) s 我很幸运,编译一次性成功,这标志着MF移植的第一步已经完成!. A# C4 {5 h3 ? [5 t" u9 S$ N ![]() 在E:\MF\MFBin\STM32Stamp目录中,我们已经看到了一个241KB的TinyCLR.bin,这就是我们所需要的MF固件!$ g+ V9 H1 u" e7 H% o 赶紧把它刷入板子测试一下!有JLink的同学用JLink,没有的就用串口,看《开发板通用刷机教程》 接上串口,上电,开机,串口软件显示出来MF的启动信息: 看到这些启动信息,标志着MF移植第二步已经完成!剩下的就是精雕细琢了! & t; W4 G3 O+ V R4 F 四、编译原理' R2 a+ X& n( J& P, \& j. R 了解编译原理更利于我们的移植工作。$ p& n* R( l* v" I( d' T 1,MFPK整个编译体系采用MSBuild,所以Visual Studio和.Net 4.0必不可少!(上面脚本中可以看到调用msbuild命令) 2,前面我们修改的Microsoft.SPOT.System.MDK.targets就是MSBuild格式,有兴趣的可以自己慢慢看; 3,每一个MF方案就是一个项目proj,它引入其它更多的项目;1 D5 }1 l5 [$ @9 S' P# I) \ 4,编译一个方案时,它会根据先后顺序和引用关系先编译其它项目,这跟C#项目引用一起编译有点类似。首次编译需要编译所有项目,所以要很久,以后只需要编译修改过的项目即可,所以就快多了; 5,targets指定如何去编译每一个项目生成obj文件,我们这里自然就是调用MDK来编译啦;( {" x( @ C2 H( [$ S* f2 e! G 6,MF大部分源码由C++编写,项目文件里面除了源代码以外更重要的是头文件,也就出现了很多目录的引用,绝对能让你头晕。C++项目之间的引用是通过引用头文件来实现的,不同于C#项目只需要引用项目或者程序集即可,所以,目录结构非常重要。 7,MSBuild会为每一个项目源代码创建一个进程,这很浪费时间(频繁创建进程),但是很保险,相互间不干扰;4 ^% D" ~8 _! x. u1 s 1 o8 Y/ u, i6 @/ k 五、纠错% i. K! B- o; P& z. m 出错在所难免,但是MSBuild是针对每个项目逐个编译的,尽管某个项目编译出错,它也会继续往下编译。屏幕滚得太快,我们根本就没有机会查看详细错误!然后它最后之后报告有多少个错误,大概哪里错了,几乎很难知道错误的详细信息,这就是MF移植的最大困难所在! 在上面的编译脚本中,msbuild那一行后面有个注释,那就是把msbuild的结果输出到一个日志文件build.log里面去。编译完成以后我们就可以用文本编辑器打开,搜索关键字“error”,一般那里就有详细的错误信息啦!( H( i7 C/ p1 p. E7 f 当然,具体的代码错误只能靠各人的功力了!我们欢迎交流各种常见的非代码错误!0 h3 u, a- ]) A0 e$ D + P2 f9 E' T# \) q: ~2 f5 z 常见错误: 1,没有和谐MDK。新手编译直接报几百个错误的,多数就是它;2 G7 A) r* l/ E" p2 m 2,VC++ 2010、MDK 4.54、MFPK 4.2(RTM QFE2)这些版本不对;& J( g) r8 T9 W: f& v2 Z 3,缺少碎片文件。比如不少项目就没有TinyCLR\scatterfile_tinyclr_mdk.xml文件;% a5 M3 E3 P% I; @ 4,不要用MF的那个什么向导,它生成出来的方案,很难编译通过;0 Y! b: H; Z' Q/ P9 ? , X) \% @* L/ S8 J' N( n End. |
看上去不错 |