<html>
<head>
</head>
<body>
You are 100% right in what you have stated. I ran a MIDI input into the device
and found that at the top level of input, I was getting overflows.  I created
this situation by sending continuous sysex blocks of 1024 bytes into the
device from my PC MIDI output. I had to reduce the time in the PIC for the
data exchange by using global variables instead of returned function parameters
and using the #use_fast_io to remove any unnecessary changes to the data
direction register.  Although these coding practices (such as using globals)
are normally frowned upon, this is what I had to do to reduce the overhead
in data transfers.<br>
<br>
Joel Sherrill wrote:<br>
<blockquote type="cite" cite="mid:3CA0817A.F7F443A2@OARcorp.com">
  <pre wrap=""><br>Angelo Fraietta wrote:<br></pre>
  <blockquote type="cite">
    <pre wrap="">I have to make a correction on those previous calculations. I did not<br>read the settings on my CRO correctly. The actual values are 1 message<br>every 450 us, (not 4 us) and 1 every 500us.  So I am actually at the<br>extremes. The maximum transfer I could expect from a MIDI device would<br>be one byte every 320 us (10 bits per byte). So not setting the event<br>(as Chris Johns suggested) does save me a valuable 50us.<br></pre>
    </blockquote>
    <pre wrap=""><!----><br>Aren't you down to the point of counting instructions? :)  450 usecs<br>isn't<br>a lot of time/instructions.  Having spend a good portion of my early<br>career<br>on smart serial controllers, I have some hard won advice.  If you<br>actually <br>intend to sustain getting a byte every 320 usecs, then you have to<br>ensure<br>that your processing per-byte is less than that.  A good first step is<br>to write down the entire sequence of code executed for each byte.  Then<br>focus on which parts are unnecessary or not optimal for your case.  Eric <br>Norum did this for EPICS and the resulting work sped up mutexes and<br>counting<br>semaphores.  I did a similar effort for the GNU Ada run-time "self"<br>routine and it showed a 5% improvement in system idle time for me<br>optimizing out about 60 instructions.  You are at the point where <br>making sure the path you execute is minimal is important.<br><br></pre>
    <blockquote type="cite">
      <pre wrap="">Angelo Fraietta wrote:<br><br></pre>
      <blockquote type="cite">
        <pre wrap="">After some exhaustive testing I have come up with some figures that<br>represent data exchange rates between the Pic microcontroller and<br>the 386 using a PLA as an interface on an ISA bus using an interrupt<br>driven I/O read/write paradigm.<br><br>What I have done is make the Pic and the 386 communicate with each<br>other, each triggering an interrupt with the other, causing it to<br>write to the other device.<br><br>With the RTEMS event being triggered every  interrupt I have a<br>constant exchange rate of 1 message each way every 5 us.<br><br>Triggering the event only if the receive queue is empty gives me an<br>exchange rate of 1 Message every 4 us. I am saving 1 us by not<br>sending the unnecessary event.<br><br>The big factor in this test, however, is this method that I used to<br>check the exchange rates completely blows the 1 message every  650<br>us measurement I previously made away, thus proving that the<br>interrupt rate will more than adeq
uately sustain an input Midi<br>stream running at maximum transfer rate (31.25kbs, which is about 3<br>bytes per ms)<br><br>Angelo Fraietta wrote:<br><br></pre>
        <blockquote type="cite">
          <pre wrap="">You are right. Sending the event if the queue was not originally<br>empty when the ISR came is not necessary. I was already looping<br>the task until the queue was empty; I was, however, sending the<br>event regardless -- which is actually wasting CPU cycles. Thanks<br>for the tip? I'll see what I can get the interval down to by not<br>sending an unnecessary event.<br><br>Chris Johns wrote:<br><br></pre>
          <blockquote type="cite">
            <pre wrap="">Angelo Fraietta wrote:<br><br></pre>
            <blockquote type="cite">
              <pre wrap=""> Within the ISR I am doing the following:<br> Reading a 16 bit word from an I/O address<br> Decoding and adding that word onto a queue that is emptied out<br> by a<br> running task<br> Checking a second queue for data that needs to be transmitted<br> Transmitting a word to the I/O card.<br> Setting an event that causes the running task to empty the<br> queue.<br><br></pre>
              </blockquote>
              <pre wrap="">I would only send the event if the queue is empty and have the<br>task loop<br>until the queue is empty.<br><br><br></pre>
              </blockquote>
              <pre wrap="">--<br>Angelo Fraietta<br>PO Box 859<br>Hamilton NSW 2303<br>Home Page<br><a class="moz-txt-link-freetext" href="http://www.users.bigpond.com/angelo_f/">http://www.users.bigpond.com/angelo_f/</a><br>There are those who seek knowledge for the sake of knowledge - that is CURIOSITY<br>There are those who seek knowledge to be known by others - that is VANITY<br>There are those who seek knowledge in order to serve - that is LOVE<br>    Bernard of Clairvaux (1090 - 1153)<br><br><br></pre>
              </blockquote>
              <pre wrap="">--<br>Angelo Fraietta<br>PO Box 859<br>Hamilton NSW 2303<br>Home Page<br><a class="moz-txt-link-freetext" href="http://www.users.bigpond.com/angelo_f/">http://www.users.bigpond.com/angelo_f/</a><br>There are those who seek knowledge for the sake of knowledge - that is CURIOSITY<br>There are those who seek knowledge to be known by others - that is VANITY<br>There are those who seek knowledge in order to serve - that is LOVE<br>    Bernard of Clairvaux (1090 - 1153)<br><br><br></pre>
              </blockquote>
              <pre wrap="">--<br>Angelo Fraietta<br><br>PO Box 859<br>Hamilton NSW 2303<br><br>Home Page<br><br><a class="moz-txt-link-freetext" href="http://www.users.bigpond.com/angelo_f/">http://www.users.bigpond.com/angelo_f/</a><br><br>There are those who seek knowledge for the sake of knowledge - that is CURIOSITY<br>There are those who seek knowledge to be known by others - that is VANITY<br>There are those who seek knowledge in order to serve - that is LOVE<br>    Bernard of Clairvaux (1090 - 1153)<br></pre>
              </blockquote>
              <pre wrap=""><!----><br></pre>
              </blockquote>
              <br>
              <pre class="moz-signature" cols="$mailwrapcol">-- 
Angelo Fraietta

PO Box 859
Hamilton NSW 2303

Home Page


<a class="moz-txt-link-freetext" href="http://www.users.bigpond.com/angelo_f/">http://www.users.bigpond.com/angelo_f/</a>

There are those who seek knowledge for the sake of knowledge - that is CURIOSITY
There are those who seek knowledge to be known by others - that is VANITY
There are those who seek knowledge in order to serve - that is LOVE
    Bernard of Clairvaux (1090 - 1153)</pre>
              <br>
              </body>
              </html>