2 ta davlat mashinasini birlashtirish kerakmi?

Ushbu forumdan olingan oxirgi maslahatlardan foydalanib, loyihani qayta ishlash orqali "davlat mashinasi" mantig'ini qo'llashni istayman, chunki u isrof qilinadigan protsessor vaqtini va parametrlarni ishlatishni kamaytiradi.

davlat qurilmasidan kirishni boshlash uchun" > http://www.gammon.com.au/statemachine , barcha maxsus tekshiruv belgilarining barcha hodisalar yuzaga kelishi mumkin bo'lgan barcha voqealar yuzaga kelishi mumkin bo'lgan barcha xilma-xil kombinatsiyalarini aks ettiradi - asosan 2 o'lchovli jadval.

DOS buyruq qatori formatiga o'xshash " buyruqlar [parametrlar] [variantlar] " formatida ketma-ket kiritishni qayta ishlashga maqsadni aniqladim, masalan: DIR "c : \ dastur fayllari "/ w/s . Bu menga katta Buffer [] va Header [] mag'lubiyatiga muhtoj bo'lib qoladi va har qanday ajralishdan saqlaydi,

Shuning uchun mening hodisani nazorat qiluvchi belgilar: bo'sh joy, vergul, bir martalik taklif, ikkita taklif, oldinga slash, Carraige Return va mening "holatlarim" NULL, COMMAND, PARAMETER, OPTIONS

OPTIONS holati, vergul yoki bo'sh joy ajratuvchi yoki Carraige Return bu variant mos ravishda ishlashga, shuning uchun o'z qiymatini tan olingan o'zgaruvchiga saqlashga sabab bo'ladigan vaqtinchalik variant [] qatoriga qo'shiladi.

Buyruqlar va PARAMETERning "davlatlari" bir yoki ikkita tirnoq ichida joylashgan bo'lsa (shu bilan tirnoqlarni juftlikda ishlatilganda mag'lubiyatning bir qismi sifatida foydalanishga ruxsat berilsa) tegishli buyruqlar [] va parametrlari [] boshqa turdagi).

Shunday qilib, buyruq, parametr va OPTIONS holatini o'zgartirish uchun NoQuotes, SingleQuotes va DoubleQuotes uchun zarur bo'lgan ikkinchi davlat mashinasi ko'rinadi.

Neyronlardan qochib ketadigan joy bu erda, chunki men ko'rayapman, bu juda murakkab 2 mashinali-davlatli 3 o'lchovli panjaradir.

Lekin men buni amalga oshirishning juda amaliy usuli bo'lishi kerak deb o'ylayman, chunki u protsessor kuchi va xotira mavjudligi tovuqlar tishidan ko'ra qiqroq bo'lgan vaqtga to'g'ri keladigan deyarli barcha buyruqbozlik yordam dasturlarining markazida yotadi va o'sha eski DOS buyruq- chiziqli kommunal xizmatlarning mimimal darajasiga ega bo'lishlari kerak edi.

Shunday qilib, har qanday kishi buyruq satri formati formatini olish uchun maqbul modelni (mashina-holati yoki boshqacha) taklif qilishi mumkinmi?

UPDATE

Oh azizim ... Men bundan oldin ko'rmagan boshqa bir murakkablikni ko'rdim, ya'ni "/" variantlari har doim oxirida bo'lishi shart emas, ya'ni variantlar davlatga qaytib kelishi bilan farq qilinsa, variantlar holati chegarachilar tomonidan o'zgartirish variantlari davlat o'zgarishiga qadar davlatga qaytib kelishlari kerak (umid qilamanki, bu bir ma'no beradi). Yaxshiyamki, o'ylaymanki, u rasm chizish uchun qaytib keldi, chunki bu yondashuv juda murakkab bo'lgan ko'rinadi, chunki 2 ta javob allaqachon taklif qiladi.

1
Savol juda ko'p Arduino, chunki men keladigan ketma-ketlikni o'qib, komandani buyruqqa qo'shib, ixtiyoriy parametr bilan qo'shimcha ixtiyoriy nazorat-variantlarni belgilashni xohlayman, shuning uchun DOS buyruq satrini eslatish kerakli ketma-ket formatdagi sintaksis namunasini taqdim etish edi.
qo'shib qo'ydi muallif R.M., manba
"Arduino" ning qaysi buyruqlari va "parametrlari" kiradi, masalan: "LED1 ON" yoki "IRSEND" NEC 0xFFEE9123 32 ". Variantlar arduino-to-arduino/info (masalan,/c (hecksum) = nnn,/l (ength) = nnn,/s (ource) = nnn va boshqalar. Bir vaqtning o'zida qo'shimcha baytni ajratish kerak emas, balki, tezda buyruq yoki parametrlarni yoki variantlarni yuborishingiz mumkin.
qo'shib qo'ydi muallif R.M., manba
O'zaro sheriklik munosabatlarining umumiy shakli shundaki, o'zaro ta'sirlarni o'z davlatlariga kengaytirishdir. ya'ni PARAMETRE va boshqalar SingleQuotes_PARAMETER DoubleQuotes_PARAMETER, ularning ishlashi bir xil kodni bo'lishishi mumkin. github.com/Traumflug/Teacup_Firmware/blob/master/gcode_parse‌; Katta misol uchun. Bundan tashqari, bu juda keng (biz uchun sintaksisi yo'q) va, albatta, Arduino yo'naltirilgan forum uchun mavzu emas.
qo'shib qo'ydi muallif Dave X, manba
Davlat mashinasi deb o'ylashning yana bir usuli - bu sizning davlat makoningiz {parametr, parametr [], OPTIONS [], va hokazo) bilan davlat parametrlarining ko'p o'lchovli vektori.
qo'shib qo'ydi muallif Dave X, manba
Bir necha umumiy DOS sintaksisi yoki ma'lum bir buyruq uchun juda cheklangan sintaksisi? Muayyan buyruqlar bilan cheklangan miqdordagi parametr va parametr mavjud va sizning/sintaksik tahlilchi/davlat mashinangiz ularni Teacup'ga o'xshash tarzda/process/state parametrlariga o'zgartirishi mumkin.
qo'shib qo'ydi muallif Dave X, manba
Men buyruqni oxirgi variantning so'nggi xarakterini ajratib bo'lmaguncha jo'natolmaysiz deb o'ylardim, shuning uchun Buyruqlar, parametrlar va variantlar faqatgina qayta ishlashning keyingi bosqichi uchun parametrlarning vektori bo'lishi kerak. Ko'chib o'tishdan oldin ularning hammasini to'plashingiz kerak. "LED1 ON" ning "LED1" buyrug'i bormi? /// Yangilangan Q uchun '\ n' parametr holatini tozalab, buyruqlar holatini/oneshot ni ishga tushirish uchun tizimning holatini baytlarni ajratishdan o'zgartiradi, masalan, github.com/Traumflug/Teacup_Firmware/blob/master/… # 390 ga kiring.
qo'shib qo'ydi muallif Dave X, manba

2 javoblar

Takliflar: - davlat-mashinasozlikning merosxo'ri bir katta, tekis davlat mashinasiga "moosh" (ya'ni, texnik ma'no bor!) Ga harakat qilmang. Shunday qilib, jinnilik yotadi. Masalan, siz o'zingizning {NULL, COMMAND, PARAMETER, OPTIONS} davlat mashinangizni saqlab qo'ying va shu davlatlardan birida oddiy mag'lubiyat to'plamidan ko'proq narsani talab qiladigan joyda, siz kutgan kiritish turiga mos keladigan SM bu nuqta - raqam, tirnoqli satr, parametr identifikatori va h.k.

3
qo'shib qo'ydi
Shuningdek, siz o'rta darajali, turli xil kirish usullarini qo'llashi mumkin bo'lgan universal parser sifatida qarashingiz mumkin, lekin asosiy SM dan alohida. Siz yaxshi bilasiz, siz bir necha SM hiyerarşisini tezkor tarzda sketchga aylantirasiz ("kodlash" da emas, balki "aylana va strelkalarda" kabi "eskiz").
qo'shib qo'ydi muallif caryden, manba
O'ylaymanki, tushunaman (ehtimol, jinnilikdan qochish uchun kech bo'lishi mumkin, negaki, davlat mashinasi allaqachon mening boshimga "moylangan" bo'lishi mumkin deb o'ylayman). Aytganingizdek, NULL, COMMAND, PARAMETER dan foydalanadigan davlatlar sifatida foydalaning. NoQuotes, SingleQuotes, Double-Quotes va ehtimol Options bir davlat mashinasini o'zini oqlashi mumkin bo'lsa-da, ularni faqat asosiy davlat mashinasi ichida alohida jarayon deb hisoblash mumkin.
qo'shib qo'ydi muallif R.M., manba

Shaxsan men Nikning davlat mashinasi bilan ajralib turadigan buyruqlar qatorini tuzishni maslahat bergan deb o'ylamayman. Uning misoli, buyruq satriga asoslangan davlat mashinasini o'zgartirish haqida Men ba'zi buyruqlar satrini tahlil qildim va men buni hech qachon davlat mashinasidan foydalanmadim. Men buni davlat mashinasidan foydalanishga maslahat bermayman Oddiy mag'lubiyatni ajratish juda oson.

Edit To answer the remark below:
I would not advice to go byte by byte. I'd advice to go the line by line way. I have written a library to do read line by line and an article on how that one works. http://blog.baeyens.it/#post16
Here a link to the lib https://github.com/jantje/libraries/tree/master/SerialCommunicator.
Here is a parcing code example. It is not so interesting for you as I have it done in a stage by stage way in a very high level way of coding. https://github.com/jantje/libraries/blob/master/SerialBridgeCommunicator/SerialBridgeCommunicator.cpp#L21

Basically the algorithm is=
1 Take the first word;
2 identify the word.
3 If the command is complete ->do it
else Send the rest of the string to a specialized piece of code. (which has the same algorithm)

3
qo'shib qo'ydi
Men ehtiyojlarim Nicks misoli bilan bir xil bo'lgan deb o'ylardim - bir vaqtning o'zida ketma-ket keladigan baytni o'qib, tezda buyruq yoki param yoki variantlarni yuborish uchun, keyinchalik ularni karraig-qaytarishni o'qib chiqqandan so'ng, kerak bo'ladigan ishni bajarish kerak deb o'ylardim. Keyinchalik katta bufer magistr. Lekin oy uchun tortishishimning hech bir nuqtasi yo'q - siz ilgari buyruq qatorini ajralish qilmoqchi ekanini eslatgan edingiz ... Sizga tegishli oqim sxemasi yoki algoritmiga ega bo'larmidingiz?
qo'shib qo'ydi muallif R.M., manba
Byte baytiga borishni maslahat bermayman. Hatni chiziq bilan yo'naltirishga maslahat beraman.
qo'shib qo'ydi muallif jantje, manba