logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Język C dla Atmeli: ograniczenie ilości wpisów w tablicy const char

18 Paź 2014 03:02 1689 12
  • #1 14051095
    Konto nie istnieje
    Konto nie istnieje  
  • #2 14051102
    kspro
    Poziom 27  
    Jeśli wkleiłeś fragment prawdziwego źródła to sprawa jest chyba prosta: zamiast cmd3[ ] dopisałeś omyłkowo po raz drugi cmd2[ ] i naprawdę trudno powiedzieć dlaczego kompilator nie wywala tego jako błąd i co w tej sytuacji robi z tablicą cmds[ ], czy skraca jej długość, czy wsadza w nią jakieś głupie adresy, czy jeszcze coś innego.
  • #3 14051175
    Konto nie istnieje
    Konto nie istnieje  
  • #4 14052321
    vonar
    Poziom 28  
    W tej wersji:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    teoretycznie powinno być wszystko w porządku. Bez pełnych źródeł trudno powiedzieć, w czym tkwi problem.

    A to:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    nie ma prawa zadziałać z strcmp_P (i prog_char tu nie pomoże).
  • #5 14059401
    Konto nie istnieje
    Konto nie istnieje  
  • #6 14059693
    BlueDraco
    Specjalista - Mikrokontrolery
    Stawiam albo na jakiś subtelny błąd w efektach atrybutu PROGMEM, albo na błędne działanie funkcji GetToken(). Spróbuj wyświetlić tekst polecenia przed porównaniem go z tablicą nazw poleceń.

    Co do obsługi poleceń z argumentami - sporo łatwiej robi się to przy zastosowaniu notacji polskiej odwrotnej - trzymasz mały stosik argumentów liczbowych i wykonujesz polecenia na ostatnich z nich - żadnej kontekstowości, rozpoznawania poprawności argumentów itp. zbędnych wodotrysków powodujących komplikację kodu.
  • #7 14059836
    Konto nie istnieje
    Konto nie istnieje  
  • #8 14059999
    michalko12
    Specjalista - Mikrokontrolery
    Czyściłeś cały projekt?
  • #9 14060476
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #10 14060511
    vonar
    Poziom 28  
    Oj! Rzeczywiście, przecież tablica cmds też była PROGMEM, a nie była właściwie odczytywana (a palnąłem, że „powinno działać” :oops: ).

    PosepnyCzerep napisał:
    pytanie więc brzmi czy cmd? znajdują się w RAMie czy też w pamięci programu.
    Tylko w pamięci programu.

    vonar napisał:
    Ciekawe dlaczego to składowanie tablicy w pamięci programu nie działa właściwie. Może chodzi o to, że to jest jakby tablica znaków w tablicy znaków?
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    Jest tutaj odczyt cmds z pamięci RAM zamiast pamięci programu.

    Możesz zostawić cmds z PROGMEM i poprawić TranslateCommand:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #11 14060791
    Konto nie istnieje
    Konto nie istnieje  
  • Pomocny post
    #12 14060815
    vonar
    Poziom 28  
    PosepnyCzerep napisał:
    To nic nie daje.
    Fakt, zapomniałem "&". Powinno być:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Działanie dla dwóch elementów tablicy to rzeczywiście bardzo ciekawy przypadek.
  • #13 14060850
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA