Próbuję zrozumieć niektóre kod sterownika jądra Linux napisany w C dla karty USB Wi-Fi. Linia w pliku /drivers/net/wireless/rtl818x/rtl8187/dev.c
1456
(na wszelki wypadek, gdyby ktoś chciał odnieść się do kodu jądra dla kontekstu) brzmi:Kod C, dlaczego adres 0xFF00 jest przesyłany do struktury?
priv->map = (struct rtl818x_csr *)0xFF00;
Jestem ciekaw, co dokładnie prawy argument jest tu robi - (struct rtl818x_csr *)0xFF00;
. Interpretowałem to jako mówiąc "adres pamięci wylewki o adresie 0xFF00
jako typu rtl818x_csr
, a następnie przypisz go do priv->map
". Jeśli moja interpretacja jest prawidłowa, co jest takiego szczególnego w adresie pamięci 0xFF00
, że kierowca może niezawodnie stwierdzić, że to, o co chodzi, będzie zawsze pod tym adresem? Inną ciekawostką jest to, że 0xFF00 ma tylko 16 bitów. Oczekiwałbym 32/64-bitów, jeśli przesyła adres pamięci.
Czy ktoś może dokładnie wyjaśnić, co się dzieje w tym wierszu kodu? Wyobrażam sobie, że w moim zrozumieniu składni C jest błąd.
Wygląda na to, że rejestr sterowania/stanu mikroukładu RTL818x jest odwzorowany w pamięci na adres 0xFF00. –