Unngå å kaste fra volatile statisk uint8_t å uint8_t i funksjonskall?

stemmer
0

Jeg har for tiden denne koden:

static void func( uint8_t var );

static volatile uint8_t foo;

int main() {  
 /* Here we have to cast to uint8_t */  
 func( (uint8_t) foo );

 /* This will not compile */  
 func( foo );  
}

Er det en måte å unngå rollelisten i funksjonskall?

Publisert på 24/09/2009 klokken 18:39
kilden bruker
På andre språk...                            


3 svar

stemmer
0

Du trenger ikke å eksplisitt kaste. Den andre formen er helt gyldig for enhver standard kompatibel C kompilator.

Det er bare noe som dette hvor du trenger å kaste:

static void func( uint8_t *var );

static volatile uint8_t foo;

int main() {  
 /* Here we have to cast to uint8_t */  
 func( (uint8_t*) &foo );

 /* This will not compile */  
 func( &foo );  
}
Svarte 24/09/2009 kl. 18:52
kilden bruker

stemmer
4

Jeg antar du prøver å passere en peker til variabel, og mens du redigerer spørsmålet ditt, fjernet du pekeren erklæring for å forenkle, men også endret spørsmålet ditt. Hvis du passerer en verdi til funksjonen, er det ikke noe problem.

Nå, hvis du passerer en peker, forteller flyktige modifier at kompilatoren skal forvente at verdien av variabelen for å endre av andre enn den kompilerte koden betyr. Du burde ikke passere en flyktig variabel som en ikke-flyktig parameter til en funksjon. Funksjonen selv må endres for å få den flyktige parameter, og rekompileres. Deretter funksjon (med flyktig parameter) er forberedt på å håndtere en flyktig variabel.

Svarte 24/09/2009 kl. 18:55
kilden bruker

stemmer
0
#include <stdint.h>

static void func( uint8_t var ){}

static volatile uint8_t foo;

int main() {
    /* Here we have to cast to uint8_t */
    func( (uint8_t) foo );

    /* This will not compile */
    func( foo );
}

Dette kompilerer for meg å bruke gcc. (Jeg måtte faktisk definere funksjonen, og omfatter topptekstfilen.)

Svarte 24/09/2009 kl. 18:57
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more