Hirdetés

Új hozzászólás Aktív témák

  • Teasüti

    nagyúr

    válasz Janos250 #10900 üzenetére

    Ez is egy full-fledge firmware, ami rohadt hosszú.
    Ráadásul C-ben írták Atmel328-ra. :U
    Nekem kb annyit kéne látnom, hogy hogy írják meg azt az egy ciklust, ami beolvassa a Serial stream-et és kiválogatja a switch case-be a szavakat. Úgy 5-10 sallangmentes sorról lehet szó. Viszont Marlin-ban is ez szanaszét van dobálva. Illetve a parser lib ott is túl van bonyolítva. Mire abból kihámozom a lényeget... :(

    Jelenleg ennyim van:
    for (byte i = 0; i <= messageSize; i++) {
    if (isAlpha(Message[i]) || isPunct(Message[i])) {
    switch (Message[i]) {
    case 'R':
    parameter = atoi(& Message[i + 1]);

    Ez elég arra, hogy végig iterálja a stream-et és ahol betűt talál, ott veszi a betű után lévő paramétert. Majd iterálja tovább, amíg a végére nem ér.
    Ez így gyönyörűen beolvas egy "R255G255B255\n" üzenetet így egyben vagy elválasztókkal, mindegy.
    Viszont nincs annyi betű az ábécében, amennyi nekem kéne. Így kénytelen vagyok átállni vmi G-kódos rendszerre, ahol nem egy szót kell csak értelmezni hanem mondatokat. Tehát mondjuk bejön, hogy "G01", akkor várható, hogy lesz még utána két-három paraméter is: "G01 X0 Y0\n".
    És ezt kellene valahogy megoldanom, hogy a parancsszóhoz kapcsoljam a paramétereket is.
    Ehhez kell vmi look-ahead parsing algoritmus, ami pár sor lehet, de még nem láttam rá tömör példát.
    És ha lehet, akkor nem szeretném órákig bogarászni egy hatalmas forráskódban. :B
    Már rászántam egy kis időt a Marlin elemzésére, és nem jutottam vele messzire.
    Ekkora kódban még a kereső se működik, mert annyi találat van mint a qrva élet... :U

Új hozzászólás Aktív témák