以下介紹如何在Cortex M3上,開發一個簡單程式
軟體:
Ø 使用Keli Evaluation Kit
硬體:(若沒有硬體,可先用simulator模擬執行)
Ø 開發產品時所使用的是Luminary Micro公司生產,型號為LM3S3748的微控制器,此晶片規格如下:
² Cortex-M3 based Microcontroller:
u 50MHz, 128KB Flash ROM, 64KB SRAM, MPU
u 4 Timers
u 8 Motion Control PWM
u 8 Capture Compare Pins
u USB HOST
u 2 * UART
u 2 * I2C
u 2 * SSI
u 1 * QEI
u 8 * 10-bit ADC
u Temperature Sensor
u 2 * Analog Comparator
u 61 GPIO Pins
u Battery-backed Hibernation Module
u Watchdog Timer, Power saving modes,
u JTAG and Serial Wire debug
實作步驟:
1. 執行 Keli uVision4
2. 選擇 [Project] ->
[New uVision Project],選擇要放專案檔案的路徑。
3. 選擇要執行的硬體平台,此時選擇
Luminary Micro出廠的 LM3S811,接著畫面會詢問是否要使用預設的Startup Code (startup.s),選擇”是”。此時便會生成一個專案,並且已經寫好Startup Code。
4. 接著,在此專案中加入一個簡單的小程式。步驟為 [File] –> [New],並且加入下列程式碼,將檔案存成
hello.c
#include
"stdio.h"
int main(void)
{
printf("Hello!\n");
while(1);
}
5. 按下F7,開始編譯Image,編譯成功後的log如下,這個程式共佔了3404Bytes。
Build target
'Target 1'
compiling
hello.c...
linking...
Program Size:
Code=3404 RO-data=44 RW-data=12 ZI-data=596
"C121A-OSD.axf"
- 0 Error(s), 0 Warning(s).
6. 根據此專案的linker option,可以得知解此程式的空間配置方式,0x00000000~0x20000000放置RO資料,0x20000000之後放置RW資料。並且第一個將會執行的程式進入點為Reset_Handler。
--cpu Cortex-M3 *.o
--ro-base 0x00000000 --entry 0x00000000
--rw-base 0x20000000
--entry Reset_Handler
--first __Vectors --strict --autoat --summary_stderr --info
summarysizes --map --xref --callgraph --symbols --info sizes --info totals
--info unused --info veneers
參考Startup.s得知Reset_Handler所作的事情主要有三:
Ø 將 .data從Flash複製到 SRAM (若不清楚.data, .bss等觀念,請參考ELF)
Ø 將 .bss 區域清空
Ø 呼叫 main() 函數,開始執行使用者所寫的程式。
7. 執行程式,利用 simulator 執行程式。
TI所提供燒錄image的程式需要使用 .bin 檔案格式,因此當作好了 .axf 檔案之後,需要轉換檔案格式,可以手動執行下列命令,或是在[project]
-> [option]中的User欄位設定編譯完成後需執行下列命令。
fromelf --bin
--output .\C121A-OSD.bin .\C121A-OSD.axf
編譯成功後的log如下
Build target
'Target 1'
linking...
Program Size:
Code=440 RO-data=32 RW-data=4 ZI-data=260
User command #1:
fromelf --bin --output .\C121A-OSD.bin .\C121A-OSD.axf
"C121A-OSD.axf"
- 0 Error(s), 0 Warning(s).
8. 如果沒有開發用的硬體,也可以先使用simulator的方式,看看程式是否能夠如預期運作。
設定的方式是選擇 [project] -> [option] -> [debug] -> [simulator]。
注意:
Ø 使用Keli Evaluation Kit建立的專案,只能當做練習。若要開發商業化的產品,則需要購買Keli產品。或是自己撰寫startup code。
Ø 測試時發現程式執行結果不會顯示任何畫面,因為此環境下printf()會呼叫fputc(),而fputc()並沒有實作,以下是使用keli設定中斷點所看到的組語
0x00000122 F000F817 BL.W __I$use$semihosting$fputc (0x00000154)
此牽涉到 semihost 的觀念,後續再聊。