AVR po latach

Zgadza się. Dlatego psu na budę debugger softwareowy w roli debuger hardwareowego. To najzwyczajneij zupełnie inne zagadnienie.

Obserwacja z pola bitwy: prawidłowe pisanie kodu minimalizuje potrzebę używania debuggera. Do zera? Nie. Blisko zera? Tak. Mówiąc "pisanie kodu" mam na myśli testowanie go a dopiero potem pisanie. Zwyczajowo waga unit testów znaczaco przekracza wagę kodu produkcyjnego.

Obserwacja z innego pola: debuggery softwareowe nie nadają się do

*rzeczywistych* systemów hardwareowych gdzie istnieją zalezności czasowe. Do tego bezpieczniej jest stosować symulatory logiczne z emulacją cpu i peryferiów. Tylko wtedy nie wiadomo czy bug jest u mnie czy w emulacji. I takie symulatory za darmo się nie rozdają.

Ja ten problem rozwiązywałem kiedyś kradnąć rdzeń AVR z projektu MAME i dorabiając ręcznie napisany emulator pewnego peryferium, dzięki czemu udało się namierzyć buga, ale to jednorazowy wyskok, raczej desperacja.

Nie o tym mowa.

W środowisku softwareowym, debugger to normalne narzędzie z łatwo (zazwyczaj) powtarzalnymi przypadkami.

W środowisku hardwareowym jest to narzędzie skrajnie trudne do użycia. Wyobraź sobie debugowanie przez JTAG procesora, który ma wysyłać co milisekundę heartbeat do watchdoga zewnątrznego. Zatrzymujesz go na breakpoincie i jesteś umarty.

Albo symulujesz całość *systemu* hardwareowego i tam debugujesz w komfortowych warunkach, albo masz na głowie niezliczone ilosci problemów z faktem że czas mimo zatrzymania programu pędzi dalej, przerwania się nie obsługują, bufory się przepełniają, ciekłe kryształy się elektrolizują.

gdb to nie jest narzędzie do debugowania w hardware, poza śmiesznie prostymi przypadkami debugowania kodu wysokopoziomowego. Co akurat robi się prawie zawsze na maszynei dev, a nie w hardware.

Zupełnie jak wiele kawałków hardware, używanych codziennie. Ogólnie świat hardware to nic specjalnie pewnego. Więc niejako karę za hobby embedded niech będzie czujnośc, że wszędzie czają się bugi, a te hardwareowe są najweselsze.

Od Arduino jak najdalej. Nie miej wrażenia, że jesli zapytałem o religijnośc poglądów na Arduion, to jestem fanem. To Qpa. Ale pozwole sobie na jeden komplement: mimo wymachiwania pięściami przez 60latków z embedded, wprowadził tylnymi drzwiami C++ do świata uC. Podziękowania się należą, nowe pokolenie programistów embedded będzie dzieki temu bardziej ateistyczne.

Reply to
heby
Loading thread data ...

Co więcej, Arduino zrobiło jedną, bardzo ważną rzecz - wprowadziło na większą skalę obiektowość do świata mikrokontrolerów. Właściwie wszystkie biblioteki dla tego ekosystemu są pisane jako klasy C++, ze wszystkimi zaletami wynikającymi z dziedziczenia. Na przykład biblioteki graficzne są definiowane jako warstwa abstrakcji, z interfejsem do operacji I/O w formie metod czysto wirtualnych. Te metody potem implementuje autor sterownika wyświetlacza, który dziedziczy po bibliotece graficznej. I nie żebym miał cokolwiek przeciwko tradycyjnemu C - sam piszę kod do większości swoich projektów w ten sposób. Jednak mamy XXI wiek, w MCU nie trzeba już liczyć bajtów i cykli, a dzieciakom dzisiaj zaczynającym zabawę z programowaniem w przyszłości prędzej przyda się umiejętność sprawnego pisania obiektowego kodu.

Reply to
Atlantis

heby snipped-for-privacy@poczta.onet.pl> napisał(a):

Zgadza się. Ja tylko piszę, że debugger jest przydatny i wolę środowisko, które go ma od środowiska, którego go nie ma. Czy się pisze na AVR czy jakiś Threadripper od czasu do czasu trzeba sprawdzić jaki jest stan zmiennych, rejestrów czy też je zmodyfikować. Z wielu różnych powodów, nie dlategto, że ktoś użył za mało abstrakcji.

Reply to
Grzegorz Niemirowski

Atlantis snipped-for-privacy@wp.pl napisał(a):

Podpisuję się pod wszystkim :) Przy okazji polecam obejrzeć bardzo ciekawą prezentację pokazującą, że C++ może dać mniejszy kod niż C.

formatting link

Reply to
Grzegorz Niemirowski

Owszem, czasem się przydaje. Przydawał by się 100x bardziej, gdyby zawierał symulator SoC. A tak, to tylko zabawka powodująca więcej problemów niż rozwiązująca.

Tak czy inaczej, utracenie mozliwosci debugowania w małym programiku na AtTiny, jest w zasadzie niczym cennym. Ot, gadżet, mało użyteczny w praktyce.

Reply to
heby

Nie, ale nazwa Arduino to taki fake. Fajne powstają rozszerzenia harwarowe łatwo je obsłuzyć, ale nie używałem nigdy narzędzi zapisujących ext .ino. Może kwestia przyzwyczajenia. A gdy ktoś mówi/pisze: "procesor Arduino", nie brzmi poważnie.

Reply to
Pcimol

To prawda, jednak w 20MHz ATMega (czy 32MHz XMega) trochę niekorzystnie wypada overhead zasobów. To są sterowniki do najprostszych zadań. Prosta maszynę stanów łatwiej napisać w C (włącznie z nauką tegoż pisania).

Reply to
Pcimol

To oczywiste, przy czym dzisiaj coraz rzadziej zaczynając nowy projekt sięga się po ośmiobitowe MCU (pomijając obecne problemy na rynku półprzewodników) dużo łatwiej kupić jakiś układ STM32, który w tej samej cenie zaoferuje co najmniej dziesięć razy tyle pamięci, szybsze taktowanie i bogatszy zestaw peryferiów. W takiej sytuacji dodatkowy narzut wynikający z użycia C++ nie jest wielkim problemem.

I jasne - kod pod MCU pisze się inaczej, bo cały czas trzeba uważać ze stosowaniem kontenerów i algorytmów z STD, które dość intensywnie korzystają z dynamicznej alokacji pamięci, jednak sama przejrzystość obiektowego kodu jest sporą zaletą.

No i poza tym gdy ktoś już porządnie opanuje C++, to potem zrozumienie "czystego C" przychodzi raczej łatwo.

Reply to
Atlantis

Pcimol snipped-for-privacy@b.com napisał(a):

Niektórzy używają nazw Arduino i AVR zamiennie.

Reply to
Grzegorz Niemirowski

Szczerze mówiąc nie wiem co chciałeś powyższym przekazać. Moje doświadczenia z udostępnienia Arduino (i C++) znajomej osobie 60+ (prawie 70) jest takie, że kod jaki ona pisze to nie ma nic wspólnego C++ a wygląda jak rzutowanie Pascala na C.

Reply to
Marek

To czemu 99% softu napisanego w C++ dziala wolno? Nie umieją pisać poprawnie?

Reply to
Marek

Przecież ten koleś nie ma.pojecia o C. Do testu szybkości używa malloc? Zamiast size_t używa unsingned i? Ręcznie wypełnia tablicę zamiast memset??? Odechciało się dalej tego oglądać troszkę....

Reply to
Marek

Marek snipped-for-privacy@fakeemail.com napisał(a):

Statystyka zaczerpnięta z...?

Reply to
Grzegorz Niemirowski

Oczywiście, że z własnego doświadczenia, bo kogo innego?? KDE/plasma koszmar, przez 20 lat ciągle wycieki pamięci, puchunący ksysguard do jakiś chorych rozmiarów. Parę dni temu znowu doświadczyłem oom killer na maszynie z 14GB RAM, na której jest tylko sesja kde + FF

+Chrome. 14GB mało do przeglądania stron, serio?? Maszyna nieużywalna przez to przez pół godziny. Sam exec aplikacji zlinkowanej z stdc++ zawsze widać widać wolniejszy. Ja dopuszczam info, że c++ może być lepsze i szybsze ale c z tego jak w większości przypadków nie umieją tego zrobić dobrze. Zresztą na tym filmie był przykład nadmiarowego linkowania z stdc++.
Reply to
Marek

Proble nie polega na pasywnym ignorowaniu tylko aktywnym atakowaniu z powodu ignorancji. Było tez i na tej grupie.

Reply to
heby

Podaj przykład takiego softu, który jest napisany w *czymś* i C++ i w tym drugim wypadku działa wolno.

Ja podam:

main.c: int main() { int i; for( i = 0 ; i < 100 ; ++i ) foo();

return 0; }

main.cpp: int main() { int i; for( i = 0 ; i < 100 ; ++i ) foo(); }

Ten drugi, twierdzisz, jest napisany wolno?

Zazwyczaj tak. Ale znacznie częsciej to polaga na braku wiedzy czym jest C++, dla obserwatorów z zewnatrz. Popularna opinia o C++ to np. taka, że to jest "new DuzaKlasa". No więc w embedded to psu na budę i nie o to chodzi.

Reply to
heby

Progrmujesz zawodowo w C++?

, bo kogo innego?? KDE/plasma

Masz KDE Plasma napisany w C do porównania?

Bo to trudny język. Dlategpo nie dasz go 60-latkowi który pół życia pisał w Keilu na 8051.

Akurat linkowanie z stdc++ raczej jest mało uzyteczne w embedded, ale w przypadku KDE raczej nie jest powodem spowolnień.

Reply to
heby

Możesz podkręcić jasność wypowiedzi?

Reply to
Marek

Na tej grupie padały już takie argumenty przeciwko C++, w embedded:

- jest wolniejszy od C

- produkuje więcej kodu

- musisz używać klas bo inaczej to nie C++

- templates powodują eksplozje binariów i nikt nie wie jak działają a ponadto się nie kompilują

- nikt tak nie robi

- nikt tak nie będzie robił

- to zabawka, prawdziwi programiści ...

- itp.

Oczywiście, wszystkie to debilizmy, wynikające z ignorancji i konserwatyzmu.

Reply to
heby

No podałem przykład siebie jako usera używającego od 25 lat głównie softu C++ i ciągle tak samo korbi jak korbił 25 lat temu. I tylko dzięki wzrostu wydajności CPU i ilości ramu rozwój tego softu nie doprowadził do kompletnej jego nieuzywalności (mam na myśli słabą responsywność czy użycie zasobów).

Reply to
Marek

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.