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