Adakah yang mengirim kerangka kerja status QP untuk Arduino?

12

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.

Harley Mackenzie
sumber
Beri +1 pada komentar Jason S tentang memberi +1 untuk menyebutkan karakter negara QP. Oh, juga Star dan 1 satu topik ... penyebab kedengarannya groovy dan saya berharap untuk jawaban: P (maaf untuk spam, hanya dalam suasana hati yang lucu hari ini;))
cyphunk

Jawaban:

4

Saya akan menghindari hal semacam ini seperti wabah.

Sebagian besar perangkat lunak tingkat rendah "serius" yang saya temui adalah mesin negara dalam bentuk ini:

#include <stdio.h>

typedef enum
{
    STATE_INIT,     // Description
    STATE_RUNNING,  // Description
    STATE_COMPLETE  // Description
} state_t;

int main(void)
{
    state_t state = STATE_INIT; // setup the initial state

    while(1)
    {
        os_run(); // call the OS services (poll the UART, check buttons, etc.)

        switch(state)
        {
            case STATE_INIT:
                state = STATE_RUNNING;
                puts("init");
                break;
            case STATE_RUNNING:
                state = STATE_COMPLETE;
                puts("running");
                break;
            case STATE_COMPLETE:
                puts("complete");
                break;
        }
    }
    return 0;
}

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 :)

Toby Jaffey
sumber
1
Jangan lupa biaya lisensi untuk QP jika kode Anda adalah hak milik.
mjh2007
1
Perbaikan kecil pada kode mesin negara: sering membantu keandalan untuk mengubah keadaan antrian dan hanya pernah mengubah keadaan sebenarnya tepat sebelum pernyataan beralih. Dengan begitu Anda tidak perlu khawatir tentang gangguan yang mengubah status Anda menjadi STATE_INIT tepat setelah Anda berpikir Anda mengubahnya menjadi STATE_COMPLETE.
AngryEE
3

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.

Jay Atkinson
sumber
1

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.

mjh2007
sumber
1

ganti pernyataan kasus dengan array pointer fungsi

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