<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <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">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>
    <p><br>
    </p>
  </body>
</html>