c: přetypování

Miroslav Draxal evik na volny.cz
Neděle Leden 13 00:43:26 CET 2019


Dobrý den,

Řeším tady jeden podprogram, který je časově kritický.

 

typedef enum {

               uint8_t value;

               

               struct {

               unsigned prvniBit :1;

               unsigned druhyBit :1;

};

}_KontrolaDataResult_ ;

 

_KontrolaDataResult_ pokus(void){

 

// v podprogramu je cca 10x 

_KontrolaDataResult_ KontrolaDataResult;

KontrolaDataResult.value = 0x19;

return KontrolaDataResult;

}

 

Pokud na to kouknu do asm, dost blbě to tam je optimalizovaný, optimalizace
všechny zapnutý

 

!            _KontrolaDataResult_ KontrolaDataResult;

!            KontrolaDataResult.value = 0x19;

0x7D2E: MOVLW 0x19

0x7D30: MOVWF KontrolaDataResult_2242, ACCESS

!            return KontrolaDataResult;

0x7D32: MOVF KontrolaDataResult_2242, W, ACCESS

0x7D34: RETURN 0

 

prostě to nehodí klasicky

RETLW 0x19

 

Existuje nějaká možnost, jak to přetypovat?  .. Nějak takhle, samozřejmě, že
tohle je totální blbost

return (_KontrolaDataResult_).value 0x19

 

Díky, Míra

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20190113/778afc1b/attachment.html>


Další informace o konferenci Hw-list