Re: GCC sloučení do správného typu
Jindrich Fucik
fulda na seznam.cz
Čtvrtek Říjen 7 09:59:15 CEST 2021
Dne 7.10.2021 v 9:24 Jindroush napsal(a):
> On 07.10.2021 9:03, Jindrich Fucik wrote:
>> mám tu jednu takovou spíš akademickou otázku. Nejprve popíšu
>> prostředí. Hardware je ESP8266, programovaný v Arduino IDE, takže
>> překladač je GCC.
>>
>> ESP je připojeno sériovou linkou do zařízení, které komunikuje
>> sedmibitově. zařízení je založeno na 8bit intel platformě, data jsou
>> tedy integery 16 bit (znaménkové). Při posílání se nejprve posílá MSB,
>> první dva bity, pak prostředních 7 a pak posledních 7 LSB. Data přečtu
>> jako pole "byte" (což je jen alias k unsigned char). Pokud se pokusím
>> to rozepsat po bitech tak je to takto:
>>
>> precteno byte[3]
>> |0 0 0 0 0 0 D15 D14| |0 D13 D12 D11 D10 D9 D8 D7| |0 D6 D5 D4 D3 D2
>> D1 D0|
>>
>> A teď otázka - jak nejefektivněji na tom ESP poskládat zpátky int,
>> který zachová znaménko?
>
> pokud mate int16_t na tom esp, tak asi nejak jako, pokud je zajisteno,
> ze to, co jste vyse napsal jako '0' je vzdy 0.
> int16_t res = ( precteno[0] << 14 ) || ( precteno[1]) << 7 ) ||
> precteno[2];
> Netusim samozrejme, jak drahy je na takovem procesoru shift a v jak
> 'dlouhe' smycce to je.
>
To je právě to, co je na mé otázce akademické. Takhle od boku to napsat
je jednoduché, ale jestli je to ta nejlepší cesta? Jestli se třeba
nevyplatí ten int16_t rozkládat na dva chary a naplnit je samostatně?
Další informace o konferenci Hw-list