Đ hiu hơn v h thng cũng như cách thc to mt d án ARM hoàn chnh bài này
chúng tôi gii thiu cách s dng phiên bn min phí ca trình biên dch Sourcery đ to,
qun lý và biên dch mt d án dành cho ARM Cortex.
1. Gi i thi u Sourcery
Sourcery là m t công ty đ i tác c a ARM chuyên phát tri n các trình biên d ch dành cho lõi
ARM d a trên GNU Toolchain. Hi n t i phiên b n Sourcery G++ h tr biên d ch v i các t p
l nh Thumb, Thumb-2 trên t t c các ki n trúc c a ARM bao g m c phiên b n ARMv7. ế
Sourcery có cung c p cho c ng đ ng m t phiên b n d i d ng mi n phí và có th t i v ướ
t đây.
2. Đ c đi m c a d án nhúng
Khác v i các ng d ng vi t trên máy tính PC, các d án nhúng th ng có m t đ c thù khác ế ườ
bi t đó là: h th ng d án, mã ngu n đ c vi t, qu n lý sau đó s đ c biên d ch trên m t ượ ế ượ
máy tính c a ng i phát tri n (g i là host). File th c thi sau đó s đ c n p vào board nhúng. ườ ượ
Hình 1: Mô hình l p trình nhúng
g
M t d án nhúng đ c phát tri n nh trên, ngoài các file c a ng i dùng, còn c n ph i có ượ ư ườ
các th vi n l p trình chu n, th vi n dành cho nhân x lý cùng các ngo i vi, th vi n c aư ư ư
các middleware. Đ qu n lý h th ng mã ngu n l n đó ng i ta hay dùng m t công c g i là ườ
Makefile.
Sau khi biên d ch các file trong d án, chúng ta c n liên k t t t c các thành ph n c n thi t ế ế
nh : đo n mã start-up, các th vi n hàm chu n, ng d ng c a ng i dùng, vùng d li u …ư ư ươ
s p x p chúng theo m t tr t t vào file th c thi . Quá trình này g i là linker và đ c t ch c ế ượ
b i các file vi t d i d ng script th ng g i là linker script. ế ướ ườ
3. Xây d ng d án
Các b n có th download framework d án dành cho STM32 t i đây.
C u trúc framework nh sau ư
+ Libraries \\ th vi n chu n CMSIS c a STM32ư
+ User \\ ch a file ng d ng c a ng i dùng ườ
. Makefile \\ file qu n lý d án
. stm32.ld \\ file linker script
. STM32_COMMON.ld
. STM32_SEC_FLASH.ld
Trái tim c a d án chính là file Makefile. Makefile ch a các h ng d n biên d ch, qu n lý ướ
các thành ph n mã ngu n c a d án. Chúng tôi s không đi sâu vào c u trúc và cách vi t ế
Makefile, ng i dùng ch c n quan tâm đ n các thi t l p nh h ng tr c ti p đ n d án.ườ ế ế ưở ế ế
#*********** For user to configure the project *****************
#include directory for header files and libraries
# Pathes to libraries
APPLIBDIR = ../Libraries
STMLIBDIR = $(APPLIBDIR)
STMSPDDIR = $(STMLIBDIR)/STM32F10x_StdPeriph_Driver
STMSPDSRCDIR = $(STMSPDDIR)/src
STMSPDINCDIR = $(STMSPDDIR)/inc
CMSISDIR = $(STMLIBDIR)/CMSIS/CM3/CoreSupport
CMSIS_STM32_DIR = $(STMLIBDIR)/CMSIS/CM3/DeviceSupport/ST/STM32F10x
CMSISDIR_STARTUP_DIR = $
(STMLIBDIR)/CMSIS/CM3/DeviceSupport/ST/STM32F10x/startup/gcc(ride7)
#User source code
USER_OBJS = main.o
#Output directory name
OUTDIR = Obj
#application name, the executable file will be $(MAIN_OUT).bin
MAIN_OUT = led
#User pre-define
CDEFS = -DUSE_STDPERIPH_DRIVER
CDEFS += -DUSE_FULL_ASSERT
CDEFS += -DUSE_STM3210RC_GEM31_B
+ Thêm file
Trong Makefile, bi n ếUSER_OBJS ch u trách nhi m qu n lý các file c a ng i dùng c n ườ
đ c biên d ch. Đ thêm file c n biên d ch, ta s d ng cú phápượ
USER_OBJS += file1.o
L u ý là n u đ t file th m c khác v i Makefile, chúng ta c n c ng d n đ ng d nư ế ư ườ
t ng đ i(so v i Makefile) vào bi n USER_OBJSươ ế
+ Thêm driver trong th vi n chu n CMSIS c a STM32ư
Bi n LIBSTM32_OBJS qu n lý các driver chu n n m trong b th vi n CMSIS c aế ư
STM32. L u ý khi chúng ta c n s d ng driver nào, thì m i c ng thêm nó đ gi m kích th cư ướ
file th c thi.
+ Thay đ i th m c biên d ch ư
Bi n ếOUTDIR qu n lý tên c a th m c s ch a các file th c thi sau khi biên d ch hoàn ư
thành
+ Thay đ i tên ng d ng
Thay đ i giá tr MAIN_OUT đ t o ra tên file th c thi theo ý mu n ng i dùng. ườ
+ Xác l p giá tr ti n x
CDEFS qu n lý các giá tr ti n x lý c a d án.
CDEFS += -D”Giá tr ti n x lý”
Sau khi thi t l p các thành ph n dành cho d án xong, đ biên d ch, chúng ta vào màn hìnhế
console c a windows, chuy n t i th m c ch a Makefile và gõ ư
$cs-make
Đ d n d p các file sau khi biên d ch, chúng ta gõ:
$cs-make clean
4. Nh n xét
Thông qua framework d ng s n này, chúng ta có th t qu n lý d án thay vì s d ng các
trình biên d ch có s n. Đ ng th i cũng hi u cách th c m t d án đ c c u thành nh th nào. ượ ư ế
Tuy nhiên s d ng Sourcery phiên b n mi n phí có vài đi m b t ti n nh : m t s hàm chu n ư
l p trình không đ c h tr đ y đ trong newlib, file th c thi sau khi biên d ch l n h n nhi u ượ ơ
so v i khi biên d ch b ng Keil ARM.