eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronika[ARM] Obsługa peryferiów poprzez API (wskazniki do struktury)Re: Obsługa peryferiów poprzez API (wskazniki do struktury)
  • Path: news-archive.icm.edu.pl!news.gazeta.pl!not-for-mail
    From: Portal <m...@t...poczta.onet.pl>
    Newsgroups: pl.misc.elektronika
    Subject: Re: Obsługa peryferiów poprzez API (wskazniki do struktury)
    Date: Sun, 27 May 2012 19:27:20 +0200
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 41
    Message-ID: <jpto68$no7$1@inews.gazeta.pl>
    References: <f...@f...googlegroups.com>
    <y80629n75j0s$.1q2xhw0muf74c.dlg@40tude.net>
    <a...@q...googlegroups.com>
    <jpqv9u$l13$1@node2.news.atman.pl> <jpr05h$put$1@inews.gazeta.pl>
    <jpr0dm$lnd$2@node2.news.atman.pl>
    <a...@s...googlegroups.com>
    NNTP-Posting-Host: 82-169-97-242.ip.telfort.nl
    Mime-Version: 1.0
    Content-Type: text/plain; charset=ISO-8859-2; format=flowed
    Content-Transfer-Encoding: 8bit
    X-Trace: inews.gazeta.pl 1338139656 24327 82.169.97.242 (27 May 2012 17:27:36 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Sun, 27 May 2012 17:27:36 +0000 (UTC)
    X-User: portalllo
    In-Reply-To: <a...@s...googlegroups.com>
    User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:12.0) Gecko/20120421 Thunderbird/12.0
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:632025
    [ ukryj nagłówki ]

    On 05/27/2012 04:37 PM, slawek7 wrote:
    > Zgadza się to co piszecie i zrozumiałem o co chodzi.
    > Przecież to jest coś takiego
    > (*(uint32_t*)0x40010C10)=0x0000000f;
    > Powoduje to bezpośredni dostęp do rejestru i operację na porcie PB.
    >
    > Natomiast nie rozumiem zapisów które pojawiają się dokumentacji.
    > Adres jest 32 bitowy więc stąd zapewne pierwsze rzutowanie ale pojawia
    > się też informacja że do rejestru można się dostać
    > albo jako word, albo jako half-word, albo jako byte? O co tu chodzi?
    > Jaki adres i jakie rzutowanie wtedy się robi i co jak poda się liczbę
    > word 32 bitową zamiast wymaganą half-word 16 bitową?


    Chyba mylisz trochę postać adresu z typem danych siedzących pod tym adresem.
    Operacja:
    (*(uint32_t*)0x40010C10)=0x0000000f;
    oznacza tyle co zapisz wartość 0x0000000f pod adres 0x40010C10 traktując
    ją (wartość, nie adres) jako liczbę 32-bitową bez znaku.

    Jeżeli zrobisz podobną operację, ale w postaci:
    (*(uint8_t*)0x40010C10)=0x0f;
    to pod ten sam adres zapiszesz tylko pojedynczy bajt, pozostawiając
    pozostałe trzy bajty 32-bitowego słowa zapisanego pod adresem 0x40010C10
    bez zmian.
    Kwestia czy nadpisany zostanie najmniej czy najbardziej znaczący bajt
    słowa zależy od "endianności" systemu - najczęściej jest to little
    endian czyli 0x40010C10 wskazuje na najmniej znaczący bajt słowa,
    0x40010C11 na kolejny i tak aż do 0x40010C13.

    Przy zapisach 16-bitowych możesz analogicznie zapisać tylko pół rejestru
    adresując połówki jako uint16_t pod adresem 0x40010C10 oraz 0x40010C12.
    W większości RISCowych architektur dostęp do danych musi uwzględniać
    wyrównanie tzn. adresy dla 32-bitowych dostępów muszą być
    wielokrotnością czwórki, dla 16-bitowych wielokrotnością dwójki a bajty
    można czytać i pisać "zewsząd" (o ile dany fragment przestrzeni
    adresowej w ogóle uwzględnia możliwość takiego dostępu - w Twoim
    przykładzie jak widać rejestry peryferyjne uwzględniają taką możliwość).

    Pozdr
    Portal

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

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: