<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      .Net Micro Framework移植基礎(chǔ)(包編譯通過(guò))

      借斯巴達(dá)之際,今天在QQ群1600838直播MF移植環(huán)境的準(zhǔn)備工作,大家可隨時(shí)詢問(wèn)移植相關(guān)問(wèn)題!
      如果對(duì)MF移植之前的東西有疑問(wèn),請(qǐng)看論壇置頂帖.Net Micro Framework導(dǎo)航總貼(新手必看)

      硬件:STM32F103ZET6/STM32F103VET6,采用這兩種MCU的任何開發(fā)板、學(xué)習(xí)板、核心板……

      軟件環(huán)境:
      系統(tǒng):Win7 x86    其它系統(tǒng)我不肯定行不行,我兩個(gè)都是Win7x86,估計(jì)WinXP也行。操作系統(tǒng)的影響應(yīng)該不大!
      http://msdn.itellyou.cn/
      開發(fā):Visual Studio 2010 C#/C++    必須安裝VC++,很多人可能只有C#,那是不行的。vs2008據(jù)說(shuō)可以,而vs2012沒(méi)試過(guò)。
      http://msdn.itellyou.cn/
      ed2k://|file|cn_visual_studio_2010_ultimate_x86_dvd_532347.iso|2685982720|4AE6228933DDE49D9BFA4C3467C831C2|/
      匯編:Keil MDK 4.54    這是編譯為單片機(jī)固件用的,以前用4.12,后來(lái)升級(jí)到4.54,現(xiàn)在不確定4.12/4.50是否還可以。據(jù)說(shuō)4.54成功的幾率比4.12要高
      http://pan.baidu.com/share/link?shareid=109154&uk=2432978109
      http://www.kuaipan.cn/file/id_2378544298640124.htm

      和諧包http://www.kuaipan.cn/file/id_2378544298617835.htm

      .Net Micro Framework Porting Kit 4.2(RTM QFE2)
      (我們稱之為MFPK422
      http://netmf.codeplex.com/releases/view/91594

      http://pan.baidu.com/share/link?shareid=109166&uk=2432978109

      另外,你還需要一個(gè)高級(jí)的文本編輯器,我用的是Notepad++
      強(qiáng)烈建議你把MFPK安裝到有固態(tài)硬盤上!!!(為此我專門買了三星64G,419塊)

      一、安裝
      Keil MDK安裝到C:\Keil,一會(huì)我們要用C:\Keil\ARM,如果不是這個(gè)位置,一會(huì)就自己用Win7建立軟鏈接,或者修改編譯腳本,我不負(fù)責(zé)!
      自己河蟹,否則一會(huì)編譯出錯(cuò)可自己負(fù)責(zé)。(今天果真就有人犯錯(cuò),怎么換MFPK和MDK都是報(bào)兩百多個(gè)錯(cuò)誤)
      MFPK安裝到C:\PK或者E:\MF\PK都行。

      二、編譯腳本
      把編譯做成了雙擊可用的批處理腳本,跟別人的有些不同,大家統(tǒng)一按照我的做。
      建議大家建立自己的SVN,托管整個(gè)PK目錄,還可以記錄每一次修改歷史
      1,PK根目錄下有個(gè)setenv_MDK.cmd,如果沒(méi)有,就新建一個(gè),如果Keil安裝目錄不對(duì),也是這里修改
      ,整個(gè)文件就這兩行!

      @echo off

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


      2,修改根目錄的setenv_base.cmd
      大概在14行,加上一種編譯器MDK,因?yàn)閷慚DK4.12之類的太累了,也不方便升級(jí)MDK

      :ERROR
      @echo.
      @echo Error: Invalid Arguments!
      @echo.
      @echo Usage: setenv_base COMPILER_TOOL_VERSION
      @echo     where COMPILER_TOOL_VERSION is ADI5.0, GCC4.2, ADS1.2, RVDS3.0, RVDS3.1, RVDS4.0,  RVDS4.1, MDK3.1, MDK3.80a, MDK4.12, MDK4.13, MDK, SHC9.2, VS9, VS10
      @echo.

      大概89行,增加這種MDK編譯器

      IF /I "%COMPILER_TOOL_VERSION%"=="ADI5.0"   CALL :SET_BLACKFIN_VARS
      IF /I "%COMPILER_TOOL_VERSION%"=="GCC4.2"   CALL :SET_GCC_VARS
      IF /I "%COMPILER_TOOL_VERSION%"=="MDK3.1"   CALL :SET_MDK_VARS
      IF /I "%COMPILER_TOOL_VERSION%"=="MDK3.80a" CALL :SET_MDK_VARS
      IF /I "%COMPILER_TOOL_VERSION%"=="MDK4.12"  CALL :SET_MDK_VARS
      IF /I "%COMPILER_TOOL_VERSION%"=="MDK4.13"  CALL :SET_MDK_VARS
      IF /I "%COMPILER_TOOL_VERSION%"=="MDK"   CALL :SET_MDK_VARS

      3,Solutions目錄里面,就存放著針對(duì)不同板子的編譯方案。為了方便編譯,我們直接在每個(gè)方案里面放置一個(gè)編譯批處理腳本,這個(gè)腳本是通用的,拷貝到不同方案目錄都可以。
      這里以
      STM32Stamp為例,路徑是:E:\MF\PK\Solutions\STM32Stamp\Release_Flash.bat

      ::@echo off
      :: 設(shè)置一些參數(shù)
      set x_flavor=release
      set x_memory=flash
      set x_root=..\..\

      :: 先嘗試取得當(dāng)前目錄名,作為方案名

      for %%i in ("%cd%") do set x_name=%%~ni

      title 編譯MF方案[%x_name%][%x_flavor%][%x_memory%]

      pushd %x_root%
      call setenv_MDK.cmd
      popd

      call msbuild dotnetmf.proj /t:build /p:flavor=%x_flavor%;memory=%x_memory%
      :: > build.log

      echo 編譯完成

      :copybin
      :: 把生成的文件復(fù)制出來(lái)
      set x_buildout=%x_root%BuildOutput\THUMB2\%COMPILER_TOOL_VERSION%\le\%x_memory%\%x_flavor%\%x_name%\bin
      if not exist %x_buildout% set x_buildout=%x_root%BuildOutput\THUMB2FP\%COMPILER_TOOL_VERSION%\le\%x_memory%\%x_flavor%\%x_name%\bin
      set x_bindir=%x_root%..\MFBin\%x_name%

      if not exist %x_bindir% md %x_bindir%
      :: 復(fù)制TinyBooter.bin
      copy %x_buildout%\*.bin %x_bindir%\ /y
      copy %x_buildout%\*.axf %x_bindir%\ /y

      del %x_buildout%\*.bin /f/q
      del %x_buildout%\*.axf /f/q

      :: 復(fù)制ER_FLASH和ER_CONFIG
      set x_buildout=%x_buildout%\tinyclr.bin
      copy %x_buildout%\*.* %x_bindir%\ /y
      copy %x_bindir%\ER_FLASH %x_bindir%\TinyCLR.bin /y

      del %x_bindir%\ER_FLASH /f/q

      echo 輸出已復(fù)制到 %x_bindir%\

      pause

      編譯完成后,會(huì)把輸出賦值到E:\MF\MFBin目錄,MFBin目錄與PK并排!

      4,既然我們前面增加了一種MDK編譯器,那么還有一個(gè)地方要修改
      MFPK是采用MSBuild這個(gè)編譯系統(tǒng)的,所以我們要修改E:\MF\PK\tools\Targets\Microsoft.Spot.system.mdk.targets,大概40行增加

      <CC      Condition="'$(COMPILER_TOOL_VERSION)'=='MDK'">"$(MDK_TOOL_PATH)\bin40\armcc.exe"</CC>
      <CPP     Condition="'$(COMPILER_TOOL_VERSION)'=='MDK'">"$(MDK_TOOL_PATH)\bin40\armcc.exe"</CPP>
      <AS      Condition="'$(COMPILER_TOOL_VERSION)'=='MDK'">"$(MDK_TOOL_PATH)\bin40\armasm.exe"</AS>
      <LINK    Condition="'$(COMPILER_TOOL_VERSION)'=='MDK'">"$(MDK_TOOL_PATH)\bin40\armlink.exe"</LINK>
      <AR      Condition="'$(COMPILER_TOOL_VERSION)'=='MDK'">"$(MDK_TOOL_PATH)\bin40\armar.exe"</AR>
      <FROMELF Condition="'$(COMPILER_TOOL_VERSION)'=='MDK'">"$(MDK_TOOL_PATH)\bin40\fromelf.exe"</FROMELF>


      腳本這一步,如果沒(méi)改對(duì),就直接下載現(xiàn)成的吧!兩個(gè)月前發(fā)布的,可能不適用于MF4.2(RTM QFE2)以上版本
      .Net Micro Framework移植編譯腳本

      三、編譯
      沒(méi)錯(cuò),到了這里,可以編譯了!雙擊
      STM32Stamp里面的Release_Flash.bat,編譯就開始了
      輸出目錄是E:\MF\PK\BuildOutput
      第一次編譯,需要非常非常久,傳統(tǒng)SATA超過(guò)半個(gè)小時(shí),SSD也得二十多分鐘。
      后面編譯就快了,SATA需要5到10分鐘,SSD需要兩三分鐘
      然后,第一次編譯,基本上會(huì)有錯(cuò)誤,這個(gè)不用管它,再來(lái)一次,多編譯幾次,直到?jīng)]有錯(cuò)誤或者錯(cuò)誤個(gè)數(shù)恒定下來(lái)為止
      在這一步,可能會(huì)產(chǎn)生各種各樣的問(wèn)題,只要我們找到問(wèn)題所在,就可以使用相應(yīng)的招數(shù)來(lái)對(duì)付!
      編譯腳本詳解請(qǐng)看:
      .Net Micro Framework移植編譯腳本

      為了盡可能的保持跟大家一樣,我通過(guò)SVN把代碼更新到剛安裝PK的時(shí)候,2012年5月1日!
      還刪除了輸出目錄BuildOutput!
      我很幸運(yùn),編譯一次性成功
      ,這標(biāo)志著MF移植的第一步已經(jīng)完成


      在E:\MF\MFBin\STM32Stamp目錄中,我們已經(jīng)看到了一個(gè)241KB的TinyCLR.bin,這就是我們所需要的MF固件!
      趕緊把它刷入板子測(cè)試一下!有JLink的同學(xué)用JLink,沒(méi)有的就用串口,看
      《開發(fā)板通用刷機(jī)教程》
      接上串口,上電,開機(jī),串口軟件顯示出來(lái)MF的啟動(dòng)信息:


      看到這些啟動(dòng)信息,標(biāo)志著MF移植第二步已經(jīng)完成!剩下的就是精雕細(xì)琢了!

      四、編譯原理
      了解編譯原理更利于我們的移植工作。
      1,MFPK整個(gè)編譯體系采用MSBuild,所以Visual Studio和.Net 4.0必不可少!(上面腳本中可以看到調(diào)用msbuild命令)
      2,前面我們修改的Microsoft.SPOT.System.MDK.targets就是MSBuild格式,有興趣的可以自己慢慢看;
      3,每一個(gè)MF方案就是一個(gè)項(xiàng)目proj,它引入其它更多的項(xiàng)目;
      4,編譯一個(gè)方案時(shí),它會(huì)根據(jù)先后順序和引用關(guān)系先編譯其它項(xiàng)目,這跟C#項(xiàng)目引用一起編譯有點(diǎn)類似。首次編譯需要編譯所有項(xiàng)目,所以要很久,以后只需要編譯修改過(guò)的項(xiàng)目即可,所以就快多了;
      5,targets指定如何去編譯每一個(gè)項(xiàng)目生成obj文件,我們這里自然就是調(diào)用MDK來(lái)編譯啦
      6,MF大部分源碼由C++編寫,項(xiàng)目文件里面除了源代碼以外更重要的是頭文件,也就出現(xiàn)了很多目錄的引用,絕對(duì)能讓你頭暈。C++項(xiàng)目之間的引用是通過(guò)引用頭文件來(lái)實(shí)現(xiàn)的,不同于C#項(xiàng)目只需要引用項(xiàng)目或者程序集即可,所以,目錄結(jié)構(gòu)非常重要。
      7,MSBuild會(huì)為每一個(gè)項(xiàng)目源代碼創(chuàng)建一個(gè)進(jìn)程,這很浪費(fèi)時(shí)間(頻繁創(chuàng)建進(jìn)程),但是很保險(xiǎn),相互間不干擾;

      五、糾錯(cuò)
      出錯(cuò)在所難免,但是MSBuild是針對(duì)每個(gè)項(xiàng)目逐個(gè)編譯的,盡管某個(gè)項(xiàng)目編譯出錯(cuò),它也會(huì)繼續(xù)往下編譯。屏幕滾得太快,我們根本就沒(méi)有機(jī)會(huì)查看詳細(xì)錯(cuò)誤!然后它最后之后報(bào)告有多少個(gè)錯(cuò)誤,大概哪里錯(cuò)了,幾乎很難知道錯(cuò)誤的詳細(xì)信息這就是MF移植的最大困難所在
      在上面的編譯腳本中,msbuild那一行后面有個(gè)注釋,那就是把msbuild的結(jié)果輸出到一個(gè)日志文件build.log里面去。編譯完成以后我們就可以用文本編輯器打開,搜索關(guān)鍵字“error”,一般那里就有詳細(xì)的錯(cuò)誤信息啦!
      當(dāng)然,具體的代碼錯(cuò)誤只能靠各人的功力了!我們歡迎交流各種常見的非代碼錯(cuò)誤

      常見錯(cuò)誤:
      1,沒(méi)有和諧MDK。新手編譯直接報(bào)幾百個(gè)錯(cuò)誤的,多數(shù)就是它;
      2,VC++ 2010、MDK 4.54、MFPK 4.2(RTM QFE2)這些版本不對(duì);
      3,缺少碎片文件。比如不少項(xiàng)目就沒(méi)有TinyCLR\scatterfile_tinyclr_mdk.xml文件;

       

      前前后后忙活了一天,修改了三四十次,才最終完成本文!

      如果喜歡.Net Micro Framework,對(duì)C#玩單片機(jī),對(duì)物聯(lián)網(wǎng)和工農(nóng)業(yè)自動(dòng)化感興趣,MF將是一個(gè)不錯(cuò)的選擇!

      MF是微軟開源的項(xiàng)目,本系列移植教程將讓你具有獨(dú)立的移植能力,配合市場(chǎng)上40~300RMB的各種單片機(jī)學(xué)習(xí)板,可以讓你走得更遠(yuǎn)!


      End.

      posted @ 2012-11-08 22:03  大石頭  閱讀(7489)  評(píng)論(37)    收藏  舉報(bào)
      主站蜘蛛池模板: 久久久久香蕉国产线看观看伊| 99国产精品99久久久久久| 国产明星精品无码AV换脸| 久久精品免费自拍视频| 成人国产精品中文字幕| 国产毛片子一区二区三区| 国产女人喷潮视频免费| 久久99国产乱子伦精品免费| 亚洲精品一区国产欧美| 成人无码视频在线观看免费播放| 亚洲欧美高清在线精品一区二区| 久久精品一区二区东京热 | 亚洲男女羞羞无遮挡久久丫| 国产精品亚洲av三区色| 国产99精品成人午夜在线| 成人午夜视频一区二区无码| 亚洲悠悠色综合中文字幕| 国产精品中文第一字幕| 民县| 久久日韩在线观看视频| 国产愉拍91九色国产愉拍| 国产老头多毛Gay老年男| 日本高清不卡一区二区三| 777米奇色狠狠888俺也去乱| 亚洲国产午夜精品福利| 无码人妻丰满熟妇区毛片18| 国产超高清麻豆精品传媒麻豆精品 | 色噜噜噜亚洲男人的天堂| 亚洲成人资源在线观看| 亚洲中少妇久久中文字幕| 开心五月婷婷综合网站| 国产日女人视频在线观看| 亚洲国产精品午夜福利| 久久综合久中文字幕青草| 色综合网天天综合色中文| 午夜毛片不卡免费观看视频| 国产精品自拍视频免费看| 日韩精品中文字幕人妻| 精品国产免费一区二区三区香蕉| av色蜜桃一区二区三区| 色国产视频|