www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 
Sponsored by SiOL

Optimiziranje arduino code
Pojdi na stran Prejšnja  1, 2
 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Jaka57
Moderator
Moderator



Pridružen-a: Ned 12 Dec 2004 21:47
Prispevkov: 5133
Aktiv.: 30.55
Kraj: Grosuplje

PrispevekObjavljeno: Ned Dec 09, 2018 8:40 pm    Naslov sporočila:   Odgovori s citatom

Ja, vrne napako.
Toda tole pa prenese brez težav:

Koda:
const char Maximalni_tok='A';
const char Prvi_izpis='B';
const char Drugi_izpis='H';

switch (nekaj){

case Maximalni_tok:
        kar nekaj;

case Prvi_izpis:
        karnekaj;

cse Drugi_izpis:
       karnekaj;

default:
       karnekaj;
       break;
}

_________________
Lp, Jaka
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
tilz0R
Član
Član



Pridružen-a: Čet 31 Maj 2012 15:39
Prispevkov: 854
Aktiv.: 9.49
Kraj: Črnomelj

PrispevekObjavljeno: Pon Dec 10, 2018 8:30 am    Naslov sporočila:   Odgovori s citatom

Mnogo bolje.

Jaka57 je napisal/a:
tilz0R je napisal/a:
...Spremenljivka ne more biti del case stavka v C++, ker ni konstantna vrednost. Razen, če bo const ali constexpr.

Drži!

_________________
Knowledge sharing is caring.
majerle.eu | stm32f4-discovery.net
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
gustinmi
Član
Član



Pridružen-a: Tor 26 Feb 2019 13:41
Prispevkov: 14
Aktiv.: 1.77

PrispevekObjavljeno: Tor Feb 26, 2019 3:41 pm    Naslov sporočila:   Odgovori s citatom

Zares elegantno lahko to rešiš z t.i. frame-ingom in objektno orientirano rešitvijo. Frames ali okvirji so lahko bazirani na dolžini, in se sestojijo iz: UKAZA in podatka.
Seveda morajo biti vsi ukazi enako dolgi, ali pa zapolniti manjkajoče dele z 0 paddingom.

Koda tako čaka na prve štiri znake (imax, umax, tx00), nato pa se v if zanki zgolj odloči, ali bo naredila objekt tipa imaxHandler ali umaxHandler. Koda objekta potem poskrbi za prebranje podatka in izpis na Serial.

Arduino IDE ima zelo dobro podporo za tovrstno programiranje, saj se v času prevajanja prevedejo kot celota vse podprte skripte ki so v direktoriju projekta. Podrobnosti so v : https://github.com/arduino/Arduino/wiki/Build-Process

Drugače bo pa vse lepše že z ena namensko funkcijo :

Koda:
void printCommandData(String commandName, String sprejem){
 
   String sprejemToPrint = sprejem.substring(sprejem.indexOf(commandName)+4, sprejem.indexOf(commandName)+7);     

   Serial.println (commandName + sprejemToPrint);                                   

}

// in njen klic

if (sprejem.indexOf("imax")>-1){           
  printCommandData("imax", sprejem);
}

// .. in tako naprej
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Arduino sekcija Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Pojdi na stran Prejšnja  1, 2
Stran 2 od 2

 
Pojdi na:  
Ne, ne moreš dodajati novih tem v tem forumu
Ne, ne moreš odgovarjati na teme v tem forumu
Ne, ne moreš urejati svojih prispevkov v tem forumu
Ne, ne moreš brisati svojih prispevkov v tem forumu
Ne ne moreš glasovati v anketi v tem forumu
Ne, ne moreš pripeti datotek v tem forumu
Ne, ne moreš povleči datotek v tem forumu

Uptime: 174 dni


Powered by phpBB © 2001, 2005 phpBB Group