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

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


Nerozumim. Pokud je na vychozi platforme ten int16_t znamenkovy, tj. 2 
komplement a na cilove platforme rovnez int16_t, tj. 2 komplement, tak 
tyhle pankacoviny se znamenkem nejsou treba, ne? Bude to tema shiftama 
fungovat out-of-box podle meho - tj. v res bude signed 16 bit integer se 
spravnym znamenkem, ktery si pak lze uz rozsirit libovolne precastovanim.
J.

On 07.10.2021 9:33, Jaroslav Buchta wrote:
> No a ted to znamenko,
> int16_t i = (int16_t)res;
> Myslim, ze to funguje ale je mi to nejak proti srsti, je to korektni 
> obecne takto napsat?
> Prasarny typu konverze pres ukazatele... nevim.
> Nejcistsi mi prijde:
> int16_t i = (res & 0x8000) ? (int16_t)((int32_t) res - 65536) : 
> (int16_t)res;
> snad jsem se neseknul, prekladac si s tim pri pohledu do ASM poradi 
> vetsinou se cti.
>
> Dne 07.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.
>>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list at list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list


-- 
Jindroush <jindroush at seznam.cz>



Další informace o konferenci Hw-list