Saya sedang melihat menerapkan mesin negara hingga non-trivial (ditentukan sebagai statistic hierarki UML) pada MCU 32-bit dengan gcc.
Apakah ada aturan praktis yang berfungsi lebih baik dan yang kurang berhasil? Usus saya mengatakan bahwa implementasi berbasis switch (atau bahkan goto dihitung) harus sedikit lebih berkinerja sementara tabel transisi berbasis fungsi-pointer umumnya dianggap lebih dapat dipertahankan.
Juga: apakah ada yang mengevaluasi Boost MSM untuk aplikasi yang disematkan? Saya tahu bahwa Boost MSM umumnya dipuji sebagai sangat efisien, tetapi untuk aplikasi tertanam efisiensi mungkin diukur secara berbeda daripada di dunia pemrograman PC.
Apakah ada yang tahu seperti apa bentuk mesin mesin MSM yang dikompilasi? Lebih mirip saklar jumptable atau lebih seperti tabel transisi fungsi pointer? Apakah menggunakan alokasi memori dinamis atau dapatkah digunakan secara statis?
Jawaban:
Saya akan terkejut jika ada perbedaan besar pada MCU 32-bit. Menghindari cabang bersyarat bisa menghemat beberapa siklus, tetapi apakah Anda benar-benar akan berhasil atau gagal berdasarkan beberapa siklus? Jumlah status tunggu pada RAM dan ROM Anda mungkin setidaknya sama pentingnya. Begitu juga set instruksi CPU.
Optimalisasi prematur adalah akar dari semua kejahatan. Mulailah dengan apa yang lebih mudah diimplementasikan dan pelihara, dan hanya optimalkan jika perlu berdasarkan profil.
sumber
Untuk satu implementasi UML pada embedded, lihat kerangka QP -> http://www.state-machine.com . Varian C dan C ++ tersedia. GUI (QM) yang menyertainya bahkan memungkinkan untuk menggunakan notasi UML. Kerangka kerja ini cukup kecil untuk dijalankan di Arduino; 32-pahit itu mudah.
sumber