Dalam meninjau kemungkinan pendekatan untuk proyek pencatatan data saya, saya telah menemukan buku "Praktis UML statecharts di C / C ++" menjadi sangat menarik untuk pekerjaan yang lebih serius dengan Arduino. QP adalah keluarga kerangka kerja berbasis mesin ultra-ringan, open source, state untuk sistem embedded dan mereka mendistribusikan kode dan port untuk kerangka kerja mereka (GNU GPL2) di http://www.state-machine.com/ di mana mereka memiliki porta untuk AVR dan AVR mega menggunakan set alat WinAVR / Gnu C ++.
Meskipun header spesifik chip sesuai, apakah ada yang membuat file board BSP atau punya pengalaman dengan kerangka kerja ini? Saya baru mulai dengan buku ini, jadi komentar apa pun sangat saya hargai.
Jawaban:
Saya akan menghindari hal semacam ini seperti wabah.
Sebagian besar perangkat lunak tingkat rendah "serius" yang saya temui adalah mesin negara dalam bentuk ini:
Ada banyak pendekatan bagus lainnya dalam C / C ++, tapi itu bukan favorit saya.
Masalah besar dengan alat-alat seperti QP adalah bahwa seringkali sangat sulit untuk melakukan hal-hal yang tidak Anda inginkan. Jika Anda memilih untuk mengutak-atik kode secara manual, Anda harus mempertahankan kasing khusus selamanya.
Saya akan mengatakan, statecharts UML adalah alat yang fantastis untuk dokumentasi, pengajaran dan analisis. Tapi, tidak untuk pemrograman yang sebenarnya - ada banyak alat yang lebih baik untuk itu :)
sumber
Saya pribadi belum menggunakan kerangka / pustaka QP, karena lisensi GPL. Pada saat itu, saya tidak berpikir atasan saya siap untuk batuk adonan bagi saya untuk bereksperimen dengan HSM (mesin negara hierarkis) menggunakan QP. Saya harus menerapkan sendiri yang mirip dengan QP ketika saya refactoring mesin negara yang mengerikan yang mengambil ratusan baris kode seperti contoh Joby tetapi kali 1000. Desain lama yang dipinjam untuk mendapatkan fitur dalam menjalankan pada tenggat waktu yang ketat adalah rasa sakit yang mengerikan untuk dipertahankan. Saya takut mencoba menambahkan sesuatu yang baru karena takut merusak sesuatu yang lain.
Saya mendesain ulang kode menjadi HSM yang lebih masuk akal bagi saya secara pribadi tentang bagaimana sistem seharusnya berperilaku. Itu bekerja jauh lebih baik daripada yang bisa saya bayangkan. Jauh lebih mudah untuk memodifikasi dan memelihara kemudian saya bisa bermimpi. Saya bahkan harus mengulang sebagian besar mesin negara, karena perilaku yang tidak terduga dalam sistem. Jauh lebih mudah untuk memperbaikinya dengan kerangka yang saya buat, dan saya yakin itu akan semudah di QP. Kerangka kerja yang saya buat menjadi populer dan menyebar ke beberapa mesin negara kompleks lainnya di dalam basis kode kami.
Saya memang punya teman menerapkan kerangka kuantum menggunakan Java dalam robot yang bekerja dengan cukup baik. Itu adalah bagian dari algoritma pengambilan keputusan robot berdasarkan input tertentu. Itu adalah fit alami, mengingat keputusan yang harus diambil berdasarkan keadaan robot.
Apa yang saya pahami tentang keindahan QP adalah kemampuan untuk memiliki kerangka kerja siap pakai untuk desain alat berat yang dioptimalkan untuk prosesor Anda dan tidak harus bergantung pada alat KASUS yang mengeluarkan kode boilerplate yang tidak efisien. Tapi, saya hanya akan menggunakan QP jika Anda memiliki set set mesin negara yang rumit untuk mengimplementasikan yang menggambarkan desain Anda.
Jika semua yang Anda miliki adalah sesuatu yang sederhana seperti contoh Joby, maka lakukan saja seperti yang dijelaskannya. Tetapi jika Anda menemukan mesin negara Anda tumbuh dan berkembang dengan semua jenis pernyataan "jika lagi" melilit kondisi yang berbeda ... maka mungkin sudah waktunya untuk mencoba sesuatu seperti QP untuk memecahnya menjadi milik HSM.
sumber
Memperluas pada contoh Joby, cara yang lebih bersih untuk mengimplementasikan mesin negara yang sangat besar adalah dengan mengganti pernyataan kasus dengan array fungsi pointer. Kemudian Anda dapat mengisolasi semua kode untuk keadaan tertentu di dalam suatu fungsi. Saya telah menemukan bahwa menerapkannya dengan cara ini membutuhkan jauh lebih sedikit memori program.
sumber
Begitulah cara kerja item QP. Representasi status hanyalah penunjuk fungsi (ke fungsi untuk kondisi saat ini). Dalam C ++ itu bisa menjadi pointer ke fungsi anggota, tetapi pada dasarnya sama. Fungsi keadaan saat ini disebut dengan peristiwa, serta dengan beberapa peristiwa semu (masuk, keluar), salah satunya selalu tidak tertangani dan digunakan untuk menentukan keadaan sarang ketika melakukan transisi bersarang (QP mendukung mesin keadaan hierarkis).
Miro Samek mengatakan bahwa dia akan segera melakukan pelabuhan yang ditargetkan Arduino.
sumber