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: "J.F." <j...@p...onet.pl>
    Newsgroups: pl.misc.elektronika
    Subject: Re: Obsługa peryferiów poprzez API (wskazniki do struktury)
    Date: Mon, 28 May 2012 21:52:19 +0200
    Organization: "Portal Gazeta.pl -> http://www.gazeta.pl"
    Lines: 58
    Message-ID: <17iecqj6n7af4$.10bdpstyhryoi$.dlg@40tude.net>
    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>
    <jpto68$no7$1@inews.gazeta.pl>
    <9...@v...googlegroups.com>
    NNTP-Posting-Host: h82-143-187-50-static.e-wro.net.pl
    Mime-Version: 1.0
    Content-Type: text/plain; charset="iso-8859-2"
    Content-Transfer-Encoding: 8bit
    X-Trace: inews.gazeta.pl 1338234737 3547 82.143.187.50 (28 May 2012 19:52:17 GMT)
    X-Complaints-To: u...@a...pl
    NNTP-Posting-Date: Mon, 28 May 2012 19:52:17 +0000 (UTC)
    X-User: jjll
    User-Agent: 40tude_Dialog/2.0.15.1pl
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:632091
    [ ukryj nagłówki ]

    Dnia Mon, 28 May 2012 11:13:59 -0700 (PDT), slawek7 napisał(a):
    > Chyba rozumiem. Bo czy to znaczy że jeśli jakiś rejestr 32 bitowy ma
    > możliwość zapisania go wartością 16 bitowa bo tak podaje dokumentacja
    > to chcąc dokonać takiego zapisu liczbą 16 bitową używam rzutowania 16
    > bitowego w postaci (*(uint16_t*)0x40010C10)=0x1234;
    > Natomiast jeśli rejestr musi byc zapisany tylko wartością 32 bitowa bo
    > tak każe dokumentacja to u zywam (*(uint32_t*)0x40010C10)=0x12345678;
    >
    > Ale mam wątpliwość, czy czasem to rzutowanie nie oznacza tylko

    Czyli chyba nie rozumiesz

    0x40010C10
    to liczba. a moze i adres.

    (uint32_t*)0x40010C10
    liczba, zasadniczo ta sama, ale juz typu "wskaznik na cos"

    *(uint32_t*)0x40010C10
    obiekt wskazywany przez ten wskaznik. A poniewaz wskaznik mial wskazywac
    na uint32, to obiekt jest uint32. Albo inny, jesli tak ustalisz.

    (*(uint32_t*)0x40010C10)=0x0000000f;
    a tu masz wpisanie wartosci do obiektu.

    Przy czym moze nastapic kolejna konwersja wyrazenia z prawej strony, na typ
    obiektu z lewej. Np

    (*(uint8_t*)0x40010C10)=0x00001234;
    to zapisze jeden bajt, 34

    (*(uint32_t*)0x40010C10)=0x9f;
    a to zapisze 0000009f, albo ffffff9f :-)

    > arytmetyki wskaźników?
    > Tzn za następny wskazywany obszar bęzie większy
    > albo o 2 bajty albo o 4, jak w przypadku zwykłej arytmetyki wskaźników

    A to oczywiscie tez. Tylko trzeba umiejetnie wykorzystywac.

    > np
    > uint16_t *ptr; // wskaźnik na liczbę 16 bitową
    > teraz zwiększamy adres o jeden ptr++; czyli tak naprawdę wskaźnik
    > skacze o dwa a nie o jeden adres?

    Tylko wiesz ze nie zapiszesz
    ((uint8_t*)0x40010C10)++)

    ani
    ((uint32_t *) ptr)++;

    Za to mozesz sprobowac
    *((uint32_t *)ptr+1)=1 ;

    A na koniec masz zadanie domowe
    (*((uint32_t **) &ptr))++;

    J.

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: