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

Bali Zoltan eltexto at freemail.hu
Wed Jan 30 18:31:11 CET 2013


Ja, itt talán éppen rossz helyen van az attrib,
én az egész struktúrára szoktam alkalmazni.
Próbáld a char-ra is.

Az unionnak itt nem sok értelme, csak egy tag van, a struktúra.
Maradhat csak a struktúra.

Üdv.  Zoli

2013. 01. 30. 18:21 keltezéssel, Bali Zoltan írta:
> 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]
>>
>>
>>
>>      
>



More information about the Elektro mailing list