【 Net Micro Framework PortingKit - 02】STM3210E平臺構建
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
在上一篇《移植初步:環境搭建》文章中,我們介紹了環境搭建的相關工作,下一步我們將要為STM3210E開發板構建平臺程式碼。
開啟./tools/bin/SolutionWizard/SolutionWizard.exe
1、 選擇任務(Choose a Task)
由於在.Net Micro Framework原始碼中已經存在CortexM3_sample平臺,所以我們選擇克隆一個已存在的平臺(Clone an Existing Solution)。
2、 選擇存在的平臺(Clone an Existing Solution)
我們選擇:CORTEXM3_SAMPLE
3、 平臺屬性設定(
名字(name):STM3210E 注:這個名稱很重要,所以一定要慎重填寫。
開發者(Author):你的名字。
描述(Description):平臺說明。
4、 開發平臺基本引數設定(Processor Properties)
記憶體模式我們選擇:Small
其它相關引數,我們從EM-STM3210E開發板的使用者手冊中就可以查得到。
5、
我們選擇如下三個專案:
(1)、tinyclr
(2)、NativeSample
(3)、Tinybooter
6、 功能選擇(Feature Selection)
由於STM3210E開發板記憶體較小,所以我們選擇幾個比較基本的核心功能,我們選擇暫且如下(以後可以根據需要酌情新增即可):
(1)、BlockStorage
(2)、DataStorage
(3)、Debugger
(4)、Diagnostics
(5)、I2C
(6)、InterruptHandler
(7)、Serialization
(8)、SerialPort
(9)、SPI
(10)、Stream
(11)、TinyCore
7、 支援庫選擇(Unresolved Library Selection)
該部分的選擇和上一步驟的選擇緊密相關,如果選擇不當,則在編譯時,會出現很多錯誤,所以一定要深入瞭解後再進行選擇,我們目前的選擇如下:
(1)、asyncproccanll_pal
(2)、backlight_hal_stubs
(3)、batterycharger_hal_stubs
(4)、batterymeasurement_hal_stubs
(5)、BlockStorageDriver_stubs
(6)、blockstorage_pal
(7)、blockstorage_pal
(8)、cpu_bootstrap_stubs
(9)、Buttons_pal
(10)、cpu_cache_stubs
(11)、COM_pal
(12)、config_pal_Stubs
(13)、CRC
(14)、Crypto_stub
(15)、Debugger
(16)、Debugger_full
(17)、Diagnostics
(18)、diagnostics_pal
(19)、cpu_ebiu_stubs
(20)、events_pal
(21)、FS_Config_stubs
(22)、Gesture_pal_stubs
(23)、GlobalLock_hal
(24)、cpu_gpio_stubs
(25)、Graphics_stub
(26)、Hardware
(27)、heap_pal
(28)、HeapPersistence
(29)、I2C
(30)、cpu_i2c_stubs
(31)、i2c_pal
(32)、system_initialization_hal
(33)、Ink_pal_stubs
(34)、cpu_intc_stubs
(35)、InterruptHandler_stub
(36)、LargeBuffer_hal_stubs
(37)、lcd_hal_stubs
(38)、cpu_LCD_stubs
(39)、Messaging
(40)、cpu_mmu_stubs
(41)、IOPort
(42)、palevent_pal
(43)、cpu_performancecounter_stubs
(44)、piezo_pal_stubs
(45)、cpu_prestackinit_stubs
(46)、RPC_stub
(47)、Serialization
(48)、SimpleHeap_config
(49)、SimpleHeap
(50)、sockets_pal_stubs
(51)、cpu_spi_stubs
(52)、SPOT_Crypto_stub
(53)、SPOT_Graphics_stub
(54)、SPOT_Hardware
(55)、SPOT_Hardware_SerialPort
(56)、SPOT_IO
(57)、SPOT_Messaging_stub
(58)、SPOT_Serialization
(59)、Stream
(60)、cpu_time_stubs
(61)、Time_pal
(62)、TimeService_pal_stubs
(63)、tinycrt_pal_stubs
(64)、TinyHal
(65)、usart_pal
(66)、cpu_usb_stubs
(67)、usb_pal_stubs
(68)、virtualkey_hal_stubs
(69)、cpu_watchdog_stubs
(70)、Watchdog_pal_stubs
(71)、WireProtocol
做完以上幾步,我們便完成了最基本的平臺程式碼構建工作,這時我們可以檢視./MicroFramework_3_0/Solutions目錄,就會發現已經存在一個STM3210E的目錄了。
移植.Net Micro Framework一般先除錯NativeSample專案,等NativeSample除錯成功後,才進行tinyclr的除錯工作。一般來說如果NativeSample除錯成功,那麼.Net Micro Framework的移植工作也就完成了一大半。
下面我們對NativeSample專案進行scatterfile的配置,由於我們採用MDK工具進行編譯,所以我們開啟./Solutions/STM3210E/NativeSample/scatterfile_tools_mdk.xml檔案(當然,如果你選用的工具是RVDS,那麼你得開啟scatterfile_tools_rvds.xml檔案),
為了便於除錯,我們把程式放到RAM中執行(主要是因為NativeSample專案比較小,如果我們是在除錯TinyClr,那麼程式碼就得放到Nor Flash中去了)。
檢視EM-STM3210E開發板的使用者手冊,我們知道片內SRAM 64k,片外擴充套件SRAM為128K,所以我們把片外SRAM一份為二,分別分配給堆和棧。片內SRAM我們存放程式碼,不過不要從0x20000000開始的地址分配,我們今後還要把中斷向量表放到從0x20000000開始的地址上去。
根據以上資訊,我們對scatterfile_tools_mdk.xml檔案作如下修改:
<Set Name="Heap_Begin" Value="0x68000000"/>
<Set Name="Heap_End" Value="0x6800FFFC"/>
<Set Name="Stack_Bottom" Value="+0"/>
<Set Name="Stack_Top" Value="0x6801FFFC"/>
<If Name="TARGETLOCATION" Value="RAM">
<Set Name="Code_BaseAddress" Value="0x20001000"/>
<Set Name="Code_Size" Value="0x0000F000"/>
<Set Name="Valid" Value="true"/>
</If>
最後我們還得對./ DeviceCode/Initialization/tinyhal.cpp檔案做一些小小的改動,我們把下面的程式碼先做一下遮蔽,否則程式運行於此便會當機。
348 ://Buttons_Initialize();
480 ://g_Boot_RAMConstants_CRC = Checksum_RAMConstants();
好了,我們開啟命令列,輸入如下編譯命令並執行:
Msbuild ./Solutions/ STM3210E /dotNetMF.proj /t:build /p:flavor=debug;memory=ram
如果在以上步驟中你沒有出過什麼差錯,我想你一定會編譯成功的。
OK,一切順利,編譯成功。但是我們先不要著急用MDK進行除錯,因為我們的程式用到了片外SRAM(把它分配給堆和棧),而我們以上的程式碼中並沒有寫對其初始化的程式碼,所以要想使程式正常工作,我們必須首先要初始化片外SRAM。簡單期間,我們先編寫一個MDK的指令碼來完成這個初始化工作。
好了,這一步的工作就暫告一個段落,下篇文章我便介紹MDK指令碼的編寫,及在NativeSample.cpp中編寫一個控制LED燈閃爍的程式碼,以期來證明我們的EM-STM3210E已經可以初步工作了。