<?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>8-bit MicrocontrollersのトピックRe: Memory move, saving CPU cycles</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Memory-move-saving-CPU-cycles/m-p/171473#M11569</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi Ross,&lt;BR /&gt;&lt;BR /&gt;Looping only saves code space it doesn't help with execution speed.&lt;BR /&gt;You can extract a slight speed improvement in cases where both the source and destination are direct page or one or the other is by using the MOV instruction.&lt;BR /&gt;It reads better using MOV as well.&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sun, 09 Dec 2007 20:13:04 GMT</pubDate>
    <dc:creator>peg</dc:creator>
    <dc:date>2007-12-09T20:13:04Z</dc:date>
    <item>
      <title>Memory move, saving CPU cycles</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Memory-move-saving-CPU-cycles/m-p/171472#M11568</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hi All,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Just looking a the crude method I've used to transfer a message from a CAN Rx buffer into a RAM buffer.&lt;/DIV&gt;&lt;DIV&gt;Something like this below uses over 90 cycles....&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lda&amp;nbsp;&amp;nbsp; MSCANRXBUF&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sta&amp;nbsp;&amp;nbsp; CANRxBuffer&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;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lda&amp;nbsp;&amp;nbsp; MSCANRXBUF+1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sta&amp;nbsp;&amp;nbsp; CANRxBuffer+1&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lda&amp;nbsp;&amp;nbsp; MSCANRXBUF+2&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sta&amp;nbsp;&amp;nbsp; CANRxBuffer+2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lda&amp;nbsp;&amp;nbsp; MSCANRXBUF+12&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sta&amp;nbsp;&amp;nbsp; CANRxBuffer+12&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Now I guess I could set up memory pointers and increment them in a loop, but, in the end am I actually going to save any CPU cycles looping around to still use the same commands anyway?&lt;/DIV&gt;&lt;DIV&gt;I don't have any efficient loop routines, but maybe someone has an example on how much more efficient a memory transfer loop might be when only dealing with a relatively small memory transfer.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Thanks,&lt;/DIV&gt;&lt;DIV&gt;Ross&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 09 Dec 2007 19:26:45 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Memory-move-saving-CPU-cycles/m-p/171472#M11568</guid>
      <dc:creator>Bloodhound</dc:creator>
      <dc:date>2007-12-09T19:26:45Z</dc:date>
    </item>
    <item>
      <title>Re: Memory move, saving CPU cycles</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Memory-move-saving-CPU-cycles/m-p/171473#M11569</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi Ross,&lt;BR /&gt;&lt;BR /&gt;Looping only saves code space it doesn't help with execution speed.&lt;BR /&gt;You can extract a slight speed improvement in cases where both the source and destination are direct page or one or the other is by using the MOV instruction.&lt;BR /&gt;It reads better using MOV as well.&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 09 Dec 2007 20:13:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Memory-move-saving-CPU-cycles/m-p/171473#M11569</guid>
      <dc:creator>peg</dc:creator>
      <dc:date>2007-12-09T20:13:04Z</dc:date>
    </item>
    <item>
      <title>Re: Memory move, saving CPU cycles</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Memory-move-saving-CPU-cycles/m-p/171474#M11570</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Thanks Peg,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I agree totally on the MOV instruction, but, unfortunately with the MSCAN buffer sitting at $0540 it needs to use H:X to perform a MOV, still, the MOV ,X+,opr8a is only 5 cylces and a couple to set up H:X, so I'm better off with that.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Cheers,&lt;/DIV&gt;&lt;DIV&gt;Ross&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 09 Dec 2007 20:42:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Memory-move-saving-CPU-cycles/m-p/171474#M11570</guid>
      <dc:creator>Bloodhound</dc:creator>
      <dc:date>2007-12-09T20:42:07Z</dc:date>
    </item>
    <item>
      <title>Re: Memory move, saving CPU cycles</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Memory-move-saving-CPU-cycles/m-p/171475#M11571</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;DIV&gt;Extended addressing mode&amp;nbsp; LDA&amp;nbsp; + STA&amp;nbsp; takes 8 cycles, 8cycles/byte&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;LDHX&amp;nbsp;&amp;nbsp;+ STHX pair takes 10cycles but transfers 2 bytes, so you could have 5cycles/byte.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 09 Dec 2007 23:23:06 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Memory-move-saving-CPU-cycles/m-p/171475#M11571</guid>
      <dc:creator>kef</dc:creator>
      <dc:date>2007-12-09T23:23:06Z</dc:date>
    </item>
    <item>
      <title>Re: Memory move, saving CPU cycles</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/Memory-move-saving-CPU-cycles/m-p/171476#M11572</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Hello Ross,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Here is a comparison of&amp;nbsp;three potential methods, for the transfer of N bytes, assuming the RAM buffer is within page zero (which it needs to be for the MOV method to work) -&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Indexed loop method:&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;Cycles:&amp;nbsp; 11*N + 3&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;Bytes:&amp;nbsp; &amp;nbsp;10&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;LDA/STA method:&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;Cycles:&amp;nbsp; 7*N&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;Bytes:&amp;nbsp; &amp;nbsp;5*N&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Indexed MOV method:&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;Cycles:&amp;nbsp; 5*N + 3&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;Bytes:&amp;nbsp;&amp;nbsp; 2*N + 3&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Regards,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Mac&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by bigmac on &lt;SPAN class="date_text"&gt;2007-12-10&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;02:52 AM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 09 Dec 2007 23:49:11 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/Memory-move-saving-CPU-cycles/m-p/171476#M11572</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2007-12-09T23:49:11Z</dc:date>
    </item>
  </channel>
</rss>

