
Để hiểu hơn về hệ thống cũng như cách thức tạo một dự án ARM hoàn chỉnh ở bài này
chúng tôi giới thiệu cách sử dụng phiên bản miễn phí của trình biên dịch Sourcery để tạo,
quản lý và biên dịch một 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 lýậ ị ề ử
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.ớ ị ằ

