.NET MicroFramework (v4.3.1) 編譯環境配置

netmf的開發環境確實很簡陋,而且由於項目已經停擺很久,本就稀缺的開發資料現如今更是難以尋找。

netmf這個項目的編譯,是要依靠msbuild編譯系統來執行的,由msbuild讀取項目文件(.proj)和目標文件(.targets),進而執行一系列的操作。因此,只要是配好了面向arm平臺的編譯系統,理論上都能編譯出固件來。netmf已經對gcc、mdk等編譯工具做了適配,在這裏我選擇mdk。

下面是我使用的編譯環境:

  • Windows10 專業版 64位
  • Visual Studio 2013
  • Keil MDK 5.11

Windows10很多人說他不穩定,經常崩潰什麼的,其實我覺得還好吧,用到現在還沒出過什麼問題。

keil這個軟件需要自己想辦法破解,否則你只能編譯很小的代碼文件。

之所以選擇VS2013,一是因爲我擔心再新版本的VS可能不支持netmfSDK,二是VS2015似乎並不能成功完成編譯,相同情況下VS2013編譯成功而VS2015滿屏飄紅,VS2017/19也都不用費時間嘗試了。

軟件安裝好之後,還要對netmf進行一些修改才行。

 

修改tools\targets\Microsoft.Spot.system.mdk.targets文件

備份,然後再大概40多行位置添加如下代碼(打開文件一看就明白了,排好隊形即可)

    <CC      Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.11'">"$(MDK_TOOL_PATH)\ARMCC\bin\armcc.exe"</CC>
    <CPP     Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.11'">"$(MDK_TOOL_PATH)\ARMCC\bin\armcc.exe"</CPP>
    <AS      Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.11'">"$(MDK_TOOL_PATH)\ARMCC\bin\armasm.exe"</AS>
    <LINK    Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.11'">"$(MDK_TOOL_PATH)\ARMCC\bin\armlink.exe"</LINK>
    <AR      Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.11'">"$(MDK_TOOL_PATH)\ARMCC\bin\armar.exe"</AR>
    <FROMELF Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.11'">"$(MDK_TOOL_PATH)\ARMCC\bin\fromelf.exe"</FROMELF>
    <MdkCrtLibLinkSwitch Condition="'$(COMPILER_TOOL_VERSION)'=='MDK5.11'">$(MdkCrtLibLinkSwitch) $(SWTC)libpath $(MDK_TOOL_PATH)\ARMCC\LIB</MdkCrtLibLinkSwitch>

 

然後在大概310行左右改一個參數

<Exec Command="$(FROMELF) $(FROMELF_FLAGS) $(SWTC)m32 -o $(EXEName).hex @(EXEOutput)" />

改爲

<Exec Command="$(FROMELF) $(FROMELF_FLAGS) $(SWTC)i32 -o $(EXEName).hex @(EXEOutput)" />

這樣,編譯出來的文件就能被各種ISP工具識別了。原因很簡單,m32參數要求fromelf程序將固件編譯成摩托羅拉hex格式,而使用i32參數則會編譯爲大多數isp程序支持的IntelHEX格式。

 

修改項目文件

進入solutions\stm32stamp文件夾,有一個settings文件,我們打開它,發現裏面有2行包含“FLOATINGPOINT”的內容。我們需要將true改爲false,將1改爲0,然後保存。因爲stm32f1芯片不支持硬件浮點運算,浮點運算只能軟件模擬,若不更改這兩個選項編譯則會報錯。

 

嘗試編譯項目

stm32stamp項目經過上述簡單的修改之後,已經沒有“硬傷”了,能夠通過編譯。編譯報錯,只能說明環境還是沒配好。

如果恰巧你把keil安裝在了默認位置(C:\Keil),那麼將下面的代碼保存成一個bat文件放在stm32stamp目錄下,雙擊就能開始編譯了。全新編譯大概一刻鐘,快的機子10分鐘就能出結果,紅色失敗,綠色成功,固件文件會被複制到當前目錄。

@echo off

call "C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\vsvars32.bat"

pushd ..\..\
call setenv_mdk 5.04 C:\Keil\ARM
popd

:Build
msbuild /t:build /p:flavor=debug;memory=flash /maxcpucount /noLogo /v:minimal /fileLogger /flp:Verbosity=normal

if %errorlevel% EQU 0 goto Succeed
goto Failed

:Succeed
color 0a
::move build binaries

set "lj=%~p0"
set "lj=%lj:\= %"
for %%a in (%lj%) do set wjj=%%a


copy /Y ..\..\BuildOutput\THUMB2\MDK5.04\le\FLASH\debug\%wjj%\bin\Tinybooter.hex Tinybooter.hex
copy /Y ..\..\BuildOutput\THUMB2\MDK5.04\le\FLASH\debug\%wjj%\bin\Tinyclr.hex\ER_FLASH TinyCLR.hex
copy /Y ..\..\BuildOutput\THUMB2\MDK5.04\le\FLASH\debug\%wjj%\bin\Tinyclr.hex\ER_CONFIG TinyCLR_Config.hex

echo *******************************************************************************
echo *                                                                             *
echo *       編譯完成,文件已複製。                                                *
echo *                                                                             *
echo *******************************************************************************

pause
exit


:Failed
color 04
echo *******************************************************************************
echo *                                                                             *
echo *       編譯失敗,請檢查錯誤!                                                *
echo *       已在msbuild.log文件中保存編譯日誌。                                   *
echo *                                                                             *
echo *******************************************************************************


pause
exit

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章