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

C AVR - Jak stworzyć wielojęzykowe menu w pamięci flash?

jacky_cy 18 Lut 2016 23:36 1146 8
REKLAMA
  • #1 15449757
    jacky_cy
    Poziom 11  
    Witam,

    Już trochę główkuję nad optymalnym rozwiązaniem, ale jak to czasami bywa.. brak wiedzy, pomysłu :)

    Otóż korzystam z rozwiązania menu, którego zarówno struktura jak i "teksty" są umieszczone w pamięci flash...

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Jednakże potrzebowałbym stworzyć takie menu w którym użytkownik wybiera sobie język i myślałem żeby rozwiązać to w taki sposób, aby każdy z tekstów był tablicą dwuwymiarową...

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Niestety to nie będzie działać, a chciałem tylko zobrazować o co mi chodzi. Zależy mi żeby "całe" menu było we flashu, a za bardzo nie mam pomysłu (jeżeli to w ogóle możliwe) jak użytkownik ma zmienić język w taki sposób żeby wybrać które elementy tablicy maja być wyświetlane...

    Bardzo proszę o pomoc.
  • REKLAMA
  • #2 15449772
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • Pomocny post
    #3 15449798
    tadzik85
    Poziom 38  
    Poszukaj na forum mojej implementacji menu. Bez struktur, ale zmiana języka była by banalna.
  • #4 15449832
    jacky_cy
    Poziom 11  
    tadzik85 napisał:
    Poszukaj na forum mojej implementacji menu. Bez struktur, ale zmiana języka była by banalna.


    To prawda jak patrzę na Twoją implementację to dałoby radę... Ale w przypadku który opisałem jeśli struktura menu jest w flashu to nic się nie zrobi za bardzo?
    Jakby udało się może jakąś wskazówkę co tam można jeszcze zmodyfikować to byłbym wdzięczny. W sumie byłoby to dla mnie najmniej inwazyjne ponieważ kod już prawie gotowy... to dodanie języków to miała być wisienka na torcie a tu chyba zapowiada się jeszcze trochę pracy nad zmianą całego menu...
  • REKLAMA
  • Pomocny post
    #5 15450285
    idepopizze
    Poziom 33  
    @jacky_cy
    A nie mógłbyś mieć 3 oddzielnych z językami?
    Fabrycznie wybrany powiedzmy angielski.
    W eepromie trzymasz nr tej którą wybrał użytkownik.
  • #6 15450511
    jacky_cy
    Poziom 11  
    @idepopizze

    Chyba tak zrobię... Problem z tym, że jak dojdą jeszcze z 2 języki to kodu będzie od groma!

    Jak nic nie wymyślę to najwyżej w międzyczasie pomyślę nad implementacją menu pomysłu tadzika.


    po prostu szukałem pomysłu na zapis stałej... nawet jeżeli miałoby się to wiązać z resetem programu czyli:
    - wybierz język (0-3)
    - zapisz stałą do flash: language = 3;
    - reset programu.
  • Pomocny post
    #7 15450523
    tadzik85
    Poziom 38  
    jacky_cy napisał:
    @idepopizze

    Chyba tak zrobię... Problem z tym, że jak dojdą jeszcze z 2 języki to kodu będzie od groma!

    Jak nic nie wymyślę to najwyżej w międzyczasie pomyślę nad implementacją menu pomysłu tadzika.


    po prostu szukałem pomysłu na zapis stałej... nawet jeżeli miałoby się to wiązać z resetem programu czyli:
    - wybierz język (0-3)
    - zapisz stałą do flash: language = 3;
    - reset programu.



    Uprość tą przeróbkę. Napis trzymaj w strukturze jako index tablicy (dla umilenia jako enum) A i miej wskaźnik na tablicę napisów danego wybranego języka.
  • REKLAMA
  • Pomocny post
    #8 15451747
    tmf
    VIP Zasłużony dla elektroda
    jacky_cy napisał:

    Jednakże potrzebowałbym stworzyć takie menu w którym użytkownik wybiera sobie język i myślałem żeby rozwiązać to w taki sposób, aby każdy z tekstów był tablicą dwuwymiarową...

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Niestety to nie będzie działać, a chciałem tylko zobrazować o co mi chodzi. Zależy mi żeby "całe" menu było we flashu, a za bardzo nie mam pomysłu (jeżeli to w ogóle możliwe) jak użytkownik ma zmienić język w taki sposób żeby wybrać które elementy tablicy maja być wyświetlane...

    Bardzo proszę o pomoc.


    A dlaczego to miałoby nie działać? Po prostu jako tekst związany z daną pozycją menu dajesz wskaźnik do tablicy, a w programie masz zmienną globalną określającą nr języka (indeksu do tablicy tekstów). Stąd też w menu będzie wskaźnik do txt1, a przy wyświetlaniu bierzesz ten wskaźnik i pobierasz z tablicy tekst. Czyli zamiast w liście menu pisać txt1[N] (co nie zadziała), robisz to w funkcji odczytującej tekst. Jedyna wara to to, że na sztywno rezerwujesz miejsce, równe co najmniej najdłuższemu opisowi razy liczba języków. Można to ominąć stosując tablicę wskaźników na teksty.
  • #9 15468679
    jacky_cy
    Poziom 11  
    Bardzo dziękuję za wskazówki! :)
REKLAMA