Lập trình C cho hệ thống nhúng (P1- Các kiến thức cơ bản)
Hệ thống nhúng (Embedded system) là một thuật ngữ để chỉ một hệ thống có khả năng tự trị được nhúng vào trong một môi trường hay một hệ thống mẹ. Đó là các hệ thống tích hợp cả phần cứng và phần mềm phục vụ các bài toán chuyên dụng trong nhiều lĩnh vực công nghiệp, tự động hoá điều khiển, quan trắc ...
Hệ thống nhúng (Embedded system) là một thuật ngữ để chỉ một hệ thống có khả năng tự trị được nhúng vào trong một môi trường hay một hệ thống mẹ. Đó là các hệ thống tích hợp cả phần cứng và phần mềm phục vụ các bài toán chuyên dụng trong nhiều lĩnh vực công nghiệp, tự động hoá điều khiển, quan trắc và truyền tin. Đặc điểm của các hệ thống nhúng là hoạt động ổn định và có tính năng tự động hoá cao. Trong hệ thống nhúng có các thành phần cơ bản sau: • ROM: Chứa chương trình và các dữ liệu được fix, các constant data. Ngày nay đa số các hệ thông sử dụng EEPROM hoặc FLASH để thay cho ROM bởi chúng có khả năng ghi xóa, update chương trình mới. • RAM: Lưu chương trình thực thi và các biến tạm. • MCU: Là bộ xử lý tính toán trung tâm. • Ngoài ra còn có các ngoại vi như ADC, DAC, các khối giao tiếp UART, I2C…
Thông thường nhà sản xuất sẽ cung cấp các công cụ dùng để phát triển phần mềm cho các dòng VĐK của họ. Đối với dòng kiến trúc ARM thì nổi tiếng nhất là 2 phần mềm IAR và KEIL. Các bộ công cụ này đều chứa các thành phần như editor, asembler, compiler và simutator. Ngoài ra nó còn có thể download và debug. Quá trình phát triển phần mềm cho hệ thống nhúng sử dụng Keli như hình dưới.
Ban đầu, người phát triển sử dụng Editor để soạn thảo ra source code (có thể là Assembly, C, C++..). Tiếp theo, ta sử dụng Asembler hay compiler để chuyển source code này thành object code mà máy có thể hiểu được. Compiler cũng tạo ra các listing file thể hiện địa chỉ và object code tương ứng với mỗi lệnh máy.
Ngôn ngữ C được dùng để viết hệ điều hành UNIX bởi Dennis Ritchie vào năm 1971.
3.1 Ưu điểm của C
Một trong những ưu điểm lớn nhất của C là nó không bị ràng buộc bởi một phần cứng hay một hệ thống cụ thể. Điều này khiến cho người phát triển có thể sử dụng để viết chương trình và chạy mà không cần thay đổi cho từng hệ thống riêng biệt . Việc build để chạy cho các hệ thống khác nhau phụ thuộc vào trình biên dịch. Chẳng hạn, chúng ta có thể viết chương trình C sau đó sử dụng các trình biên dịch build và chạy trên windows cũng như Linux. C cũng được gọi là một ngôn ngữ middle-level bởi nó kết hợp giữa ngôn ngữ bậc cao và cũng có thể truy cập rất sâu vào hệ thống như ngôn ngữ bậc thấp (chẳng hạn thông qua con trỏ hay các hàm Assembly nhúng vào chương trình). Để tạo ra mã máy hiệu quả (eficient high level) không những cần có thiết kế chương trình tốt mà còn cần chú ý đến các chi tiết cài đặt nhỏ, đặc biệt là đối với hệ thống nhúng.
3.2 Nhược điểm của C
Code lớn và không hiệu quả bằng assembly Không hỗ trợ trực tiếp kiểu stack Khó viết các hàm xử lý ngắt.
3.3 Một số lưu ý khi phát triển phần mềm nhúng
Đặc điểm đối với hệ thống nhúng:
ROM và RAM hạn chế. Lập trình phụ thuộc phần cứng. Cần đáp ứng chính xác về thời gian (hàm xử lý ngắt, tác vụ…) Nhiều kiểu pointer (far/rom/ui/paged/…) Một số keywords và token đặc biệt (@, interrupt, tiny,..)
Để phát triển tốt phần mềm nhúng bằng ngôn ngữ C cần nắm vững.
Thiết kế kiến trúc phần mềm hợp lý. Thành thạo sử dụng các tool và debugging Data types native support Các thư viện chuẩn. Phân biệt rõ về simple code với eficient code.
Tham khao (Wikipedia và một số website khác)