Áp dụng quy trình hiện đại khi làm phần mềm cho hệ thống nhúng

Một hoạt động kiểm nghiệm ý tưởng thiết kế phần mềm tại AgriConnect. Một số sản phẩm điện tử tại AgriConnect là kết quả của sự hợp tác, trong đó đối tác làm một module, AgriConnect làm một module và ghép với nhau. Trước khi bắt tay vào việc thì AgriConnect sẽ đề xuất API để 2 module trao đổi lệnh, dữ liệu với nhau, thường là phía đối tác sẽ lập trình ARM, AgriConnect thì lập trình ESP8266/ESP32.

Dù là lập trình cho thiết bị nhúng nhưng AgriConnect vẫn tổ chức một cách bài bản: tối đa module hóa các chức năng của phần mềm, cắt phần mềm ra những thư viện độc lập để có thể tái sử dụng. Ví dụ ở phần phân tích dữ liệu trao đổi với module ARM thực ra là xử lý chuỗi, không phụ thuộc vào phần cứng (vi điều khiển) cụ thể nên sẽ được tách ra thành thư viện. Việc tách ra thành thư viện trung tính này có một cái lợi nữa là, trong khi đối tác chưa làm xong thiết bị để có thể test thì phần code thư viện đó được viết và test thẳng trên PC.

A Rust code

Trong hình là lúc mình đang viết những dòng code đầu tiên để kiểm nghiệm ý tưởng thiết kế API có tốt không, và mình chọn Rust để viết! Viết bằng Rust có cái lợi là, vì là một ngôn ngữ hiện đại, công cụ đi kèm hiện đại nên có một số cấu trúc viết nhanh gọn hơn C, hỗ trợ unittest built-in luôn. Với C thì phải chọn lựa thư viện ngoài để viết unittest, rồi thêm việc setup rườm rà cho unittest (trong khi với Rust thì chỉ cần lệnh "cargo test" là đủ).

Tuy nhiên một điều đáng buồn là sau khi kiểm nghiệm ý tưởng xong thì mình vẫn phải chuyển qua C để viết code thật, vì lý do trình biên dịch của Rust chưa hỗ trợ biên dịch cho ESP8266, ESP32. Có điều vì tư tưởng "thư viện trung tính" nên code C đó vẫn dùng để chạy, test, debug trên PC được, trước khi ráp vào code dành cho ESP8266/ESP32.

Website này sử dụng Disqus cho comment. Nếu bạn không thấy các comment dưới đây, có lẽ Disqus đang bị chặn. Bạn cần đổi DNS.
comments powered by Disqus