Skocz do zawartości

[Teoria] Wszystko co powinniście wiedzieć o działaniu mikrokontrolera


GAndaLF

Pomocna odpowiedź

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Int ma być najbardziej naturalnym typem zmiennej dla danej platformy. Dla AVR powinna mieć 8 bitów, jednak że jest to dość mało, i dokładnie to samo co unsigned char. Cała reszta świata (zwłaszcza w momencie tworzenia AVR-GCC) używała x86 gdzie ten typ ma 32 bity więc ktoś postanowił zrobić w AVR ten typ 16 bitowy.

Poza tym AVR niby jest 8 bitowy, ale adresacja Flasha, i słowa rozkazów są już 16 bitowe.

Link do komentarza
Share on other sites

Wartości podstawowych typów całkowitoliczbowych ( int, unsigned int, long, et cetera ), są w pełni zależne od użytego urządzenia i np. rozmiar int może typowo wynosić 8, 12, czy 16 bitów ( każdy procesor Intela posiada prymitywny, 16 bitowy tryb pracy - czasami jest on bardzo przydatny ). Przetwarzanie danych przez MPU ( Microprocessor Unit - nie mylić z ochroną zakresu dostępu do pamięci przez kontroler pamięci: Memory Protection Unit ) jest niezależne od kompilatora języka programowania - typowo najniższym jest język C, pozostałe ( Assembler i wirtualne, sprzętowe maszyny interpretujące Assemblera ) nie są używane poza pracownikami producentów sprzętu elektronicznego - czasami programista stosuje wstawki Assemblerowe, w celu osiągnięcia efektu nietłumaczonego ( zbyt kosztownie tłumaczonego ) przez dany kompilator. Proste operacje ułamkowe na mikrokontrolerze bez FPU opłaca się wykonać z użyciem arytmetyki stałoprzecinkowej - są biblioteki do podstawowych operacji ułamkowych. Opłaca się stosować przeliczone wartości, zapisane w postaci tablicy ( zapomniane tablice przeglądowe - LUT Look up Table; ich użycie to najszybszy możliwy sposób prowadzenia operacji logicznych ), dzięki czemu w ogóle nie trzeba przeprowadzać powtarzalnych obliczeń na energooszczędnym ( zasilanym baterią ), niewydajnym procesorze, ale użyć gotowych ( wcześniej przeliczonych ) wartości. Dziękuję za artykuł - bardzo rzeczowy i świetnie wprowadzający do tematyki.

  • Lubię! 1
Link do komentarza
Share on other sites

Świetny artykuł, choć po pierwszym przeczytaniu zrozumiałem może z 30%🙂. Zaciekawił mnie ten akapit:

"Zasada działania stosu jest prosta - można na niego wrzucać kolejne rzeczy (w tym wypadku bajty danych), a następnie zdejmować. Ostatni wrzucony bajt znajduje się na samym szczycie stosu, więc jest pierwszy do zdjęcia. Jeżeli wrzucimy na stos kolejny bajt, to przygniecie poprzedni i to on będzie pierwszy. Stos zwykle jest umieszczony na końcu pamięci i rośnie w stronę początku. Dlatego jeśli źle napiszemy program, to wartości odkładane na stosie w końcu nadpiszą nam inne dane, znajdujące się w pamięci".

Szczególnie zaznaczone zdanie.

Proszę o bliższe wyjaśnienie czym jest ten stos. Po co nadpisywać dane jedne na drugich, a później zdejmować(odczytywać?) w odwrotnej kolejności do zapisywania?

Jak można spieprzyć program tak, że nadpiszemy całą pamięć RAM?

Link do komentarza
Share on other sites

Nie rozumiem w czym nauka rosyjskiego przeszkadza w rozumieniu tekstów w innych językach... No ale Wy młodzi mieliście pewnie inny system edukacji...

Link do komentarza
Share on other sites

SOYER, w sensie że nie chcesz się nauczyć angielskiego? Bardzo słabe podejście, zamykasz sobie w ten sposób dostęp do 95% (strzelam) materiałów dostępnych w internecie na tematy elektroniki/programowania/robotyki itd.

Link do komentarza
Share on other sites

Ale żeście się rozpisali 😅 każdy lepiej wie który język umie, nawet wiecie co ja umiem, a czego nie 😅😅

Znam angielski komunikatywnie, porozmawiam i poczytam co łatwiejsze teksty, niestety techniczny angielski jest mi nieznany.

Liczyłem raczej na odpowiedź w stylu Marka1707 albo Elvisa, merytorycznie 😅🤣😅

Wiem, że nie wiem i dlatego pytam na polskim forum, dziękuję za linki do angielskich stron, często korzystam i czytam, ale dla lamera lepiej jak ktoś wytłumaczy po chłopsku i w ojczystym języku 😉

Może kiedyś weźmie mnie na naukę branżowego angielskiego, ale niestety nie czuję żeby ta chwila była blisko...

Link do komentarza
Share on other sites

Ok, to odpowiem krótko.

Jak można spieprzyć program tak, że nadpiszemy całą pamięć RAM?

Kolizja danych w pamięci będzie, gdy sterta (heap) 'zderzy się' ze stosem (stack). Na stosie są odkładane zmienne lokalne oraz np. wskaźniki powrotu z funkcji (dokładnie tego nie wiem, trzeba by skonsultować z kimś mądrzejszym/literaturą). Czyli jak wywołujesz funkcję X, w której masz zmienne lokalne, to na stosie robione jest miejsce dla tych zmiennych (oraz wskaźnik powrotu). Więc jeżeli będziesz miał rekurencję (X wywołuje wewnątrz siebie X) lub kod będzie miał wystarczająco długi 'łańcuch' wywołań, to stos mocno urośnie.

Z drugiej strony masz stertę, która wykorzystana jest przez zmienne alokowane dynamicznie (malloc / new). Jak zaalokujesz bardzo dużo takich danych (bez zwalniania ich), to sterta mocno urośnie. Może się też zdarzyć, że alokując obszary pamięci o różnej ilości bajtów i zwalniając je w różnej kolejności, powstaną niewykorzystane obszary w środku sterty (3 bajty tu, 7 bajtów tam, itd), których alokator nie będzie w stanie ponownie wykorzystać.

Podsumowując: kolizja może nastąpić od: rekurencyjnych wywołań funkcji, dużej liczby zmiennych lokalnych, długich łańcuchów wywołań funkcji, fragmentacji pamięci (od alokacji dynamicznej) lub połączenia tych czynników.

  • Lubię! 2
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.