Re: GCC sloučení do správného typu

Jindroush jindroush na seznam.cz
Čtvrtek Říjen 7 09:24:33 CEST 2021


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.

-- 
Jindroush <jindroush at seznam.cz>



Další informace o konferenci Hw-list