Máy trạng thái lập trình nhúng


8

Tôi đang xem xét triển khai một máy trạng thái hữu hạn không tầm thường (được chỉ định là statechart phân cấp UML) trên MCU 32 bit với gcc.

Có bất kỳ quy tắc ngón tay cái nào hoạt động tốt hơn và những gì hoạt động kém hơn? Ruột của tôi nói rằng việc triển khai dựa trên chuyển đổi (hoặc thậm chí là tính toán goto) nên có hiệu suất cao hơn một chút trong khi bảng chuyển đổi dựa trên con trỏ hàm thường được cho là dễ bảo trì hơn.

Ngoài ra: có ai đã đánh giá Boost MSM cho các ứng dụng nhúng chưa? Tôi biết rằng Boost MSM thường được ca ngợi là rất hiệu quả, nhưng đối với hiệu quả của các ứng dụng nhúng có thể được đo lường khác với thế giới lập trình PC.

Có ai biết máy công cụ trạng thái biên dịch của MSM trông như thế nào không? Giống như một công tắc có thể jumptable hoặc giống như một bảng chuyển đổi con trỏ hàm? Nó sử dụng phân bổ bộ nhớ động hay nó có thể được sử dụng tĩnh?


Tôi sẽ tránh xa các mẫu Boost MSM (và các mẫu C ++ nói chung) vì chúng làm tăng kích thước mã rất nhanh.
JMS

Có một số vấn đề khác trong C ++ để nhận biết ...
Matt Young

@jms Điều đó giống như nói rằng một người tiều phu nên tránh xa các công cụ sắc bén và sử dụng búa thay vì với các công cụ sắc bén, anh ta có thể tự cắt. Mẫu là một công cụ sắc nét, mà - khi được sử dụng đúng cách - có thể tăng tốc độ và giảm kích thước mã của bạn, đặc biệt là đối với các bộ điều khiển vi mô nhỏ. Khi sử dụng sai cách - tốt, bất kỳ công cụ nào cũng có thể được sử dụng sai cách!
Wouter van Ooijen

Câu trả lời:


8

Tôi sẽ ngạc nhiên nếu có sự khác biệt lớn trên MCU 32 bit. Tránh các nhánh có điều kiện có thể giúp bạn tiết kiệm một vài chu kỳ, nhưng bạn thực sự sẽ thành công hay thất bại dựa trên một vài chu kỳ? Số lượng trạng thái chờ trên RAM và ROM của bạn có lẽ ít nhất là quan trọng. Tập lệnh CPU cũng vậy.

Tối ưu hóa sớm là gốc rễ của mọi tội lỗi. Bắt đầu với những gì dễ thực hiện và duy trì hơn, và chỉ tối ưu hóa khi cần thiết dựa trên hồ sơ.


Tôi hy vọng rằng ảnh hưởng đến hiệu suất của khung máy trạng thái (cho dù là DIY hoặc từ một số người tự do) - trái ngược với các hành động - là rất nhỏ. Vì vậy, như Adam nói: mã cho dễ đọc đầu tiên. Một giây. Và thứ ba. (A ở vị trí thứ 10: hồ sơ. Tối ưu hóa cục bộ nằm dưới mức đó.)
Wouter van Ooijen

3

Đối với một triển khai UML trên nhúng, hãy xem khung QP -> http://www.state-machine.com . Cả hai biến thể C và C ++ đều có sẵn. GUI đi kèm (QM) thậm chí cho phép mã bằng ký hiệu UML. Khung này đủ nhỏ để chạy trên Arduino; 32-bitter rất dễ dàng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.