Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 18 maja 2026, o 04:20


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 
Autor Wiadomość
PostNapisane: 22 gru 2013, o 17:00 
Offline
Nowy

Dołączył(a): 16 kwi 2013
Posty: 8
Pomógł: 0

Witam serdecznie.
Czy mógł by mi ktoś wytłumaczyć na czym polegają takie definicje i dlaczego składnia wygląda tak jak wygląda. Dlaczego jest tam wskaźnik i jak to się dzieje że program wie pod jaki adres wskoczyć do danego rejestru?

Mam na myśli coś takiego
Kod:
#define _MMIO_BYTE(mem_addr) (*(volatile uint8_t *)(mem_addr))
#define _MMIO_WORD(mem_addr) (*(volatile uint16_t *)(mem_addr))
#define _MMIO_DWORD(mem_addr) (*(volatile uint32_t *)(mem_addr))


Aby zdefiniować nazwę rejestru to jest jakaś predefinicja która używa jakiejś innej itd..

Dziękuję za pomoc.

Pozdrawiam,
Marek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 22 gru 2013, o 17:25 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 sie 2013
Posty: 199
Pomógł: 1

po przepisaniu na funckcje dla gcc
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


wskaźnik na rejestr z pod adresem mem_addr
void* <--- wskazanie na adres bez okreslenia konkretnego typu (rozmiaru?)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 gru 2013, o 19:21 
Offline
Nowy

Dołączył(a): 16 kwi 2013
Posty: 8
Pomógł: 0

Czyli to jest tylko wskaźnik na jakiś rejestr w pamięci mikrokontrolera?
A co da mi wywołanie tego w programie z jakimś konkretnym adresem "_MMIO_BYTE(mem_addr)" ? Wynik tego mogę przypisać do czegoś??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 gru 2013, o 13:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 sie 2013
Posty: 199
Pomógł: 1

jak to co ?

opis z wikipedi

Cytuj:
Dereferencja – zamiana referencji lub wskaźnika (identyfikatora obiektu lub adresu zmiennej) na wartość przechowywaną wewnątrz tego obiektu lub tej zmiennej. W większości języków programowania operator dereferencji nie występuje jawnie, lecz jest implikowany przez inne operatory, np. w wyrażeniu X+1 referencja do zmiennej X zostaje automatycznie zamieniona na wartość przechowywaną wewnątrz tej zmiennej z powodu kontekstu (którym jest operator +). W programowaniu obiektowym pojęcie dereferencji wymaga zdefiniowania pojęcia wartości obiektu, co rodzi pewne problemy semantyczne.


makro to daje że bedziesz mógł w swoim programie w łatwy sposób manipulować tym rejestrem
w praktyce prawie nigdy nie musisz tego wywoływać bezposrednio , dlatego ze mozesz sie posłużyć
bardziej oczywistą formą

porównaj wyciagnij wnioski z tego pogróbionego fragm. a tego makra
#define _SFR_IO8(io_addr) _MMIO_BYTE((io_addr) + __SFR_OFFSET)

tu jest tez do poczytania dereferencja



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 4 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO