<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</head>
<body>
<p>cast na daný typ je asi nejčistější, jak je níže uvedeno. Dále
matika tj. shift či násobení. Jen ještě endinaita tj. pořadí bytů
bude dělat čáry. Obecně se nevyhnete těmto specialitám. Proto se
většinou zdrojáky na hw závislosti dávají mimo logiku.</p>
<p>Jirka<br>
</p>
<div class="moz-cite-prefix">Dne 07.10.2021 v 10:45 Jaroslav Buchta
napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:0c7d039e-5bc7-b1e6-7545-2682d1c93bd9@hascomp.cz">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<div class="moz-cite-prefix">No ja bych rad videl jasnou definici
pravidla, ze to takhle je OK, to jsem zatim nikde nenasel. Tim
padem nemam nejak jistotu, ze to kazdy prekladac udela dle
ocekavani a zmeni jenom typ. Taky by se mohl snazit prizpusobit
hodnotu, coz v pripade cisla 32768+ do int16 nejde nacpat... Ale
mozna to definovano jasne je, cekam, ze to sem nekdo da a ja to
zacnu v klidu pouzivat ;-)<br>
</div>
<div class="moz-cite-prefix">Dne 07.10.2021 v 10:37 Tomáš Hamouz
napsal(a):<br>
</div>
<blockquote type="cite"
cite="mid:726390278.20211007103705@seznam.cz">
<title>Re: GCC sloučení do správného typu</title>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<span style=" font-family:'Courier New'; font-size: 10pt;">Je.
Dáváte tím překladači najevo že chcete "u" interpretovat jako
signed. Může vyhodit warning, že může dojít ke ztrátě dat, ale
to je očekávané chování.<br>
Ještě bych k tomu skládání přidal masky na jednotlivé bity.
Sice to trochu bude zdržovcat, ale máte jistotu že se nikde
nepřiplete nastavený bit který nechcete.<br>
<br>
Tedy <br>
uint16_t temp = (((uint16_t)precteno[0] & 0x03U)
<< 14)<br>
| (((uint16_t)precteno[1] & 0x7FU)
<< 7)<br>
| ((uint16_t)precteno[2] & 0x7FU));<br>
int16_t result = (int16_t)temp; <br>
<br>
<br>
Tomáš<br>
<br>
<br>
<br>
</span>
<table>
<tbody>
<tr>
<td width="3" bgcolor="#0000ff"><br>
</td>
<td><span style=" font-family:'courier new'; font-size:
10pt;">No a je spravne napsat napr.:<br>
uint16_t u = 65535;<br>
int16_t i = (int16_t)u;<br>
?<br>
Vim, ze v C to asi funguje ale v C# to nesezere, takze
si k tomu davam automaticky !, protoze to je asi v
principu nebezpecna konstrukce.<br>
A bitove posuvy v signed muzou taky asi dopadnout
ruzne podle platformy a prekladace, ale taky si nejsem
jisty.<br>
<br>
Dne 07.10.2021 v 10:17 Tomáš Hamouz napsal(a):<br>
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é.<br>
Jen bych dal pozor na to, dělat bitové posuny jako
unsigned a až na konci to přetypoval na signed.<br>
<br>
Tomáš<br>
<br>
<br>
<span style=" color: #800000;"><b>> No a ted to
znamenko,<br>
> int16_t i = (int16_t)res;<br>
> Myslim, ze to funguje ale je mi to nejak
proti srsti, je to korektni <br>
> obecne takto napsat?<br>
> Prasarny typu konverze pres ukazatele...
nevim.<br>
> Nejcistsi mi prijde:<br>
> int16_t i = (res & 0x8000) ?
(int16_t)((int32_t) res - 65536) : <br>
> (int16_t)res;<br>
> snad jsem se neseknul, prekladac si s tim pri
pohledu do ASM poradi <br>
> vetsinou se cti.<br>
<br>
> Dne 07.10.2021 v 9:24 Jindroush napsal(a):<br>
>> On 07.10.2021 9:03, Jindrich Fucik wrote:<br>
>>> mám tu jednu takovou spíš akademickou
otázku. Nejprve popíšu <br>
>>> prostředí. Hardware je ESP8266,
programovaný v Arduino IDE, takže <br>
>>> překladač je GCC.<br>
<br>
>>> ESP je připojeno sériovou linkou do
zařízení, které komunikuje <br>
>>> sedmibitově. zařízení je založeno na
8bit intel platformě, data jsou <br>
>>> tedy integery 16 bit (znaménkové).
Při posílání se nejprve posílá <br>
>>> MSB, první dva bity, pak prostředních
7 a pak posledních 7 LSB. Data <br>
>>> přečtu jako pole "byte" (což je jen
alias k unsigned char). Pokud se <br>
>>> pokusím to rozepsat po bitech tak je
to takto:<br>
<br>
>>> precteno byte[3]<br>
>>> |0 0 0 0 0 0 D15 D14| |0 D13 D12 D11
D10 D9 D8 D7| |0 D6 D5 D4 D3 <br>
>>> D2 D1 D0|<br>
<br>
>>> A teď otázka - jak nejefektivněji na
tom ESP poskládat zpátky int, <br>
>>> který zachová znaménko? <br>
<br>
>> pokud mate int16_t na tom esp, tak asi
nejak jako, pokud je zajisteno, <br>
>> ze to, co jste vyse napsal jako '0' je
vzdy 0.<br>
>> int16_t res = ( precteno[0] << 14 )
|| ( precteno[1]) << 7 ) || <br>
>> precteno[2];<br>
>> Netusim samozrejme, jak drahy je na
takovem procesoru shift a v jak <br>
>> 'dlouhe' smycce to je.<br>
<br>
<br>
>
_______________________________________________<br>
> HW-list mailing list - sponsored by </b></span></span><a
style=" font-family:'courier new'; font-size: 10pt;"
href="http://www.HW.cz" moz-do-not-send="true">www.HW.cz</a><br>
<a style=" font-family:'courier new'; font-size: 10pt;"
href="mailto:Hw-list@list.hw.cz"
moz-do-not-send="true">> Hw-list@list.hw.cz</a><br>
<a style=" font-family:'courier new'; font-size: 10pt;"
href="http://list.hw.cz/mailman/listinfo/hw-list"
moz-do-not-send="true">>
http://list.hw.cz/mailman/listinfo/hw-list</a> <br>
<span style=" font-family:'courier new'; font-size:
10pt;">_______________________________________________<br>
HW-list mailing list - sponsored by </span><a
style=" font-family:'courier new'; font-size: 10pt;"
href="http://www.HW.cz" moz-do-not-send="true">www.HW.cz</a><br>
<a style=" font-family:'courier new'; font-size: 10pt;"
href="mailto:Hw-list@list.hw.cz"
moz-do-not-send="true">Hw-list@list.hw.cz</a><br>
<a style=" font-family:'courier new'; font-size: 10pt;"
href="http://list.hw.cz/mailman/listinfo/hw-list"
moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
</td>
</tr>
</tbody>
</table>
<span style=" font-family:'courier new'; font-size: 10pt;">No a
je spravne napsat napr.:<br>
uint16_t u = 65535;<br>
int16_t i = (int16_t)u;<br>
?<br>
Vim, ze v C to asi funguje ale v C# to nesezere, takze si k
tomu davam automaticky !, protoze to je asi v principu
nebezpecna konstrukce.<br>
A bitove posuvy v signed muzou taky asi dopadnout ruzne podle
platformy a prekladace, ale taky si nejsem jisty.<br>
<br>
Dne 07.10.2021 v 10:17 Tomáš Hamouz napsal(a):<br>
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é.<br>
Jen bych dal pozor na to, dělat bitové posuny jako unsigned a
až na konci to přetypoval na signed.<br>
<br>
Tomáš<br>
<br>
<br>
<span style=" color: #800000;"><b>> No a ted to znamenko,<br>
> int16_t i = (int16_t)res;<br>
> Myslim, ze to funguje ale je mi to nejak proti srsti,
je to korektni <br>
> obecne takto napsat?<br>
> Prasarny typu konverze pres ukazatele... nevim.<br>
> Nejcistsi mi prijde:<br>
> int16_t i = (res & 0x8000) ? (int16_t)((int32_t)
res - 65536) : <br>
> (int16_t)res;<br>
> snad jsem se neseknul, prekladac si s tim pri pohledu
do ASM poradi <br>
> vetsinou se cti.<br>
<br>
> Dne 07.10.2021 v 9:24 Jindroush napsal(a):<br>
>> On 07.10.2021 9:03, Jindrich Fucik wrote:<br>
>>> mám tu jednu takovou spíš akademickou otázku.
Nejprve popíšu <br>
>>> prostředí. Hardware je ESP8266, programovaný
v Arduino IDE, takže <br>
>>> překladač je GCC.<br>
<br>
>>> ESP je připojeno sériovou linkou do zařízení,
které komunikuje <br>
>>> sedmibitově. zařízení je založeno na 8bit
intel platformě, data jsou <br>
>>> tedy integery 16 bit (znaménkové). Při
posílání se nejprve posílá <br>
>>> MSB, první dva bity, pak prostředních 7 a pak
posledních 7 LSB. Data <br>
>>> přečtu jako pole "byte" (což je jen alias k
unsigned char). Pokud se <br>
>>> pokusím to rozepsat po bitech tak je to
takto:<br>
<br>
>>> precteno byte[3]<br>
>>> |0 0 0 0 0 0 D15 D14| |0 D13 D12 D11 D10 D9
D8 D7| |0 D6 D5 D4 D3 <br>
>>> D2 D1 D0|<br>
<br>
>>> A teď otázka - jak nejefektivněji na tom ESP
poskládat zpátky int, <br>
>>> který zachová znaménko? <br>
<br>
>> pokud mate int16_t na tom esp, tak asi nejak
jako, pokud je zajisteno, <br>
>> ze to, co jste vyse napsal jako '0' je vzdy 0.<br>
>> int16_t res = ( precteno[0] << 14 ) || (
precteno[1]) << 7 ) || <br>
>> precteno[2];<br>
>> Netusim samozrejme, jak drahy je na takovem
procesoru shift a v jak <br>
>> 'dlouhe' smycce to je.<br>
<br>
<br>
> _______________________________________________<br>
> HW-list mailing list - sponsored by </b></span></span><a
style=" font-family:'courier new'; font-size: 10pt;"
href="http://www.HW.cz" moz-do-not-send="true">www.HW.cz</a><br>
<a style=" font-family:'courier new'; font-size: 10pt;"
href="mailto:Hw-list@list.hw.cz" moz-do-not-send="true">>
Hw-list@list.hw.cz</a><br>
<a style=" font-family:'courier new'; font-size: 10pt;"
href="http://list.hw.cz/mailman/listinfo/hw-list"
moz-do-not-send="true">>
http://list.hw.cz/mailman/listinfo/hw-list</a> <br>
<span style=" font-family:'courier new'; font-size: 10pt;">_______________________________________________<br>
HW-list mailing list - sponsored by </span><a style="
font-family:'courier new'; font-size: 10pt;"
href="http://www.HW.cz" moz-do-not-send="true">www.HW.cz</a><br>
<a style=" font-family:'courier new'; font-size: 10pt;"
href="mailto:Hw-list@list.hw.cz" moz-do-not-send="true">Hw-list@list.hw.cz</a><br>
<a style=" font-family:'courier new'; font-size: 10pt;"
href="http://list.hw.cz/mailman/listinfo/hw-list"
moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a><br>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
HW-list mailing list - sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz" moz-do-not-send="true">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz" moz-do-not-send="true">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list" moz-do-not-send="true">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
</blockquote>
<p><br>
</p>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<pre class="moz-quote-pre" wrap="">_______________________________________________
HW-list mailing list - sponsored by <a class="moz-txt-link-abbreviated" href="http://www.HW.cz">www.HW.cz</a>
<a class="moz-txt-link-abbreviated" href="mailto:Hw-list@list.hw.cz">Hw-list@list.hw.cz</a>
<a class="moz-txt-link-freetext" href="http://list.hw.cz/mailman/listinfo/hw-list">http://list.hw.cz/mailman/listinfo/hw-list</a>
</pre>
</blockquote>
</body>
</html>