<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic How to use __byteswap() function ? in Kinetis Microcontrollers</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-use-byteswap-function/m-p/367664#M18971</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am using K60 with cw 10.6. I am writing some values to serial port in binary format , the sequence of the values are same but they are flipped i.e &lt;/P&gt;&lt;P&gt;i am printing &lt;/P&gt;&lt;P&gt;AB BC CD 00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 32 bit value&lt;/P&gt;&lt;P&gt;i am getting &lt;/P&gt;&lt;P&gt;00 CD BC AB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;This issue was due to the little endian nature of uc so i wanted to swap the 32 bit data and then print it. I am unable to find any syntax for __byteswap32(); &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Kind Regards&lt;/P&gt;&lt;P&gt;Amit Kumar&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 15 Sep 2014 12:44:29 GMT</pubDate>
    <dc:creator>Amit_Kumar1</dc:creator>
    <dc:date>2014-09-15T12:44:29Z</dc:date>
    <item>
      <title>How to use __byteswap() function ?</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-use-byteswap-function/m-p/367664#M18971</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I am using K60 with cw 10.6. I am writing some values to serial port in binary format , the sequence of the values are same but they are flipped i.e &lt;/P&gt;&lt;P&gt;i am printing &lt;/P&gt;&lt;P&gt;AB BC CD 00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 32 bit value&lt;/P&gt;&lt;P&gt;i am getting &lt;/P&gt;&lt;P&gt;00 CD BC AB&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;This issue was due to the little endian nature of uc so i wanted to swap the 32 bit data and then print it. I am unable to find any syntax for __byteswap32(); &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Kind Regards&lt;/P&gt;&lt;P&gt;Amit Kumar&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 15 Sep 2014 12:44:29 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-use-byteswap-function/m-p/367664#M18971</guid>
      <dc:creator>Amit_Kumar1</dc:creator>
      <dc:date>2014-09-15T12:44:29Z</dc:date>
    </item>
    <item>
      <title>Re: How to use __byteswap() function ?</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-use-byteswap-function/m-p/367665#M18972</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;the syntax is __builtin_bswap32(); finally found out.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 15 Sep 2014 13:30:40 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-use-byteswap-function/m-p/367665#M18972</guid>
      <dc:creator>Amit_Kumar1</dc:creator>
      <dc:date>2014-09-15T13:30:40Z</dc:date>
    </item>
    <item>
      <title>Re: How to use __byteswap() function ?</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-use-byteswap-function/m-p/367666#M18973</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This byte swap didn't work for float values , Is there anything like this for float values also ??&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Kind Regards&lt;/P&gt;&lt;P&gt;Amit Kumar&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 17 Sep 2014 03:46:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-use-byteswap-function/m-p/367666#M18973</guid>
      <dc:creator>Amit_Kumar1</dc:creator>
      <dc:date>2014-09-17T03:46:23Z</dc:date>
    </item>
    <item>
      <title>Re: How to use __byteswap() function ?</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-use-byteswap-function/m-p/367667#M18974</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;If your compiler is 'forcing' the type 'uint32' for the input/output of that intrinsic function, then I simply suggest you declare the associated vars with a 'union' of float and uint32 (and int32?) and let the compiler 'look' at them the appropriate way in the appropriate places (var.fval, var.uval, var.sub.s32, var.sub.s16.lo, var.sub.s8.hh etc.).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;typedef&lt;/TD&gt;&lt;TD&gt;union{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;//Any of three ways to look at a 32-bit number&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;float&lt;/TD&gt;&lt;TD&gt;fval;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;uint32_t&lt;/TD&gt;&lt;TD&gt;uval;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;/TD&gt;&lt;TD&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;union{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/TD&gt;&lt;TD&gt;//Byte/Word/Dword, little-endian&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; struct{&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp; uint16_t lo;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp; int16_t hi;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; } s16;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; struct{&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;uint8_t ll;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;uint8_t lm;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;uitn8_t hm;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;int8_t hh;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; } s8;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; int32_t s32;&lt;/P&gt;&lt;P&gt;}sub;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;/TD&gt;&lt;TD&gt;}Multi_t;&lt;/TD&gt;&lt;TD&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;For example:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Multi_t inval, outval;&lt;/P&gt;&lt;P&gt;inval.fval = 3.1415927f;&lt;/P&gt;&lt;P&gt;outval.uval = __builtin_bswap32(inval.uval);&amp;nbsp; //For the IAR compiler, use __REV( );&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The net result in outval.uval being 0xDB 0F 49 40&lt;/P&gt;&lt;P&gt;You can also use this union to 'assemble' (or disassemble!) something, say from a 'byte peripheral' (big endian order in this case!)&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;outval.sub.s8.hh = GetSPI( );&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Or some such byte-fetch&lt;/P&gt;&lt;P&gt;outval.sub.s8.hm = GetSPI( );&lt;/P&gt;&lt;P&gt;outval.sub.s8.lm = GetSPI( );&lt;/P&gt;&lt;P&gt;outval.sub.s8.ll = GetSPI( );&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Now outval.fval is your whole floating-point number (for instance), assembled using the direct 'byte' instructions of the CPU without &amp;lt;&amp;lt; and &amp;amp;0xFF ops (and reliance on the compiler to make THAT efficient).&amp;nbsp; Furthermore, if you move this code to a 'big endian' CPU environment all you have to do is swap the order of the s8 and s16 'sub elements' in the union and the rest of your code will STILL have the correct results!&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 17 Sep 2014 12:34:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/How-to-use-byteswap-function/m-p/367667#M18974</guid>
      <dc:creator>egoodii</dc:creator>
      <dc:date>2014-09-17T12:34:41Z</dc:date>
    </item>
  </channel>
</rss>

