Skocz do zawartości

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


GAndaLF

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ę?

Link do komentarza
Share on other sites

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.

Link do komentarza
Share on other sites

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

Link do komentarza
Share on other sites

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

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

Link do komentarza
Share on other sites

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

Link do komentarza
Share on other sites

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
Link do komentarza
Share on other sites

@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
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

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