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

Jindroush jindroush na seznam.cz
Čtvrtek Říjen 7 10:22:57 CEST 2021


Kdyz jsou vzdy v nejvyssich bitech ty 0, tak signed/unsigned je jedno, 
ne, stejne se to z-paduje vlevo? Ostatne (cas pro Weka, at mne omlati o 
hlavu C standard), left shift signed si neumim moc predstavit...
J.

On 07.10.2021 10:17, Tomáš Hamouz wrote:
> Re: GCC sloučení do správného typu Znaménko není třeba řešit. Pokud je 
> v D15 znaménko a budete to skládat do int16_t, tak bude správně nastavené.
> Jen bych dal pozor na to, dělat bitové posuny jako unsigned a až na 
> konci to přetypoval na signed.
>
> Tomáš
>
>
> *> 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 <http://www.HW.cz>
> > Hw-list at list.hw.cz <mailto:Hw-list at list.hw.cz>
> > http://list.hw.cz/mailman/listinfo/hw-list 
> <http://list.hw.cz/mailman/listinfo/hw-list>
>
> _______________________________________________
> 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>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20211007/4b12b734/attachment.html>


Další informace o konferenci Hw-list