Skocz do zawartości

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


Pomocna odpowiedź

Ok, dzięki w miarę łapię 😋

Nowe słownictwo: rekurencja.

Nie wiem co to zmienne alokowane dynamicznie... znaczy w czasie pracy programu tenże przydziela sobie ileś tam pamięci ile aktualnie potrzebuje... tak?

Pytanie, czy w w takich prostych AVRach (atmegi, arduino) też następuje dynamiczne alokowanie zmiennych? Przecież z góry w programie deklarujemy ile i jakich mamy zmiennych... Źle kombinuję?

To jeszcze przeczytaj o dwóch miejscach/mechanizmach/typach pamięci: stosie (stack) i stercie (heap). W obu tych obszarach możesz alokować dynamicznie obszary pamięci, ale na dwóch zupełnie różnych zasadach i zupełnie inaczej ich używasz. To ważne, bo języki typu C silnie używają obu tych mechanizmów i rozumienie tego ma kluczowe znacznie dla odróżniania zmiennych globalnych, automatycznych i dynamicznie alokowanych explicite.

Do tego jeszcze przeczytaj o funkcjach malloc() i free() i zasadach ich używania. W małych procesorach - masz rację - sterta jest używana rzadko, ale jest, istnieje i choćby z ciekawości trzeba rozumieć jej działanie.

Natomiast stos - jest obowiązkowy. Nawet pisząc program zawierający samą funkcję main() już bezwiednie używasz stosu. Nie mówiąc o innych funkcjach czy ich zmiennych lokalnych.

Pytanie, czy w w takich prostych AVRach (atmegi, arduino) też następuje dynamiczne alokowanie zmiennych?

Jeśli dobrze pamiętam, to w Arduino występuje dynamiczna alokacja pamięci (w samej podstawowej bibliotece). Jak jesteś ciekaw to przeszukaj folder /Arduino/hardware/arduino/avr/cores pod tym kątem.

Ale używanie dynamicznej alokacji w 'małych' mikrokontrolerach jest raczej odradzane. Jedna sprawa to wspomniana fragmentacja pamięci (ale to raczej niewielkie ryzyko, raczej nie występuje jeżeli nie jest to jakiś patologiczny przypadek), a druga to zmienna ilość czasu potrzebna na zaalokowanie zasobu. Raz wywołanie malloc zajmie kilka us, a raz kilka kilkadziesiąt us (strzelam).

  • 1 rok później...
  • 1 rok później...

@Bloodwish witam na forum 🙂 Interesuje Cię ogólna zasada działania czy chciałbym zobaczyć faktycznie jakiś "schemat"? To skomplikowane układy, nie wiem co dokładnie masz na myśli pod hasłem schemat (a właściwie jakich informacji konkretnie szukasz). Napisz coś więcej to łatwiej będzie nakierować Cię na konkretne materiały.

@Treker Rozumiem schemat jako wewnętrzną budowę, przykładem jest np. budowa licznika cyfrowego CD4026. Słyszałem o niewiarygodnych ilościach tranzystorów w różnych urządzeniach, więc byłem ciekawy czy mikrokontroler posiada podobną budowę oraz czy jest możliwość zobaczenia czegoś takiego.

(edytowany)

Tu masz przykład trywialnego, uznanego za pierwszy na świecie "prawdziwy" mikroprocesor (a więc daleko mu do mikrokontrolera) - samo 4-bitowe CPU (sekwencer, dekoder instrukcji, zestaw rejestrów, arytmometr) plus interfejsy do pamięci, kultowy dzisiaj Intel 4004:

https://www.4004.com/

A tu o jego następcy, 8008:

https://www.techspot.com/article/1397-intel-8008-microprocessor/

Edytowano przez marek1707
  • Lubię! 1
  • Pomogłeś! 1
  • 5 miesiące później...
  • 1 miesiąc później...

@szumen Widzę że już druga osoba zadaje to pytanie. W standardzie języka C nie jest dokładnie opisane jaki rozmiar ma zmienna typu int. Zmienna int według standardu ma gwarantowaną minimalną długość 16 bitów, czyli 2 bajtów. Zwykle rozmiar odpowiada naturalnemu rozmiarowi liczby całkowitej na danej architekturze. Przykładowo dla komputerów osobistych int najczęściej ma wielkość 32 bitów (4 bajtów). Dla 8 bitowych mikrokontrolerów avr naturalnym są liczby 8 bitowe, jednak że standard narzucił minimalną wielkość, int w tej architekturze ma 16 bitów.
https://en.cppreference.com/w/cpp/language/types

Autor artykuły wyraźnie zaznaczy że odnosi się do architektury 8Bit AVR, jednak wydaje mi się że warto wyraźnie zaznaczyć że rozmiar może się różnić.
Wiem że wiele osób jest jeszcze w szkołach uczonych na pamięć rozmiarów zmiennych, a niektórzy nawet zdają z tego egzaminy. Jeśli nie zdefiniowano w zadaniu, poprawną odpowiedzią na takie pytania bardzo często jest to zależy🙂  Polecam krótki test który potrafi zaskoczyć: https://wordsandbuttons.online/so_you_think_you_know_c.html

  • Lubię! 1

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...