Để 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. . 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. 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. 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