eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika › Różnice między mikrokontrolerami
Ilość wypowiedzi w tym wątku: 47

  • 1. Data: 2016-02-05 13:28:15
    Temat: Różnice między mikrokontrolerami
    Od: Atlantis <m...@w...pl>

    Tak w nawiązaniu do jednej ze wcześniejszych dyskusji:

    Naukę programowania MCU zaczynałem od AVR, w międzyczasie przyjrzałem
    się trochę Arduino i ESP8266, teraz eksperymentuję z PIC32. W każdym
    przypadku korzystam z C/C++.

    Po zapoznaniu się z tymi kilkoma przykładami odnoszę coraz większe
    wrażenie, że tak naprawdę nie ma wielkiej przepaści. Oczywiście - trzeba
    nauczyć się rzeczy charakterystycznych dla danej rodziny (taktowanie,
    timery, system przerwań, obsługa GPIO i interfejsów komunikacyjnych) ale
    tutaj można podeprzeć się datasheetami i podręcznikami. Potem na dobrą
    sprawę wygląda to całkiem podobnie - nawet biblioteki są te same albo
    opierają się na podobnych schematach - co najwyżej trzeba im tylko
    dostarczyć kilka niskopoziomowych funkcji.

    Tak się zastanawiam - czy w przypadku korzystania z kompilatora C
    (załóżmy, że w ogóle nie bierzemy pod uwagę nauki asemblera) w pewnym
    momencie mogą pojawić się jakieś mocno specyficzne, sprzętowe różnice?
    Pomijam kwestię podstaw, np. wyrównywania zmiennych w pamięci albo
    rozmiarów typów. Czy jednak programowanie AVR, PIC, ARM7/ARM9 (od
    różnych producentów) czy STM32 nie różni się aż tak bardzo między sobą,
    gdy używa się C/C++?


  • 2. Data: 2016-02-05 14:38:10
    Temat: Re: Różnice między mikrokontrolerami
    Od: "J.F." <j...@p...onet.pl>

    Użytkownik "Atlantis" napisał w wiadomości grup
    dyskusyjnych:56b49564$0$642$6...@n...neostrada.
    pl...
    >Tak w nawiązaniu do jednej ze wcześniejszych dyskusji:
    >Naukę programowania MCU zaczynałem od AVR, w międzyczasie przyjrzałem
    >się trochę Arduino i ESP8266, teraz eksperymentuję z PIC32. W każdym
    >przypadku korzystam z C/C++.

    >Po zapoznaniu się z tymi kilkoma przykładami odnoszę coraz większe
    >wrażenie, że tak naprawdę nie ma wielkiej przepaści. Oczywiście -
    >trzeba
    >nauczyć się rzeczy charakterystycznych dla danej rodziny (taktowanie,

    Na poziomie C ? Istotnie, nie ma. Moze poza rodzina 8051 i jej
    obszarami danych :-)

    Na poziomie assemblera ... z jednej strony sa olbrzymie, z drugiej -
    jak zrozumiales jak dziala jeden, to reszta dziala analogicznie.

    >Tak się zastanawiam - czy w przypadku korzystania z kompilatora C
    >(załóżmy, że w ogóle nie bierzemy pod uwagę nauki asemblera) w pewnym
    >momencie mogą pojawić się jakieś mocno specyficzne, sprzętowe
    >różnice?
    >Pomijam kwestię podstaw, np. wyrównywania zmiennych w pamięci albo
    >rozmiarów typów.

    To, plus wszystkie peryferia. Zegary, liczniki, przerwania, maski itp.
    A dalej roznice w bibliotekach - jak programujesz od zera to nie masz
    zadnych, jak korzystasz z dostarczonych przez kogos innego - wszelkie
    cuda mozliwe.

    Zajrzyj chocby w zrodla jakiegos uni/linuxowego programu, ile tam
    roznych #if aby to dzialalo.

    Obszary pamieci, zarzadzanie pamiecia - drobnych roznic jest pelno.

    J.


  • 3. Data: 2016-02-05 18:21:11
    Temat: Re: Różnice między mikrokontrolerami
    Od: platformowe głupki <N...@g...pl>

    oho Kolega dobił do momentu "wielka racjonalizacja donalda t." [R]


  • 4. Data: 2016-02-05 18:47:22
    Temat: Re: Różnice między mikrokontrolerami
    Od: Sebastian Biały <h...@p...onet.pl>

    On 2016-02-05 13:28, Atlantis wrote:
    > Tak się zastanawiam - czy w przypadku korzystania z kompilatora C
    > (załóżmy, że w ogóle nie bierzemy pod uwagę nauki asemblera) w pewnym
    > momencie mogą pojawić się jakieś mocno specyficzne, sprzętowe różnice?

    Tak. Harvard vs von Neumann. De facto język C nie jest gotowy na
    operowanie w przestrzeni adresowej charakterystycznej dla Harvarda.
    Każde rozszerzenie załatwiające ten temat jest specyficzne dla
    konkretnego kompilatora i konkretnej arch. Były próby uwspólnienia tego
    w gcc ale wyszło jak zwykle.

    Przy czym zaznaczam że czasami harvardowatość jest ukryta przed kodem
    usera. Mówimy o procesorach gdzie jest to widoczne, jak na przykład AVR.
    Tam jezyk C z definicji bedzie musiał być wspierany w mało przenośny
    sposób aby wydajnie programować.


  • 5. Data: 2016-02-05 21:22:11
    Temat: Re: Różnice między mikrokontrolerami
    Od: Atlantis <m...@w...pl>

    W dniu 2016-02-05 o 18:47, Sebastian Biały pisze:

    > Przy czym zaznaczam że czasami harvardowatość jest ukryta przed kodem
    > usera. Mówimy o procesorach gdzie jest to widoczne, jak na przykład AVR.
    > Tam jezyk C z definicji bedzie musiał być wspierany w mało przenośny
    > sposób aby wydajnie programować.

    Hmm... O jakich aspektach kodu pod AVR tutaj mówimy?


  • 6. Data: 2016-02-06 00:08:06
    Temat: Re: Różnice między mikrokontrolerami
    Od: Grzegorz Kurczyk <g...@c...usun.slupsk.pl>

    W dniu 05.02.2016 o 21:22, Atlantis pisze:
    > W dniu 2016-02-05 o 18:47, Sebastian Biały pisze:
    >
    >> Przy czym zaznaczam że czasami harvardowatość jest ukryta przed kodem
    >> usera. Mówimy o procesorach gdzie jest to widoczne, jak na przykład AVR.
    >> Tam jezyk C z definicji bedzie musiał być wspierany w mało przenośny
    >> sposób aby wydajnie programować.
    >
    > Hmm... O jakich aspektach kodu pod AVR tutaj mówimy?
    >

    AVR ma oddzielną pamięć programu i danych co powoduje, że np do
    odczytania bajtu z pamięci programu (która ma szynę 16-bitową) służy
    inny rozkaz procesora niż do czytania bajtu z pamięci danych z szyną
    8-bitową. Czyli jeśli z poziomu języka wyższego poziomu chcesz np.
    wyświetlić jakiś napis, to masz dwie różne definicje łańcucha
    określające w jakiej pamięci ma być umieszczony i dwie różne procedury
    do wyświetlania tego łańcucha w zależności gdzie był umieszczony. W
    AVRGCC jest specjalny typ wskaźnikowy do stałych umieszczonych w pamięci
    programu.
    Przy architekturze von Neumanna nie ma rozdzielenia pamięci danych od
    pamięci programu. O tym czy procesor widzi pamięć w danej chwili kostkę
    RAM, EPROM czy rejestr jakiegoś I/O decyduje dekoder adresów. Procek
    może wykonywać rozkazy umieszczone w dowolnym obszarze przestrzeni
    adresowej. Z punktu widzenia języka wysokiego poziomu w rodzaku C taki
    sam wskaźnik char* może wskazywać na jakiś fragment kodu programu, daną
    czy rejestr układu I/O.

    --
    Pozdrawiam
    Grzegorz


  • 7. Data: 2016-02-06 00:42:07
    Temat: Re: Różnice między mikrokontrolerami
    Od: JDX <j...@o...pl>

    On 2016-02-06 00:08, Grzegorz Kurczyk wrote:
    [...]
    > AVR ma oddzielną pamięć programu i danych co powoduje, że np do
    Tak dla uściślenia: MCU oparte o architekturę von Neumanna również mają
    oddzielne pamięci programu i danych ponieważ ta pierwsza jest zazwyczaj
    pamięcią nieulotną, a ta druga jest RAM-em. Chodzi o to, że w
    (zmodyfikowanej bądź nie) architekturze harwardzkiej pamięci danych i
    programu znajdują się w różnych przestrzeniach adresowych, a w
    architekturze von Neumanna te pamięci znajdują się w jednej, wspólnej
    przestrzeni adresowej. Z tego wynikają różne zady i walety tych
    architektur. W każdym razie rzeźbienie w C na MCU o architekturze
    harwardzkiej to trochę ból w dupie.


  • 8. Data: 2016-02-06 08:22:32
    Temat: Re: Różnice między mikrokontrolerami
    Od: Atlantis <m...@w...pl>

    W dniu 2016-02-06 o 00:08, Grzegorz Kurczyk pisze:

    > Czyli jeśli z poziomu języka wyższego poziomu chcesz np. wyświetlić
    > jakiś napis, to masz dwie różne definicje łańcucha określające w jakiej
    > pamięci ma być umieszczony i dwie różne procedury do wyświetlania tego
    > łańcucha w zależności gdzie był umieszczony.

    To jest oczywiste i faktycznie - jeśli biblioteka pisana pod AVR często
    korzysta z PROGMEM, to potem jej przeniesienie na PIC32 (albo nawet
    ośmiobitowe PIC-e, z uwagi na inną obsługę stałych we flashu) potrafi
    być nieco kłopotliwe. Niemniej nie jest to czymś, co wymagałoby jakiejś
    długiej nauki i zrozumienia skomplikowanych treści. ;)


  • 9. Data: 2016-02-06 10:48:02
    Temat: Re: Różnice między mikrokontrolerami
    Od: Marek <f...@f...com>

    On Sat, 6 Feb 2016 08:22:32 +0100, Atlantis <m...@w...pl>
    wrote:
    > To jest oczywiste i faktycznie - jeśli biblioteka pisana pod AVR
    często
    > korzysta z PROGMEM, to potem jej przeniesienie na PIC32 (albo nawet
    > ośmiobitowe PIC-e, z uwagi na inną obsługę stałych we flashu)
    potrafi
    > być nieco kłopotliwe.

    Dlaczego? Wystarczy zrobić
    #define PROGMEM
    i atrybut będzie zignorowany. Zobacz w Compiler.h jak to jest
    zrobione, ten sam kod w MLA może być kompilowany przez kompilatory
    8/32 bit.Dla pic32 tego typu atrybuty stają się wtedy przezroczyste.

    --
    Marek


  • 10. Data: 2016-02-06 11:18:29
    Temat: Re: Różnice między mikrokontrolerami
    Od: Sebastian Biały <h...@p...onet.pl>

    On 2016-02-06 10:48, Marek wrote:
    > Dlaczego? Wystarczy zrobić
    > #define PROGMEM

    A co zrobisz z pgm_read_float, pgm_read_byte i okolicą?

strony : [ 1 ] . 2 ... 5


Szukaj w grupach

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: