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

Jakie minimum wolnej pamięci Flash dla stabilności Atmega328P?

27 Sty 2020 19:43 1269 35
Najlepsze odpowiedzi LABEL_AI_GENERATED

Jakie minimum wolnej pamięci RAM i Flash trzeba zostawić w ATmega328P, żeby program działał stabilnie?

W ATmega328P nie ma praktycznego „minimum wolnego Flash” dla stabilności — Flash może być zajęty nawet w 100% i sam z siebie nie powinien powodować problemów; kłopoty zwykle wynikają z RAM, zwłaszcza gdy stos nachodzi na stertę lub dane programu zajmują RAM ukrycie [#18431115][#18431665] Sprawdź, czy duże tablice `const` są w `PROGMEM`, a stałe napisy są opakowane w `F()`, bo inaczej ładują się do RAM [#18431633] W tym przypadku warto też odchudzić kod: unikać `float` i `dtostrf()`, zastępować je arytmetyką całkowitą/stałoprzecinkową, bo `float` mocno powiększa kod i spowalnia działanie na ATmega328 [#18433748][#18438811][#18447193] Duże czcionki i elementy biblioteki SSD1306 mogą zajmować RAM, a `PlatformIO` nie pokazuje pełnego obciążenia w trakcie działania programu, więc trzeba liczyć się z użyciem sterty w runtime [#18433777][#18431665] Jeśli po optymalizacji nadal brakuje pamięci, najprościej zmniejszyć program albo przejść na większy mikrokontroler [#18432089][#18432516]
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
  • #1 18431031
    Konto nie istnieje
    Poziom 1  
  • #2 18431103
    kamyczek
    Poziom 38  
    Posty: 3995
    Pomógł: 394
    Ocena: 574
    W ramie masz stos od końca jak ci przykrywa stos danymi tak będzie . Zobacz czy nie zgubiłeś gdzieś instrukcji pop . Często jest tak że programiści odkładają dane na stos a potem o nich zapominają i stos rośnie ...
  • #3 18431109
    Konto nie istnieje
    Poziom 1  
  • #4 18431115
    kamyczek
    Poziom 38  
    Posty: 3995
    Pomógł: 394
    Ocena: 574
    Flash możesz mieć zajęty w 100% i nie powinien robić problemu , chyba że masz procek z Chin i za chiny nie wiadomo czy tam jest tyle tego flash co ma być
  • #5 18431254
    Konto nie istnieje
    Poziom 1  
  • #6 18431444
    kamyczek
    Poziom 38  
    Posty: 3995
    Pomógł: 394
    Ocena: 574
    Kup atmegę w TME przelutuj i sprawdź , jak nie atmega to program . A jesteś pewny że to co wyrzucasz nie zajmuje bloku w ram . Pokaż kod to ktoś na pewno coś wypatrzy ;)
  • #7 18431559
    Konto nie istnieje
    Poziom 1  
  • #9 18431613
    Konto nie istnieje
    Poziom 1  
  • #10 18431633
    Konto nie istnieje
    Poziom 1  
  • #11 18431652
    Konto nie istnieje
    Poziom 1  
  • #12 18431665
    Konto nie istnieje
    Poziom 1  
  • #13 18432089
    Konto nie istnieje
    Poziom 1  
  • #14 18432511
    kamyczek
    Poziom 38  
    Posty: 3995
    Pomógł: 394
    Ocena: 574
    Albo zmienić platformę na jakąś bardziej profesjonalną Studio7 i C albo asembler .
  • #15 18432516
    Konto nie istnieje
    Poziom 1  
  • #16 18432600
    kamyczek
    Poziom 38  
    Posty: 3995
    Pomógł: 394
    Ocena: 574
    Moim zdaniem Arduino to platforma dla zabawy jak chcesz coś z tej wiedzy mieć użytecznego w pracy to tylko C , asembler i jakaś poważna platforma . Ja od zawsze Studio7 i AVR i Asembler bo we wszystkim czegoś mi brakowało .
  • #17 18432992
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #18 18433099
    Konto nie istnieje
    Poziom 1  
  • #19 18433391
    Konto nie istnieje
    Poziom 1  
  • Pomocny post
    #20 18433748
    Konto nie istnieje
    Poziom 1  
  • #21 18433777
    kaczakat
    Poziom 34  
    Posty: 1748
    Pomógł: 317
    Ocena: 231
    Duże czcionki zajmują dużo ram, nawet jeśli używasz progmem to i tak przed użyciem są wczytywane gdzieś do ram, potem jeszcze jakaś funkcja w międzyczasie i przejeżdżasz po zmiennych. Proste rozwiązanie to większy uC, trudniejsze to debugger, AS i sprawdzanie co i kiedy to powoduje.
    Pomogłem? Kup mi kawę.
  • Pomocny post
    #22 18433794
    Konto nie istnieje
    Poziom 1  
  • #23 18433979
    Konto nie istnieje
    Poziom 1  
  • #24 18434171
    kaczakat
    Poziom 34  
    Posty: 1748
    Pomógł: 317
    Ocena: 231
    Podłączenie UNO do debuggera to najmniejszy problem, jest zworka, wystarczy przyłożyć lutownicę, zebrać cynę i już. Drożej jest kupić debugger, a trudniej umieć go wykorzystać. Do wszystkiego są tutoriale z przykładami w sieci.
    Jednak prościej i taniej jest zmienić uC.
    Pomogłem? Kup mi kawę.
  • #25 18436327
    Konto nie istnieje
    Poziom 1  
  • #26 18436534
    Konto nie istnieje
    Poziom 1  
  • #27 18438579
    Konto nie istnieje
    Poziom 1  
  • #28 18438811
    Konto nie istnieje
    Poziom 1  
  • #29 18444481
    Konto nie istnieje
    Poziom 1  
  • #30 18444516
    Konto nie istnieje
    Poziom 1  

Podsumowanie tematu

LABEL_AI_GENERATED
W dyskusji poruszono problem minimalnych wymagań dotyczących wolnej pamięci Flash dla stabilności mikrokontrolera Atmega328P. Użytkownik zgłosił, że przy zajętości 96% Flash i 1KB RAM program ulega awarii. Odpowiedzi wskazują, że Flash może być w pełni zajęty, ale problemy mogą wynikać z niewłaściwego zarządzania pamięcią RAM, w tym z nieodpowiedniego użycia stosu. Użytkownicy sugerują optymalizację kodu, w tym użycie PROGMEM dla dużych zmiennych oraz unikanie zmiennych typu float, co może zmniejszyć zajętość pamięci. Wskazano również na możliwość przesiadki na większy mikrokontroler lub bardziej zaawansowane środowisko programistyczne. Problemy z kodem związane z biblioteką SSD1306 również były omawiane, a użytkownik został zachęcony do poprawy organizacji kodu oraz do analizy używanych bibliotek.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA