Arduino - 32 bitu promenna ze 4 byte

Pavel Hudeček edizon na seznam.cz
Středa Prosinec 18 21:28:41 CET 2024


Pardon, chybička se vloudila:-)

Nemělo bejt +1, ale +n.
A to má dost velkej vliv na skóre:

původní: 470, bez 1. shiftu taky 470
upravená: 790, bez toho shiftu ovšem 450.

Všechno ale s -Og. Po zapnutí -Os všechny 4 možnosti 378 :-)

PH

Dne 18.12.2024 v 21:05 Pavel Hudeček napsal(a):
> Je to trochu složitější:-)
>
> int main(void) {
>
>     uint64_t u64;
>     while (1) {
>
>         //u64=0ULL;
>         //u64 <<= 8; u64 |= SIGROW.SERNUM5;
>         u64 <<= 8; u64 = SIGROW.SERNUM5;
>
>         u64 <<= 8; u64 |= SIGROW.SERNUM4;
>         u64 <<= 8; u64 |= SIGROW.SERNUM3;
>         u64 <<= 8; u64 |= SIGROW.SERNUM2;
>         u64 <<= 8; u64 |= SIGROW.SERNUM1;
>         u64 <<= 8; u64 |= SIGROW.SERNUM0;
>
>          // aby byla jistota, že to celý neodoptimalizuje
>         u64++;
>         for (uint8_t n=0; n<8; n++) {
>             PORTA.OUT = *(((uint8_t *)&u64)+1);
>         }
>     }
> }
>
> Zakomentovaná varianta 444 B, vylepšená 478.
>
> Až po odmazání prvního u64 <<= 8; se to zlepší na 442 a původní 
> zůstane na 444.
>
> Takže nakonec je to o 2 B lepší. Ale zas ta původní varianta má snadno 
> modifikovatelné pořadí, což byla základní myšlenka proč jsem to tak 
> napsal.
>
> PH
>
>
> Dne 18.12.2024 v 16:53 Petr Labaj napsal(a):
>> Je zajímavé, že jste oba použili podobnou konstrukci, která je podle 
>> mě suboptimální.
>> Když už jste teda zvolili ty shifty místo nějakých rychlejších možností.
>>
>> První řádek by měl být podle mě dosazovací.
>>
>> Tedy nějak takto:
>> adc_value = (long)d[0] << 24;
>> adc_value += (long)d[1] << 16; ...
>>
>> A u pana Hudečka ještě bez toho úvodního nulování:
>>  u64 <<= 8; u64 = SIGROW.SERNUM5;
>>  u64 <<= 8; u64 |= SIGROW.SERNUM4;
>> ...
>>
>> PL
>>
>> ******************
>>
>> Dne 18.12.2024 v 9:56 Jirka Mww napsal(a):
>>>
>>>  adc_value += (long)d[0] << 24;
>>>  adc_value += (long)d[1] << 16;  adc_value += (long)d[2] << 8;
>>>  adc_value += (long)d[3];
>>>
>>
>> Dne 18.12.2024 v 13:26 Pavel Hudeček napsal(a):
>>> u64=0ULL;
>>>                 u64 <<= 8; u64 |= SIGROW.SERNUM5;
>>>                 u64 <<= 8; u64 |= SIGROW.SERNUM4;
>>>                 u64 <<= 8; u64 |= SIGROW.SERNUM3;
>>>                 u64 <<= 8; u64 |= SIGROW.SERNUM2;
>>>                 u64 <<= 8; u64 |= SIGROW.SERNUM1;
>>>                 u64 <<= 8; u64 |= SIGROW.SERNUM0;
>>
>> _______________________________________________
>> HW-list mailing list  -  sponsored bywww.HW.cz
>> Hw-list na list.hw.cz
>> http://list.hw.cz/mailman/listinfo/hw-list
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored bywww.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20241218/5f02c5e4/attachment-0001.htm>


Další informace o konferenci Hw-list