Det är ju lite konstigt... prog. lösning
Postat: 31 juli 2024, 09:24:17
För en del år sedan (18 mars 2015) hade jag en tråd (viewtopic.php?t=76727) där jag funderade på hur jag kunde skapa 2 tabeller ur en enkel "tabell" data.
Inkommande kommando-sträng kommer via en seriell port och vid '\n' kallas kommando-dekoderen.
Exempel: "SET TIME 12:34:56\n".
Det rör sig om text-kommandon i en sträng där de olika ord i ett kommando kan definieras i en "tabell" och det sedan automatisk skapas 2 tabeller:
* 1 tabell med kodorden i textformat. Tänk const char* Comm_Words["SET", "GET", "TIME", "DATE" osv.]
* 1 tabell med namngivna enum. Tänk enum(Index_SET, Index_GET, Index_TIME, Index_DATE osv).
Att skapa dessa tabeller manuellt är i grunden enkelt - men när det blir tillägg, justeringar eller liknande, VILL det på något tidpunkt bli ett fel så att de 2 tabeller inte passar ihop.
Nu - i mitt nuvarande jobb - har jag återigen haft STOR bruk av detta, denna gång med 60 olika kommando-ord samt kommandon med mellan 1 och 4 kommandoord samt '?' eller värden efter.
Så tack till alla som svarade i den tråd och speciellt till johano vars ide jag har använd - och återanvänd - till detta.
Orsaken är att jag inte har något problem med att hitta kommando-orden i textsträngen, jag kan enkelt jämföra det inkommande ord med tabellen med orden i (skriver orden alfabetisk för snabbast möjlig steg till nästa kommando-ord vid mismatch), men som jag har sett i detta nuvarande projekt SKER det stavfel när man ska skriva samma ord fler gångar.
Den förra programmör har bokstavligen testat de olika kombinationer vid att skriva en strncmp(<kommando-ord>, <pekare till inkommande text>, strlen(kommando-ord>)==0 upprepande gångar.
Detta har svald så mycket flash-minne så att vi närmar oss ett kritisk punkt. I svaren på dessa kommandon skrivs kommando-orden IGEN.
Numera har jag kolla på indexeringen i kommando-ord kedjan och då återanvänder jag de kommando-ord som redan finns till att skapa svaren.
Ex: Comm_Words[Index_SET] + " " + Comm_Words[Index_TIME] + ": " + tiden i ascii.
Jag inbillar mig även att vid att omvandla ett ord till dess index i tabellen kan jag spara lite tid och vid att bara ha texterna ett enda ställe sparar jag en del plats.
Inkommande kommando-sträng kommer via en seriell port och vid '\n' kallas kommando-dekoderen.
Exempel: "SET TIME 12:34:56\n".
Det rör sig om text-kommandon i en sträng där de olika ord i ett kommando kan definieras i en "tabell" och det sedan automatisk skapas 2 tabeller:
* 1 tabell med kodorden i textformat. Tänk const char* Comm_Words["SET", "GET", "TIME", "DATE" osv.]
* 1 tabell med namngivna enum. Tänk enum(Index_SET, Index_GET, Index_TIME, Index_DATE osv).
Att skapa dessa tabeller manuellt är i grunden enkelt - men när det blir tillägg, justeringar eller liknande, VILL det på något tidpunkt bli ett fel så att de 2 tabeller inte passar ihop.
Nu - i mitt nuvarande jobb - har jag återigen haft STOR bruk av detta, denna gång med 60 olika kommando-ord samt kommandon med mellan 1 och 4 kommandoord samt '?' eller värden efter.
Så tack till alla som svarade i den tråd och speciellt till johano vars ide jag har använd - och återanvänd - till detta.
Orsaken är att jag inte har något problem med att hitta kommando-orden i textsträngen, jag kan enkelt jämföra det inkommande ord med tabellen med orden i (skriver orden alfabetisk för snabbast möjlig steg till nästa kommando-ord vid mismatch), men som jag har sett i detta nuvarande projekt SKER det stavfel när man ska skriva samma ord fler gångar.
Den förra programmör har bokstavligen testat de olika kombinationer vid att skriva en strncmp(<kommando-ord>, <pekare till inkommande text>, strlen(kommando-ord>)==0 upprepande gångar.
Detta har svald så mycket flash-minne så att vi närmar oss ett kritisk punkt. I svaren på dessa kommandon skrivs kommando-orden IGEN.
Numera har jag kolla på indexeringen i kommando-ord kedjan och då återanvänder jag de kommando-ord som redan finns till att skapa svaren.
Ex: Comm_Words[Index_SET] + " " + Comm_Words[Index_TIME] + ": " + tiden i ascii.
Jag inbillar mig även att vid att omvandla ett ord till dess index i tabellen kan jag spara lite tid och vid att bara ha texterna ett enda ställe sparar jag en del plats.