Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
gdyprogramymusząmiećdostępdookreślonychadresówzycznych,jakROMczyre-
jestrytypuMMIO(ang.„memory-mappedI/O”).
Gdyprzekształcamywskaźnikwtypcałkowity,któregozakresjestniewystarczają-
cydoreprezentowaniawartościwskaźnika,wynikoperacjijestnieokreślony.Natomiast
odwrotnie,przekształcenietypucałkowitegowtypwskaźnikowyniezawszezwracapra-
widłowywskaźnik.Plikstdint.hmożeopcjonalniedefiniowaćtypycałkowite
intptr-t
(zeznakiem)iuintptr-t(bezznaku).Dojednegoztychtypówmożnaprzekształcićdo-
wolnyprawidłowywskaźnik,zaśprzydalszymprzekształceniuzpowrotemdowskaźnika
gwarantowanejestuzyskanieoryginalnegowskaźnika.Dlategojeśliplikstdint.hdefiniuje
tetypy,należyichużywaćzawsze,gdytylkozamierzamydokonywaćprzekształceńmiędzy
wskaźnikamiitypamicałkowitymi.
Otokilkaprzykładów:
floatx:1.5F,*fPtr:&x;//Zmiennafloat,iwskaźnikdoniej.
//Zapisaniewartościwskaźnikajakotypucałkowitego:
unsignedlonglongadr-val:(unsignedlonglong)fPtr;
//Lub,jeślidołączonyjestplikstdint.hijeślizdefiniowany
//jesttypuintptr_t:
uintptr-tadr-val:(uintptr-t)fPtr;
/*
*NakomputerachPCzprocesoremIntelx86PCzsystememDOS,
*blokdanychBIOS-urozpoczynasięodadresu0x0040:0000.
*PierwszedwubajtowesłowowtymmiejscuzawieraadresI/O
*portuszeregowegoCOM1.
*(Kompilacjazwykorzystaniemmodelupamięcitypu"large"
*systemuDOS.)
*/
unsignedshort*biosPtr:(unsignedshort*)0x400000L;
unsignedshortcom1-io:*biosPtr;//Pierwszesłowozawiera
//adresI/OportuCOM1.
printf("COM1maadres...I/O%Xh.\n",com1-io);
Ostatnietrzyinstrukcjepozwalająuzyskaćinformacjeokonfiguracjisprzętowejztabli-
cydanychsystemowych,zakładając,żeśrodowiskooperacyjneumożliwiaprogramom
dostępdotegoobszaruwpamięci.WprogramiedlasystemuDOS,skompilowanym
zwykorzystaniemmodelunlarge”wskaźniki32-bitoweiprzechowująadressegmentu
wstarszych16bitachorazprzesunięciewmłodszych16bitach(zwyklezapisywanejest
towpostacisegment:przesunięcie).DlategowskaźnikbiosPtrwpowyższymprzykła-
dziemożnazainicjalizowaćzapomocąstałejtypulongint.
70
|
Rozdział4:Przekształceniatypów