🌱 Các tầng của một Phần mềm Nhúng
Phần mềm nhúng là các chương trình được viết, thiết kế, lập trình chuyên biệt cho các thiết bị số và hoạt động song song với các thiết bị đó. Để thiết kế một phần mềm được coi là "đủ tốt", chúng ta cần đảm bảo chúng hoạt động an toàn, ổn định, và dễ maintain. Để đảm bảo điều đó, cần phải tổ chức các files trong chương trình một cách hợp lý.
Mặt khác, một phần mềm nhúng khá là phức tạp hơn so với các phần mềm ứng dụng khác, bởi vì cần có sự tương tác với nhiều loại Hardware khác nhau. Vì vậy, chúng ta có thể phần chia một phần mềm Nhúng thành nhiều layer, từ Hardware đến Ứng dụng của người dùng.
👉 Các tầng của một phần mềm Nhúng cơ bản
Các bạn có thể tham khảo sơ đồ dưới đây:
- Hardware
Đây chính là phần cứng Vi điều khiển, là Core, là các ngoại vi của Vi điều khiển như: GPIO, UART, SPI, ADC, Timer, ... - Device Driver
Tầng này sẽ gần với những bạn thích lập trình sử dụng thanh ghi. Nhưng tổ chức các hàm chặt chẽ và tổng quát hơn, các hàm này dùng để truy cập trực tiếp đến phần cứng. Các bạn có thể tham khảo cấu trúc thư viện LL hoặc STD. - HAL - Hardware Abstraction Layer
Tầng này dịch ra là Tầng trừu tượng phần cứng. Khi lập trình, chúng ta có nhiều loại Vi điều khiển khác nhau, nhưng người làm ứng dụng thì đôi khi không học sâu về phần cứng, mà họ dùng những thư viện có sẵn (Giống như LL, STD). Tuy nhiên, có một vấn đề là khi các phần cứng thay đổi khác nhau, thì người lập trình ứng dụng lại phải thay đổi thư viện, với cách sử dụng khác khá nhiều.
Vì vậy, chúng ta cần một thư viện mang tính tổng quát hơn, để khi thay đổi phần cứng thì phần mềm sẽ hạn chế thay đổi nhất có thể, vì vậy chúng ta có tầng HAL. - Middleware
Tầng trung gian giữa tầng HAL - truy cập phần cứng với tầng ứng dụng. Tầng này thường dùng để xử lý/tính toán data nhận được từ tầng HAL, và cung cấp các hàm cho tầng ứng dụng. - Application
Đây là tầng ứng dụng do User thiết kế, là phần chính chứ hàm main, và đại diện cho các luồng data và sơ đồ khối chính của chương trình. - OS/RTOS
Hệ điều hành, là chương trình phần mềm quản lý các task, liên quan đến cả phần cứng và phần mềm của ứng dụng. Vì vậy, Hệ điều hành có thể tương tác với tất các layer trong ứng dụng, có thể giao tiếp giữa Application với Hardware.
👉 Mở rộng
Ngoài các Layer cơ bản trên, người thiết kế hệ thống/phần mềm hoàn toàn có thể bổ sung thêm các Layer khác để phù hợp với ứng dụng của mình. Ví dụ hình ảnh bên dưới là hình ảnh về các Layers của một ứng dụng Automotive, với thêm tầng ECUAL cung cấp các API liên quan đến ECU, cùng tầng Application Configuration, hỗ trợ User các giao diện để cấu hình, generate code một cách đơn giản.
Các bạn có thể tham khảo một ứng dụng generate code hoạt động theo cách tương tự tại đây: