• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Pamięć flash
#1
Cześć, wie ktoś czy idzie a jeśli idzie to jak to zrobić chodzi o kasowanie pamięci Flash w arduino, jedno z moich urządzeń po długim czasie użytkowania podczas kompilacji i wgrywania programów nawet programy które nic nie mają w sobie lub wypalanie nowego bootloadera pokazuje minimum 12 procent zajętej pamięci Flash chciałbym się tych śmieci pozbyć z mikrokontrolera lecz nie wiem czy w ogóle jest to możliwe (wgranie pustego programu nic nie daje) pozatym kilka pinow cyfrowych w różnych sytuacjach działają dziwnie np nie obsługują funkcji one wie gdy wyświetlam cos po I2C na wyświetlaczu itp w dodatku zauważyłem że jeśli korzystam z funkcji np PORTD zamiast digitalWrite to kiedy ustawiam bity odpowiednie dla pinow zawsze jest inaczej znaczy się włączają sie inne piny np dwa piny dalej niż ten co miał a czasami w ogóle nic nie zrobi (funkcje wykorzystuje poprawie ponieważ wiem że na drugim arduino działa tak jak powinno) biorąc pod uwagę te dwie rzeczy (zajęta pamięć flash oraz nieprawidłowe funkcjonowanie) pomyślałem że te śmieci w pamięci Flash mogą powodować różne niepożądane sytuacje. Jest ktoś w stanie podpowiedzieć jak wyczyścić taka pamięć /zrobić taki twardy reset arduino? Może żywot mojej płytki dobiega końca 
Pozdrawiam
 
Odpowiedź
#2
Jest możliwe usuń botloader..

Ale twoim problemem pewnie jest STOS pisząc program nie uwzględniłeś go...
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#3
z tego co wyczytałem STOS to luki w programie tak? to wiec jak to rozwiązać/usunąć bootloader ?
 
Odpowiedź
#4
Nie.

https://bulldogjob.pl/news/536-jak-zrozu...c-programu

https://zielware.wordpress.com/2016/11/1...c-roznice/


Wystarczy że program jest żle napisany i stos najeżdża sterte i dzieją się panie cyrki niezrozumiałe dla przeciętnego kowalskiego uczącego się programować.


Botloader można usunąć, ale pozbędziesz się wgrywania programu przez USB/UART tylko ISP.
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
#5
Fajny ciekawy artykuł, dzięki. Muszę go kilka razy przeczytać i spróbować pisać programy patrząc na te aspekty pamięci.
A usunięcie bootloadera i wgranie nowego przez isp nie sprawi ze będę mógł potem normalnie wgrywać przez USB/UART? Tym samym pozbawiając się tych śmieci?
 
Odpowiedź
#6
Pusty program Arduino, to nie jest pusty program dla uC i dlatego coś tam zajmuje, choć raczej nie tyle co piszesz.
Nawet gdybyś napisał "pusty" program w C to on też nie jest pusty, bo są to minimum funkcja main, do tego while(1), minimalna konfiguracja uC, "pusty" program dla Attiny13 będzie miał inną wielkość niż dla Atmega328p. W Arduino to wszystko kryje się pod setup i loop, jest tego znacznie więcej. Dodatkowo ilość dostępnej pamięci flash w UNO jest z góry zdefiniowana z uwzględnieniem zajętego miejsca przez bootloader i niezależnie czy będziesz miał bootloader czy nie nie to i tak z poziomu kompilacji programu nie ma to znaczenia, przynajmniej dla domyślnego ustawienia IDE. W AVR to i tak minimalistycznie to wygląda, dla ARM to nawet 50% dostępnego flash znika połknięte przez core, w ESP8266 więcej niż w ogóle jest dostępne w UNO.
Poza tym widząc jak niedbale napisałeś pierwszego posta w języku, którego oczywiście uczysz się dłużej niż języka C++, to bardziej bym szukał przyczyn w Twoim programie i umiejętnościach, choć oczywiście uszkodzenie Arduino też wykluczyć nie można.
 
Odpowiedź
#7
Okej dziękuję za rady. Pozdrawiam
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości