eGospodarka.pl
eGospodarka.pl poleca

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

  • 41. Data: 2016-02-09 11:40:44
    Temat: Re: Różnice między mikrokontrolerami
    Od: slawek <f...@f...com>

    On Sun, 7 Feb 2016 11:28:05 +0100, "J.F."
    <j...@p...onet.pl> wrote:
    > Osobna pamiec programu ... program w C

    FYI Microsoft Windows od wersji 1.0 pozwala określić kod jako
    DISCARDABLE, co umożliwia wywalenie go z RAM.

    Ogólnie mylicie teoretyczne koncepcje architektury (HarVard wow!) z
    tym że komputery są jakie są (np. pamięć slow i fast w Amidze) i nie
    zawsze w praktyce jest tak prosto.

    Język C ma standard. I ten standard jest po to aby nie trzeba było
    zgłębiać architektury procesora, znać rozkazy czy wiedzieć czy dysk
    jest magnetyczny czy SSD. Jeżeli w programie będzie const int, to
    kompilator ma się zatroszczyć o to co z tym zrobić.


  • 42. Data: 2016-02-09 11:45:46
    Temat: Re: Różnice między mikrokontrolerami
    Od: slawek <f...@f...com>

    On Tue, 9 Feb 2016 00:53:13 +0100, "J.F."
    <j...@p...onet.pl> wrote:
    > Podobnie w C nie mogles napisac funcji, ktora by dostala adres portu
    > jako parametr. Musial byc staly i znany juz w czasie kompilacji.

    Bo nie można było użyć switch ew. zwykłego if ???


  • 43. Data: 2016-02-09 12:29:55
    Temat: Re: Różnice między mikrokontrolerami
    Od: "J.F." <j...@p...onet.pl>

    Użytkownik "slawek" napisał w wiadomości grup
    dyskusyjnych:a...@n...v.pl
    ...
    On Tue, 9 Feb 2016 00:53:13 +0100, "J.F."
    <j...@p...onet.pl> wrote:
    >> Podobnie w C nie mogles napisac funcji, ktora by dostala adres
    >> portu
    >> jako parametr. Musial byc staly i znany juz w czasie kompilacji.

    >Bo nie można było użyć switch ew. zwykłego if ???

    Mozna bylo, ale nadal adres musial byc znany z gory i tylko kilka
    dostepnych do wyboru.
    No chyba, ze chcesz switch na wszystkie mozliwe 256 adresow :-)

    A tak prawde mowiac ... kto wie, czy nie efektywniej bylo skopiowac
    tych kilka procedur niz dorabiac switcha w srodku ...

    J.











  • 44. Data: 2016-02-10 19:14:10
    Temat: Re: Różnice między mikrokontrolerami
    Od: mk <reverse_lp.pw@myzskm>

    W dniu 2016-02-06 00:08, Grzegorz Kurczyk pisze:
    > 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.

    Wstępnie zaznaczę, że nie znam kompletnie AVRGCC...

    Jeśli tak jest, że w AVRGCC *nie da się* zmienną wskaźnikową wskazać raz
    na obiekt w pamięci programu, a potem na obiekt w pamięci zmiennych, to
    jest to tylko ułomność owego AVRGCC. MCS-51 miał jeszcze bardziej
    porypany model pamięci i do każdej z nich trzeba było się odwoływać
    innymi instrukcjami maszynowymi. Niemniej kompilator Keila bez problemu
    sobie z tym radził i standardowe wskaźniki C były implementowane w taki
    sposób, że takim wskaźnikiem do woli można skakać pomiędzy różnymi
    rodzajami pamięci MCS-51. Standard C nie wymusza, że wskaźnik musi być
    li tylko adresem. Wskaźnik jak najbardziej może przechowywać dodatkowe
    informacje pozwalające na dobranie się do wskazywanego obiektu bez
    żadnych dwuznaczności.
    W kompilatorze Keila na MCS-51 wskaźnik zajmował trzy bajty -- jedno
    pole 8-bit typu pamięci + 16-bitowy adres. Oczywiście były też
    niestandardowe wskaźniki służące do pokazywania tylko w wybranym typie
    pamięci -- to dla tych co lubią/potrzebują optymalizować kod.

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

    Napomnę o Modified Harvard Architecture, współcześnie
    najpopularniejszej, łączącej wspólną przestrzeń adresową i korzyści
    posiadania dwóch (a może i jeszcze więcej) magistral.

    pzdr
    mk


  • 45. Data: 2016-02-10 21:09:33
    Temat: Re: Różnice między mikrokontrolerami
    Od: janusz_k <J...@o...pl>

    W dniu 2016-02-09 o 00:53, J.F. pisze:
    > Dnia Mon, 8 Feb 2016 21:28:14 +0100, janusz_k napisał(a):
    >> W dniu 2016-02-07 o 22:15, J.F. pisze:
    >>>>> 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.
    >>>
    >>> Przestrzen wspolna, adresacja jedna, ale i tu moze segmentacja
    >>> namieszac. Ktos jeszcze pamieta te modele pamieci w C - tiny, small,
    >>> huge .. 6 ich bylo :-(
    >> Pewnie, pisałem na nie. Co nie zmienia faktu że można było wpisać
    >> dowolny adres i pobrać dane czy zapisać z całej pamięci RAM,
    >
    > W modelu small byl jednak segment kodu, segment danych, a
    > adres/wskaznik tylko 16 bitow liczyl.
    Ale segment mogłes zmienić, oczywiście nie było to atomatyczne, trzeba
    było załadować rejestr segmentu ale się dało.
    >
    >>>>> 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.
    >>>
    >>> Poniekad ten sam problem, tylko w jeszcze innym miejscu.
    >>> taki 8080 nie mial np adresacji in/out posredniej czy przez rejestr,
    >>> tylko wpisany w rozkaz, - co uniemozliwialo zadanie adresu parametrem
    >>> - musial byc z gory okreslony.
    >>
    >> Jarku sprawdz zanim napiszesz, cytuję:
    >> "Other Instructions
    >>
    >> IN Port Data from Port placed in A register.
    >> OUT Port Data from A register placed in Port."
    >>
    >> http://fms.komkon.org/comp/CPUs/8080.txt
    >
    > No - dane byly w rejestrze A, a adres portu ?
    > W drugim bajcie rozkazu.
    A tak masz rację, pomyliło mi się z innym prockiem :)


    --
    Pozdr

    Janusz_K


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

    Użytkownik "janusz_k" napisał w wiadomości grup
    dyskusyjnych:n9g5du$12te$...@g...aioe.org...
    W dniu 2016-02-09 o 00:53, J.F. pisze:
    >>>>>> 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.
    >>>> Przestrzen wspolna, adresacja jedna, ale i tu moze segmentacja
    >>>> namieszac. Ktos jeszcze pamieta te modele pamieci w C - tiny,
    >>>> small,
    >>>> huge .. 6 ich bylo :-(
    >>> Pewnie, pisałem na nie. Co nie zmienia faktu że można było wpisać
    >>> dowolny adres i pobrać dane czy zapisać z całej pamięci RAM,
    >> W modelu small byl jednak segment kodu, segment danych, a
    >> adres/wskaznik tylko 16 bitow liczyl.
    >Ale segment mogłes zmienić, oczywiście nie było to atomatyczne,
    >trzeba było załadować rejestr segmentu ale się dało.

    W assemblerze sie dalo, bo w C/model small to nie bardzo.
    Owszem, wskaznik mogles zadeklarowac huge czy jakos tak, ale funkcje
    biblioteczne przyjmowaly parametry small.

    J.


  • 47. Data: 2016-02-13 16:46:40
    Temat: Re: Różnice między mikrokontrolerami
    Od: janusz_k <J...@o...pl>

    W dniu 2016-02-10 o 21:25, J.F. pisze:
    > Użytkownik "janusz_k" napisał w wiadomości grup
    > dyskusyjnych:n9g5du$12te$...@g...aioe.org...
    > W dniu 2016-02-09 o 00:53, J.F. pisze:
    >>>>>>> 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.
    >>>>> Przestrzen wspolna, adresacja jedna, ale i tu moze segmentacja
    >>>>> namieszac. Ktos jeszcze pamieta te modele pamieci w C - tiny, small,
    >>>>> huge .. 6 ich bylo :-(
    >>>> Pewnie, pisałem na nie. Co nie zmienia faktu że można było wpisać
    >>>> dowolny adres i pobrać dane czy zapisać z całej pamięci RAM,
    >>> W modelu small byl jednak segment kodu, segment danych, a
    >>> adres/wskaznik tylko 16 bitow liczyl.
    >> Ale segment mogłes zmienić, oczywiście nie było to atomatyczne, trzeba
    >> było załadować rejestr segmentu ale się dało.
    >
    > W assemblerze sie dalo, bo w C/model small to nie bardzo.
    > Owszem, wskaznik mogles zadeklarowac huge czy jakos tak, ale funkcje
    > biblioteczne przyjmowaly parametry small.
    Ja akurat pisałem w asemblerze więc nie był to problem :)

    --
    Pozdr

    Janusz_K

strony : 1 ... 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: