Skocz do zawartości
  • 0

Kod w Arduino się nadpisuje?


Behlur_Olderys

Pytanie

Cześć, 

Tworzę dość "dojrzały" kod na Arduino: dużo funkcji, dużo obiektów, nie jakieś tam spaghetti-huzia-na-juzia-wszystko-w-mainie.

W każdym razie development wyglądał tak, że najpierw zrobiłem miganie diodą (typowe blinky) przy naciśnięciu na przycisk. No i wszystko fajnie.

Drugi etap to podmienić mruganie na rzeczywiste akcje: ruch silnikami.

 

 

Problem polega na tym, że pomimo wgrania nowego kodu wciąż jakby działa jeszcze stary: jak wciskam ruch w osi DEC to okazuje się, że wciąż dioda miga tak, jak w poprzednim projekcie. Nie ma szans na pomyłkę, bo to był dość charakterystyczny sposób mrugania.

 

Z punktu widzenia kodu to niemożliwe, bo w nowej wersji w ogóle nie ma powiązania między diodą. Zarządzanie obiektami: każdy w jednym pliku powoduje, że nie ma najmniejszej opcji na jakieś ukryte sprzężenie albo zapomnianą linijkę.

 

Dziwne zachowanie mogę wyjaśnić tylko w ten sposób, że część kodu poprzedniego projektu - kilka krótkich funkcji - istnieje dalej w pamięci Flash, i nie wykasowała się poprzednim razem, a zawołania do nich jakoś znajdują stare a nie nowe miejsce w kodzie.

 

Tylko że nie mam pojęcia czy takie błędy są w ogóle możliwe?

 

Alternatywa to że po prostu mam do wyrzucenia płytkę Arduino Mega ;)

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

14 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

Jak u mnie w robocie sprzęt o drugiej w nocy bez powodu zaczynał żyć własnym życiem, to zastanawiałem się nad egzorcystą ;)

Edytowane przez seg
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
59 minut temu, lkosz napisał:

a nie wpiąłeś sterownika silnika pod pin 13, pod który podłączona jest dioda?

 

Nie, ja migam swoją diodą na porcie zdaje się 47 a silniki są pod zupełnie innymi portami. Zresztą - jak mówiłem - miganie jest bardzo charakterystyczne, nie da się go przypadkowo wywołać.

Ale spróbuję jeszcze zmienić port, no nigdy nie wiadomo, może jest jakieś zwarcie czy inna magia - mam otwarty umysł ;)

 

 

49 minut temu, szuu napisał:

albo w ogóle nowa wersja sie nie wgrała i cały czas używasz starej albo w tej nowej też zrobiłeś niechcący miganie diodą ^_^

ale to można bardzo łatwo sprawdzić - pobierasz zawartość flasha i widzisz co jest naprawde wgrane.

 

Tak, ale nowa wersja na 100% się wgrała bo jednocześnie sprawdzam nowe "featury" w miarę postępu. 

 

Zobaczę tego flasha - pytanie czy to tak łatwo sprawdzić co się tam dzieje....

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

No to mam tylko jeden pomysł - spróbuj wszystko (nawet komputer) wyłączyć i włączyć ponownie, i jeszcze raz przeprogramuj płytkę. Stawiałbym na bug w programie, który odwala manianę przy kompilacji, lub sterowniku którego używasz. Nie spotkałem się z tym, żeby arduino się tak dziwnie zachowywało, ale już nie takie rzeczy widziałem w wykonaniu komputerów, a jak dodatkowo robisz to pod windowsem to tym mniej mnie to dziwi :D

 

Może Twoja płytka dostała pękiem atmosferycznym, a może programator na płytce źle resetuje główną atmegę, może się uszkodził. Musiałbyś podejrzeć zawartość pamięci flash i RAM. Spróbować zaprogramować przez USBasp. Tak na sucho przez forum to trudno powiedzieć w czym rzecz.

Edytowane przez lkosz
  • Lubię 1
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Wydaje mi się nieprawdopodobne, żeby po wgraniu nowej zawartości pamięci FLASH mogło być wykonywane coś, co pozostało w jakimś obszarze FLASH-a który nie został z jakiegoś powodu wyczyszczony. Nawet gdyby rzeczywiście coś pozostało, Twój aktualny kod musi to jakoś wywoływać, to się nie uruchomi samo z siebie. Jak to Ikosz napisał, bez możliwości zobaczenia co i jak, to jest trochę wróżenie z fusów, ale wydaje mi się, że gdzieś w bieżącym kodzie pozostała i jest wywoływana funkcja mrugająca diodą.

Żeby się dowiedzieć czegoś więcej, możesz wyczyścić cały FLASH, upewnić się, że mikrokontroler jest  rzeczywiście wyczyszczony, co będzie widać chociażby po tym, że nic nie robi, w szczególności nie mruga lampką. Następnie zaflashuj bieżącym kodem - jeżeli lampka będzie mrugała, to nie ma innej możliwości, mruganie lamką jest zaimplementowane w bieżącym kodzie.

No i w ogóle clean build sugerowany przez PiotrStopa, zdecydowanie dobra rada.

Edytowane przez MarekJ71
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Bywała taka magia kiedyś i u mnie ...  ja raczej robię z arduino zawsze na wersji 1.8.5 - taka sprawdzona przezemnie bo reszta jakieś dziwne rzeczy chciała :D Pozatym weź stwórz nowy projekt i wklej tam kod, skompiluj i wgraj - to powinno pomóc. Często miałem tak że jak odpalałem sobie IDE i robiłem coś na jednej karcie to jakby coś się krzaczyło i właśnie miałem coś podobnego jak u Ciebie ... wgrywał mi głupoty albo to samo bez naniesionych zmian. 

  • Lubię 1
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

A na przyszłość, jak robisz coś bardziej skaplikowanego niż wieczna pętla i jazda, to polecam zamiast typowego arduino, ESP32 z RTOSem (masz dwa rdzenie i obsługę wątków w cenie arduino).

 

W twoim przypadku myślę że najwieksza jest szansa na to że @PiotrStopa ma rację i linker wrzuca tobie stary kod. Jedyna opcja jaka ma sens jezeli masz miks starego zachowania i nowych funkcjonalności.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0
4 godziny temu, komprez napisał:

Pozatym weź stwórz nowy projekt i wklej tam kod, skompiluj i wgraj - to powinno pomóc.

 

Zacząłem tak robić no bo szkoda mi czasu na inwestygację. 

 

5 godzin temu, PiotrStopa napisał:

Albo zrobić clean build

Jak się robi clean build na Arduino?

 

59 minut temu, rybek0s napisał:

A na przyszłość, jak robisz coś bardziej skaplikowanego niż wieczna pętla i jazda...

Mam to, mam też STM32. Tylko nie pasują mi do płytki ze sterownikami - to RAMPS 1.5 ;)

 

Normalnie bym FreeRTOS-a na STM zrobił i sobie wygodnie zakodził. Może docelowo tak trzeba będzie zrobić, ale to się wiąże z porzuceniem RAMPS-a jako bardzo wygodnej platformy, albo z utrzymywaniem w jednym projekcie dwóch mikrokontrolerów, co się trochę kłóci z tym jak mało się tu dzieje ;)

 

Sterownik kontrolera eq3-2 to pewnie na bramkach nand jest robiony....;)

Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

@Behlur_Olderys weź Ty się pochwal co żeś uczynił, a będzie Ci dana pomoc :D Serio ... wspomnieli o ESP32 (ESP8266) to o wiele potężniejsze narzędzie z wbudowanym WIFI...  przeniosłem się na to 2-3 lata temu a arduino używam do ... migającej diody :hysterical: Mase urządzeń już na tym zrobiłem , Nodemcu jest spoko programuje się jak arduino, natomiast ESPEasy to już fajne wykonawcze projekty nie wspomne już o ESPHome

Edytowane przez komprez
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Ogólnie chodzi o zawartość tej czarnej skrzynki:

 

 

 

W środku wygląda to tak:

cs_gora.jpg

 

 

Z boku tak:

cs_panel.jpg

 

Zasadniczo trochę złączy, drivery krokowców w opakowaniu RAMPS 1.6 + Arduino Mega.

 

Jak widać na obrazkach wywaliłem czasowo górną pokrywę - rezygnuję z analogowych przycisków i leda na rzecz ekranu LCD + przyciski z shielda.

Aktualnie wywaliłem cały stary kod, całe szczęście pisałem obiektowo-reużywalnie, więc pisanie od nowa to było dużo Copy&Paste. Uff, wydaje się, że działa - zaraz wyjdę na balkon sprawdzić :)

 

 

  • Lubię 1
Odnośnik do komentarza
Udostępnij na innych stronach

  • 0

Arduino pliki z buildu trzyma w C:\Users\%USER%\Local Settings\Temp. Będziesz miał foldery arduino.buildXXXXX. Zaznaczam, że nie wiem jak środowisko Arduino pracuje budując projekty - imo wystarczy usunąć cały taki folder z tempa.

Inna sprawa - polecam przesiadkę na inne środowisko, które będzie bardziej przyjazne zaawansowanemu użytkownikowi. Np. VS code ma fajny support Arduino.

 

Edycja dotyczyła literówki.

Edytowane przez PiotrStopa
  • Dziękuję 1
Odnośnik do komentarza
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Odpowiedz na pytanie...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.