1. 程式人生 > >【 Net Micro Framework PortingKit - 02】STM3210E平臺構建

【 Net Micro Framework PortingKit - 02】STM3210E平臺構建

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

在上一篇《移植初步:環境搭建》文章中,我們介紹了環境搭建的相關工作,下一步我們將要為STM3210E開發板構建平臺程式碼。

開啟./tools/bin/SolutionWizard/SolutionWizard.exe

,我們用平臺嚮導來搭建我們的專案(具體的圖文步驟請參見:.Net Micro Framework平臺移植初步),詳細的步驟如下:

1、  選擇任務(Choose a Task

     由於在.Net Micro Framework原始碼中已經存在CortexM3_sample平臺,所以我們選擇克隆一個已存在的平臺(Clone an Existing Solution)。

2、  選擇存在的平臺(Clone an Existing Solution

我們選擇:CORTEXM3_SAMPLE

3、  平臺屬性設定(

Solution Properties

名字(name):STM3210E  注:這個名稱很重要,所以一定要慎重填寫。

開發者(Author):你的名字。

描述(Description):平臺說明。

4、  開發平臺基本引數設定(Processor Properties

    

 

     記憶體模式我們選擇:Small

     其它相關引數,我們從EM-STM3210E開發板的使用者手冊中就可以查得到。

5、

  專案選擇(Project Selection

我們選擇如下三個專案:

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,片外擴充套件SRAM128K,所以我們把片外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已經可以初步工作了。

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述