Để 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ê
Trang 1Để 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
Trang 2Cấ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
Trang 3#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ý”
Trang 4Sau 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