/
Forside
/
Teknologi
/
Udvikling
/
C/C++
/
Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn
*
Kodeord
*
Husk mig
Brugerservice
Kom godt i gang
Bliv medlem
Seneste indlæg
Find en bruger
Stil et spørgsmål
Skriv et tip
Fortæl en ven
Pointsystemet
Kontakt Kandu.dk
Emnevisning
Kategorier
Alfabetisk
Karriere
Interesser
Teknologi
Reklame
Top 10 brugere
C/C++
#
Navn
Point
1
BertelBra..
2425
2
pmbruun
695
3
Master_of..
501
4
jdjespers..
500
5
kyllekylle
500
6
Bech_bb
500
7
scootergr..
300
8
gibson
300
9
molokyle
287
10
strarup
270
kantede parantheser i makroer
Fra :
Troels Thomsen
Dato :
22-03-04 08:43
Hvordan er det lige at kantede parantheser i makroer fungerer?
Jeg fandt flg i en header til en Keil 8051 compiler
#define XBYTE ((unsigned char volatile xdata *) 0)
Den skal bruges således (hvis man vil læse en byte fra adresse 0x8000):
char value = XBYTE [0x8000]
("xdata" er vist et segment / beskyttet ord, det farves blåt af ide'et)
Argumentet erstatter åbenbart nullet?
Altså noget i denne stil:
#define myXBYTE(addr) ((unsigned char volatile xdata *) addr)
char myValue = XBYTE(0x8000)
mvh Troels
Byrial Jensen (
22-03-2004
)
Kommentar
Fra :
Byrial Jensen
Dato :
22-03-04 16:07
Troels Thomsen wrote:
> Hvordan er det lige at kantede parantheser i makroer fungerer?
Kantede parenteser bruges ikke i forbindelse med makroer.
> Jeg fandt flg i en header til en Keil 8051 compiler
> #define XBYTE ((unsigned char volatile xdata *) 0)
Det er tallet 0 konverteret (casted) til en pointer.
> Den skal bruges således (hvis man vil læse en byte fra adresse 0x8000):
> char value = XBYTE [0x8000]
> ("xdata" er vist et segment / beskyttet ord, det farves blåt af ide'et)
>
> Argumentet erstatter åbenbart nullet?
[0x8000] er ikke et argument til makroen. Makroen ekspanderer til en
pointer, og [0x8000] er en indeksering af pointeren.
> Altså noget i denne stil:
>
> #define myXBYTE(addr) ((unsigned char volatile xdata *) addr)
> char myValue = XBYTE(0x8000)
Nej. Hvis du vil bruge adressen som makro-argument ser det sådan her ud:
// Indeksér en 0-pointer med addr
#define MY_XBYTE(addr) (((unsigned char volatile xdata *) 0)[addr])
unsigned char myValue = MY_XBYTE(0x8000);
Eller eventuelt sådan her:
// Konvertér addr til pointer og dereferér
#define MY_XBYTE2(addr) (*((unsigned char volatile xdata *)(addr)))
unsigned char myValue2 = MY_XBYTE2(0x8000);
Frederik Hertzum (
22-03-2004
)
Kommentar
Fra :
Frederik Hertzum
Dato :
22-03-04 20:04
Byrial Jensen wrote:
> Troels Thomsen wrote:
>> Hvordan er det lige at kantede parantheser i makroer fungerer?
>
> Kantede parenteser bruges ikke i forbindelse med makroer.
Makroer bliver ekpanderet til programkode (c), før programmet bliver
compilet og linket, af preprocessorern, og bliver derfor brugt i makroer
nøjagtig som enhver anden stump c-kode.
Troels Thomsen (
25-03-2004
)
Kommentar
Fra :
Troels Thomsen
Dato :
25-03-04 10:02
Ok, de kantede er bare en slags array indexsering
> #define myXBYTE(addr) ((unsigned char volatile xdata *) addr)
>> // Konvertér addr til pointer og dereferér
>> #define MY_XBYTE2(addr) (*((unsigned char volatile xdata *)(addr)))
>> unsigned char myValue2 = MY_XBYTE2(0x8000);
>>
(ja det var vist dette jeg prøvede på)
mvh tpt
Søg
Alle emner
Teknologi
Udvikling
C/C++
Indstillinger
Spørgsmål
Tips
Usenet
Reklame
Statistik
Spørgsmål :
177558
Tips :
31968
Nyheder :
719565
Indlæg :
6408920
Brugere :
218888
Månedens bedste
Årets bedste
Sidste års bedste
Copyright © 2000-2024 kandu.dk. Alle rettigheder forbeholdes.