eGospodarka.pl
eGospodarka.pl poleca

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

  • 21. Data: 2016-02-07 10:43:08
    Temat: Re: Różnice między mikrokontrolerami
    Od: Sebastian Biały <h...@p...onet.pl>

    On 2016-02-07 02:20, Marek wrote:
    > Ale to ja wiem, odpowiedz nie na temat.
    > Pytam po co te pgm_costam?

    Ponieważ o ile pamietam dla gcc pointer jest tylko "wartością" i nie
    zawiera innych znaczeń. To ogranieczenie pochodzi z faktu że developing
    gcc odbywał się na w miarę normalnych architekturach gdzie nie był to
    kłopot i tak zostało.

    Problem tak naprawde nie jest w gcc tylko w C/C++ (np wskaźnik na
    funkcje nie jest kompatybilny z void* [1] co jest zrobione m.in. z
    powodu jakiś dziwacznych architektur).

    > Wewnetrznie kompilator wie

    Nie wie. Byly próby aby się dowiedział w postaci propozycji zmiany.
    Zdaje się że nie udało się wpuscić tego do mainstream, spodziewam się że
    takie ficzery trafią wcześniej do clang. Nie mogę teraz znaleźć pdfa
    który tą zmianę prezentował, jak znajdę to go tu wrzucę.

    [1]
    http://stackoverflow.com/questions/12358843/why-are-
    function-pointers-and-data-pointers-incompatible-in-
    c-c



  • 22. Data: 2016-02-07 11:28:05
    Temat: Re: Różnice między mikrokontrolerami
    Od: "J.F." <j...@p...onet.pl>

    Dnia Sat, 6 Feb 2016 00:08:06 +0100, Grzegorz Kurczyk napisał(a):
    > 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.

    Przy czym zauwaz, ze to jest luzno zwiazane z "harvardowoscia".

    Osobna pamiec programu ... program w C w zasadzie programu nie rusza,
    a tam gdzie rusza (adres funkcji), tam kontekst jest z gory ustalony.

    Problemem sa dane przechowywane w pamieci programu.
    Cos w zasadzie sprzeczne z harwardowoscia :-)

    C sie z tym boryka od dawna - byl chocby segment danych
    niezainicjowanych i zainicjowanych czy nawet stalych.

    Oczywiscie w uC przez dlugi czas bylo malo pamieci, co zachecalo do
    uzycia ROM, z drugiej strony ROM jest wolny, a RAM szybki, co zacheca
    do przepisania programu do RAM. Nawet jesli to specjalny RAM,
    wydzielony tylko na program :-)

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

    Harvard Harvardem, ale w co bardziej uniwersalnych systemach jest
    potrzeba aby program tworzyl program do wykonania w RAM, czy nawet
    zaczytywal go z dysku. I dostep do pamieci programu musi byc, nawet
    jesli to pamiec specjalna.

    J.


  • 23. Data: 2016-02-07 11:30:34
    Temat: Re: Różnice między mikrokontrolerami
    Od: "J.F." <j...@p...onet.pl>

    Dnia Sat, 6 Feb 2016 11:18:29 +0100, Sebastian Biały napisał(a):
    > 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ą?

    #define na najprostsza konstrukcje "zwyklego C" ?

    J.



  • 24. Data: 2016-02-07 11:39:14
    Temat: Re: Różnice między mikrokontrolerami
    Od: "J.F." <j...@p...onet.pl>

    Dnia Sun, 07 Feb 2016 02:20:45 +0100, Marek napisał(a):
    > On Sat, 6 Feb 2016 20:48:17 +0100, Sebastian
    > Biały<h...@p...onet.pl> wrote:
    >> Obsluga pamięci ROM i RAM wymaga dwóch różnych instrukcji
    > maszynowych.
    >
    > Ale to ja wiem, odpowiedz nie na temat.
    > Pytam po co te pgm_costam?

    No przeciez wiesz - zeby program w C wiedzial, gdzie czytac

    > Jak user chce tabklice we flash to ustawia, jej specjalny atrybut
    > przy definicji/deklaracji i to wszystko. A dalejj czyta ją przez
    > tab[ndex] lub przez wskaźnik.

    No w zasadzie tak. Moze to poklosie wczesniejszych czasow, gdy
    kompilator byl glupszy ?
    A moze jednak ma zalety, takie bezposrednie podkreslenie, ze tu jest
    cos inaczej, a nie - zdefiniowane trzy strony wczesniej.

    J.


  • 25. Data: 2016-02-07 12:22:29
    Temat: Re: Różnice między mikrokontrolerami
    Od: Sebastian Biały <h...@p...onet.pl>

    On 2016-02-07 11:30, J.F. wrote:
    >>> Dlaczego? Wystarczy zrobić
    >>> #define PROGMEM
    >> A co zrobisz z pgm_read_float, pgm_read_byte i okolicą?
    > #define na najprostsza konstrukcje "zwyklego C" ?

    Pytanie co zrobisz gdy portujesz harvard->harvard i obie implementacje
    radośnie wymysliły własny lepszy sposób na grzebanie w rom.


  • 26. Data: 2016-02-07 12:57:03
    Temat: Re: Różnice między mikrokontrolerami
    Od: janusz_k <J...@o...pl>

    W dniu 2016-02-07 o 02:20, Marek pisze:
    > On Sat, 6 Feb 2016 20:48:17 +0100, Sebastian Biały<h...@p...onet.pl>
    > wrote:
    >> Obsluga pamięci ROM i RAM wymaga dwóch różnych instrukcji
    > maszynowych.
    >
    > Ale to ja wiem, odpowiedz nie na temat.
    > Pytam po co te pgm_costam?
    > Jak user chce tabklice we flash to ustawia, jej specjalny atrybut przy
    > definicji/deklaracji i to wszystko. A dalejj czyta ją przez tab[ndex]
    > lub przez wskaźnik.
    No ale Ci tłumaczą wszyscy że w avr-ach nie czyta, musi czytać przez
    pgr_read_xxx(tab[index]), to jest konsekwencja innego dostępu do pam
    programu która pokrywa się adresami z pamięcią ram.

    > Wewnetrznie kompilator wie z jakim rodzajem pamięci ma do czynienia i
    > stosuje odpowiednie instrukcje.
    Nie, nie wie, to ty mu okreslasz skąd ma czytać.



    --
    Pozdr

    Janusz_K


  • 27. Data: 2016-02-07 13:03:39
    Temat: Re: Różnice między mikrokontrolerami
    Od: janusz_k <J...@o...pl>

    W dniu 2016-02-07 o 08:28, slawek pisze:
    > On Sat, 6 Feb 2016 00:08:06 +0100, Grzegorz Kurczyk
    > <g...@c...usun.slupsk.pl> wrote:
    >> AVR ma oddzielną pamięć programu i danych co powoduje, że np do
    >
    > Intel x86 też ma oddzielnie segmenty kodu i danych. I co? I jakoś z tym
    > żyjemy.

    To kompilator ma a nie procek, x86 od zawsze miały wspólną przestrzeń
    danych i programu. Te segmenty są na siłę robione i to dopiero ostatnimi
    czasy jak się pojawiły wirusy korzystające z przepełnienia
    stosu.

    > Intel x86 też ma oddzielne instrukcje mov i in.
    Łaskawco rozrózniaj instrukcje dostępu do pamięci "mov" od instrukcji
    we/wy "in", bo jak na razie to mieszasz pojęcia.

    --
    Pozdr

    Janusz_K


  • 28. Data: 2016-02-07 13:05:01
    Temat: Re: Różnice między mikrokontrolerami
    Od: Marek <f...@f...com>

    On Sun, 7 Feb 2016 12:57:03 +0100, janusz_k <J...@o...pl> wrote:
    > Nie, nie wie, to ty mu okreslasz skąd ma czytać.

    Pisałem ogólnie o kompilatorach, np. sdcc umie, stąd nie widziałem,
    że gcc-avr ma z tym problem, ale już Sebastian wyłuszczył dlaczego.

    --
    Marek


  • 29. Data: 2016-02-07 20:06:47
    Temat: Re: Różnice między mikrokontrolerami
    Od: Zbych <z...@o...pl>

    W dniu 2016-02-07 o 10:43, Sebastian Biały pisze:
    > On 2016-02-07 02:20, Marek wrote:
    >> Ale to ja wiem, odpowiedz nie na temat.
    >> Pytam po co te pgm_costam?
    >
    > Ponieważ o ile pamietam dla gcc pointer jest tylko "wartością" i nie
    > zawiera innych znaczeń. To ogranieczenie pochodzi z faktu że developing
    > gcc odbywał się na w miarę normalnych architekturach gdzie nie był to
    > kłopot i tak zostało.

    GCC jakiś czas temu nauczyło się rozróżniać przestrzenie adresowe:
    https://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spa
    ces.html


  • 30. Data: 2016-02-07 20:39:36
    Temat: Re: Różnice między mikrokontrolerami
    Od: Sebastian Biały <h...@p...onet.pl>

    On 2016-02-07 20:06, Zbych wrote:
    > GCC jakiś czas temu nauczyło się rozróżniać przestrzenie adresowe:
    > https://gcc.gnu.org/onlinedocs/gcc/Named-Address-Spa
    ces.html

    To nie wystarczy. Np. w przypadku AVR każda funkcja przyjmująca wskaźnik
    musiala by się generować osobno dla każdej kombinacji typów
    wskaźnikowych jakie w programie wystąpią. Dlatego nalezy użyć __flash
    przy wskaźnikowym argumencie funkcji, czyli znowu wychodzi na to że bez
    rękodzieła ani rusz.

strony : 1 . 2 . [ 3 ] . 4 . 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: