[elektro] A szokásos C kezdő kérdések

Skandar Graun sgraun at gmail.com
Wed Jan 30 18:48:50 CET 2013


Bejött, köszönöm.
Valamint mindenkinek.

Bali Zoltan <eltexto at freemail.hu> írta (2013. január 30. 18:21):
> Hali!
> Bár nem használok PIC -et, de
> ha jól gondolom, ez MPLAB C és jól látom a
> doksiban itt is van packed attrib, használd ezzel.
> A manuálból idézek:
> struct foo
> {
> char a;
> int x[2] __attribute__ ((packed));
> };
>
> Üdv.  Zoli
>
> 2013. 01. 30. 17:53 keltezéssel, Skandar Graun írta:
>> Na, megküzdöttem vele.
>> A láncolt listák nagyon szépek, de tökéletesen nem ideillők.
>> Jelenleg egy érdekes állapotban leledzik a dolog.
>> Ami hiba nélkül lefordult és elsőre nagyjából megy is, az a következő:
>>
>> typedef union  sertomb
>>    {
>>            struct
>>            {
>>            unsigned char kezdet;
>>            int act_set_ser;
>>            int stb_set_ser;
>>            int stat_ser;
>>                 unsigned char crcout;
>>            };
>>    }sertomb;
>>
>>    sertomb tomb_crc;
>>
>> A feltöltés és a kivitel:
>>
>>                       if (kellsoros)
>>                       {
>>                               tomb_crc.kezdet = 0x55;
>>                               tomb_crc.act_set_ser = 0x3231;
>>                               tomb_crc.stb_set_ser = 0x3433;
>>                               tomb_crc.stat_ser = 0x3635;
>>                               tomb_crc.crcout = 0x37;
>>                               UART2_PutChar( (unsigned char*)&tomb_crc, 8 );
>>                               Uart2_CRLF();
>>                               kellsoros = 0;
>>                       }
>>
>> A kiveteli rutinok:
>> void UART2_PutChar( unsigned char *data, unsigned char count )
>> {
>>       while ( count )
>>       {
>>               while(U2STAbits.UTXBF == 1);
>>               U2TXREG = *data++;
>>               count --;
>>       }
>> }
>> void Uart2_CRLF(void)
>> {
>>               while(U2STAbits.UTXBF == 1);
>>               U2TXREG = 10;
>>               while(U2STAbits.UTXBF == 1);
>>               U2TXREG = 13;
>> }
>>
>> A processzor pic24f sorozat.
>>
>> De a végeredmény érdekes:
>>
>>
>> U[00]123456
>>
>> Ez nekem azt mutatja, hogy hiába tettem be előre egy unsigned char-t
>> és utána az int típusokat, a pointer erre tesz nagyívben és mivel a
>> kontroller 16 bites, ezért szolgaian viszi ki az alsó-felső byte-okat
>> Csak így jelenleg az utolsó char byte-ot nem viszi ki, hiszen
>> elfogyott a cuklusváltozó...
>> Ha nagyon kell, ezzel már tudok együtt élni, csak nem elegáns...
>> Próbáltam union helyett sima struct szerkezettel is, de ugyanezzel az
>> eredménnyel.
>> Mit kellene csinálni?
>>
>> -----------------------------------------
>>            elektro[-flame|-etc]
>>
>>
>>
>
> -----------------------------------------
>           elektro[-flame|-etc]



More information about the Elektro mailing list