Re: Jak to v C++ napsat líp?

Jan Waclawek konfera na efton.sk
Čtvrtek Srpen 31 12:50:46 CEST 2023


Toto je povodny program (po doplneni "obalu"):

int A[2];

int main(void) {
  A[0] = ('A' << 8) | 'B';
  A[1] = ('C' << 8) | 'D';

  while(1);
}


a takto sa prelozi:
  11               	main:
  12               	/* prologue: function */
  13               	/* frame size = 0 */
  14               	/* stack size = 0 */
  15               	.L__stack_usage = 0
  16 0000 82E4      		ldi r24,lo8(66)
  17 0002 91E4      		ldi r25,lo8(65)
  18 0004 9093 0000 		sts A+1,r25
  19 0008 8093 0000 		sts A,r24
  20 000c 84E4      		ldi r24,lo8(68)
  21 000e 93E4      		ldi r25,lo8(67)
  22 0010 9093 0000 		sts A+2+1,r25
  23 0014 8093 0000 		sts A+2,r24
  24               	.L2:
  25 0018 00C0      		rjmp .L2

t.j. na adrese (A + 0) je 66 (='B'), (A + 1) je 65 = ('A'), (A + 2) je 68
('D'), (A + 3) je 67 ('C').

To je u mna "BADC".

>Takµe kdyµ se to pak má někam poslat
>client.write((byte*)A,počet_znaků);
>tak je lep±í to psát normálně, ne?

Zase narazame na otazku, co je to "normalne"... :-)

Ak je na druhej strane prijimac, co otaca endianitu 16-bitovych slov, tak
toto prekvapujuco moze byt "normalne". 

S niecim obdobnym bojuje clovek, ak pouziva I2S, kde sa po zbernici prenasa
vzorka (jedneho z dvoch striedajucich sa kanalov) ako 32 bitov (MSB first,
LSB 8 bitov su nuly), SPI/I2S v STM32 to prijme ako dve 16-bitove slova a
cez DMA to "nejako" ulozi do pamate; odkial to treba vhodne vyzdvihnut a
ako 24 bitov poslat cez USB...

wek


----- Original Message ---------------

>Proč by měl pouµívat "BADC"? Ve výpisu assembleru se mi zdálo, µe ty bajty nepřehazuje (a tak by to taky mělo být).
>Takµe kdyµ se to pak má někam poslat
>client.write((byte*)A,počet_znaků);
>tak je lep±í to psát normálně, ne?
>
>Nebo mi něco uniká, či je něco jinak?
>P.
>
>
>Jan Waclawek napsal(a) dne 31. 08. 23 v 10:25:
>> ...
>> Vsimnite si, ze znova kvoli endianite bolo treba pouzit 
>> memcpy((unsigned char *)A, "BADC", 4);



Další informace o konferenci Hw-list