Mesin status pemrograman tertanam


8

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?


Saya akan tinggal jauh dari Boost MSM (dan template C ++ secara umum) karena mereka meledakkan ukuran kode dengan sangat cepat.
Jms

Ada beberapa Gotcha lainnya di C ++ yang harus diperhatikan ...
Matt Young

@ jms Itu seperti mengatakan bahwa penebang kayu harus menjauh dari alat tajam dan menggunakan palu sebagai gantinya karena dengan alat tajam dia mungkin memotong dirinya sendiri. Templat adalah alat yang tajam, yang - bila digunakan dengan cara yang benar - dapat meningkatkan kecepatan dan mengurangi ukuran kode Anda, terutama untuk pengontrol mikro kecil. Ketika digunakan dengan cara yang salah - yah, alat apa pun dapat digunakan dengan cara yang salah!
Wouter van Ooijen

Jawaban:


8

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.


Saya berharap bahwa pengaruh pada kinerja kerangka mesin negara (apakah DIY atau dari beberapa perpustakaan) - yang bertentangan dengan tindakan - sangat kecil. Jadi seperti kata Adam: kode untuk keterbacaan pertama. Yang kedua. Dan ketiga. (A di posisi 10: profil. Optimalisasi lokal jauh di bawah itu.)
Wouter van Ooijen

3

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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.