"Một nhà khoa học giỏi là người có ý tưởng sáng tạo. Một kỹ sư giỏi là người xây dựng một thiết kế hoạt động với ít ý tưởng sáng tạo càng tốt." - Freeman Dyson.
Trong những thập kỷ gần đây, các hệ thống nhúng đã trở nên ngày càng phức tạp hơn. Internet càng thúc đẩy quá trình này vì chúng ta đang trong một thời đại kết nối mọi thiết bị mà chúng ta có thể tưởng tượng. Trước đây, các hệ thống nhúng thường đơn giản và độc lập, nhưng hiện nay chúng phải được kết nối Internet một cách bảo mật và an toàn để truyền tải thông tin quan trọng lên đám mây. Độ phức tạp và tính năng ngày càng tăng theo quy luật hàm mũ, khiến cho các kỹ sư phải đánh giá lại cách phát triển và hoàn thiện phần mềm nhúng trong thời gian và ngân sách cho phép.
Sự gia tăng tính năng và số lượng phần mềm
Nhu cầu gia tăng các tính năng của sản phẩm, cùng với nhu cầu kết nối các hệ thống với Internet, đã làm tăng đáng kể số lượng phần mềm cần được phát triển để tung ra một sản phẩm mới. Thời gian để phát triển sản phẩm vẫn không đổi, trong khi độ phức tạp và tính năng ngày càng tăng, như hình ảnh 1-1 dưới đây. Để đáp ứng các mốc thời gian, các nhà phát triển phần mềm nhúng đã phải mua phần mềm thương mại sẵn có hoặc sử dụng lại code từ các dự án trước đó.
Thách thức trong việc phát triển firmware
Firmware của vi điều khiển thường được phát triển cho một ứng dụng cụ thể và thường ràng buộc với phần cứng cấp thấp. Điều này làm cho phần mềm trở nên khó sử dụng và không thể tái sử dụng hoặc chuyển sang một kiến trúc phần cứng khác. Vấn đề này là do hạn chế tài nguyên của các sản phẩm nhúng. Trước đây, các vi điều khiển có bộ nhớ và bộ xử lý hạn chế, khiến kỹ thuật thiết kế phần mềm hiện đại không thể được sử dụng trong phát triển ứng dụng nhúng.
Tuy nhiên, các vi điều khiển hiện đại đang thay đổi cuộc chơi. Các vi điều khiển ARM Cortex-M cấp thấp giá chỉ vài đô la Mỹ và có thể cung cấp bộ nhớ và CPU hiệu quả. Điều này loại bỏ hạn chế tài nguyên và cho phép việc sử dụng các phương pháp thiết kế mà tách rời code ứng dụng khỏi phần cứng và tối đa hóa việc tái sử dụng code.
Lợi ích của việc sử dụng portable firmware
Việc phát triển firmware theo cách cổ điển là phổ biến. Mỗi chu kỳ phát triển dẫn đến việc phát minh và không sử dụng lại code, khiến cho các nhóm phát triển phải đối mặt với vấn đề tái phát minh bánh xe. Việc sử dụng một ngôn ngữ lập trình duy nhất không phải là vấn đề lớn trong phát triển phần mềm nhúng, đặc biệt là ngôn ngữ ANSI-C. Các vi điều khiển hiện đại cung cấp cơ hội sử dụng mã nguồn mở và các thư viện có sẵn để giảm thời gian và công sức phát triển.
Các ưu điểm của việc phát triển portable firmware bao gồm:
- Giảm thời gian sản xuất
- Giảm chi phí dự án
- Nâng cao chất lượng sản phẩm
Portable firmware cũng mang lại nhiều lợi ích gián tiếp, như giảm mức độ căng thẳng trong nhóm phát triển và tiết kiệm chi phí bảo trì. Tuy nhiên, việc phát triển portable firmware cũng có nhược điểm như cần suy nghĩ thấu đáo về kiến trúc phần mềm và yêu cầu sự hiểu biết và kinh nghiệm trong việc phát triển và mở rộng kiến trúc.
Tiêu chuẩn chất lượng của portable firmware
Để phát triển firmware thực sự portable và có thể sử dụng lại, cần tuân thủ một số tiêu chuẩn chất lượng. Portable firmware nên:
- Được module hóa và ghép nối lỏng lẻo
- Tuân thủ ANSI-C
- Có giao diện sạch sẽ
- Có lớp trừu tượng phần cứng (Hardware Abstraction Layer - HAL)
- Có thể đọc và bảo trì
- Đơn giản
- Sử dụng sự đóng gói và kiểu dữ liệu trừu tượng
- Có tài liệu đầy đủ
Các nhà phát triển cũng nên tránh sử dụng các tiện ích bổ sung của compiler và chọn một tập hợp con an toàn và được chỉ định đầy đủ cho ngôn ngữ C. Các tiêu chuẩn như MISRA-C hoặc Secure C có thể là lựa chọn tốt để đảm bảo phần mềm sử dụng những cấu trúc an toàn.
Trong phần tiếp theo, chúng ta sẽ xem xét một case study về việc phát triển firmware cho tấm pin mặt trời thông minh và những thách thức mà nhóm phát triển phải đối mặt.
Tiến trình phát triển từ đầu đến cuối không dễ dàng. Thách thức làm việc dự đoán rằng phát triển phần mềm có thể hoàn thành một cách nhanh chóng và hiệu quả. Để đảm bảo thành công, công việc cần thời gian và công sức.
This article is a Vietnamese version of the original article "Understanding Portable Firmware Programming (Part 1)" written by Kyle Lemons, an Electrical Engineer and Firmware Developer. The original article was published on Embedded Systems Academy.