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

Inicjacja tablicy uint8_t w pliku *.lss: przypisywanie wartości domyślnych i odczyt z PORTB

robiw 04 Wrz 2022 16:30 495 3
REKLAMA
  • #1 20174866
    robiw
    Poziom 26  
    Witajcie.
    Prozaiczna, wydawałoby, się rzecz. Inicjuję zmienną tablicową wartościami domyślnymi, ale nie mogę znaleźć w pliku disasemblacji tych wartości (w sekcji text, ale i w ogóle gdziekolwiek w pliku). Nie tak to się odbywa? Pytam z ciekawości. robiw

    PS.
    Powiedzmy, taki prosty program:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 20175335
    ex-or
    Poziom 28  
    Wartości początkowe zmiennych inicjowanych są przechowywane we FLASH i kopiowane do RAM przez kod startowy (przed wejściem do main). W pliku .lss samych wartości nie widać. Widać kod odpowiedzialny za kopiowannie, adresy i wielkość bloku danych. Adresy i wielkość widać też w pliku .map (symbole __data_start__ i __data_end__). Znając adresy zawartość można sobie podejrzeć w pliku BIN.
  • REKLAMA
  • #3 20175456
    jvoytech
    Poziom 21  
    W listingu powinien być mniej więcej taki fragment kodu kopiujący dane z Flash do RAM przed wywołaniem funkcji "main":
    Kod: AVR assembler
    Zaloguj się, aby zobaczyć kod

    Instrukcja "lpm" czyta bajty z pamięci FLASH do rejestru R0, a instrukcja "st" ten rejestr zapisuje z powrotem do RAM pod adres wskazywany przez rejestr X. Rejestr Z wskazuje adres FLASH gdzie wartości początkowe są przechowywane, więc jak @exor napisał, musisz je szukać w pliku BIN lub HEX.
  • #4 20175525
    robiw
    Poziom 26  
    Hej.
    Mechanizm działania znałem, funkcje odpowiedzialne za kopiowanie danych także znalazłem w *.lss. Byłem jednak pewien, że te stałe znajdują się w tym pliku, stąd pytanie. A pewność ta wynikała z tego, że jeśli w programie zadeklaruje stałe w pamięci flash (atrybut PROGMEM) to znajdują się one w pliku *.lss, stąd myślałem, że takie stałe wartości początkowych rowniez. Serdeczne dzięki za wyjaśnienia. robiw
REKLAMA