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

Skandar Graun sgraun at gmail.com
Wed Jan 30 17:53:43 CET 2013


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?



More information about the Elektro mailing list