Subversion Repositories svn.mios

Rev

Blame | Last modification | View Log | RSS feed

HEADER 3 MIOS C Interface

<h1>Interfaz MIOS C</h1>

<p class="INFO">Programar aplicaciones <a href="mios.html">MIOS</a>&nbsp;en C podr&aacute; ser una soluci&oacute;n alternativa para el
ensamblador en el futuro, porque este lenguaje es m&aacute;s
f&aacute;cil de entender, menos propenso a errores y m&aacute;s
reutilizable. La desventaja de C es un peor funcionamiento y
c&oacute;digos mucho m&aacute;s largos, lo que significa que no
ser&aacute; posible programar aplicaciones tan complejas como&nbsp;<a href="midibox_sid.html">MIDIbox SID</a> o <a href="midibox_seq.html">MIDIbox SEQ</a>
completamente en C, especialmente por la reducci&oacute;n de flash y
RAM del PIC18F452 (que es mayormente suficiente, pero no lo
suficientemente alta para muchas aplicaciones...). Puede que esto sea
resuelto paso a paso con los futuros derivados pin compatibles, que
contendr&aacute;n mucha m&aacute;s memoria, pero puuede que esto tarde
algunos a&ntilde;os.</p><br><p class="DESC">De cualquier manera, a
pesar de este&nbsp;hecho, MIOS y C son una estupenda combinaci&oacute;n.
&iquest;Por qu&eacute;? porque MIOS (el Sistema Operativo) est&aacute;
programado en lenguaje ensamblador y ha sido optimizado a mano para
mayor velocidad. Maneja muchas tareas cr&iacute;ticas de
ejecuci&oacute;n de las que el usuario no se tiene que preocupar. MIOS
contiene un mont&oacute;n de funciones prefabricadas que evitan a la
gente tener que reinventarlo todo- Posibilita al programador
interesado la correcta implementaci&oacute;n del proyecto MIDI sin
conocimientos b&aacute;sicos sobre IO de alto rendimiento o
correcto procesamiento MIDI.</p>

<p class="DESC">As&iacute;, el usuario solo tiene que iniciar la capa
de la aplicaci&oacute;n en la que la optimizaci&oacute;n no importa
mucho. Y puede esperar que, muchas de las funciones sean procesadas a
la misma velocidad, as&iacute; hayan sido escritas en C o en
ensamblador. Ok, el resultado depende mucho de la aplicaci&oacute;n y
el compilador utilizados, pero es posible hacer muchas cosas estupendas
sin mucho esfuerzo, y cuantos m&aacute;s usuarios hayan empezando a
acercarse a C, muchos m&aacute;s ejemplos de c&oacute;digo
podr&aacute;n
ser compartidos con la comunidad, hecho que elevar&aacute; el nivel de
las nuevas aplicaciones.</p>

<p class="DESC">Actualmente, no soy capaz de estimar cu&aacute;ndo conviene
programar algo en ensamblador o en C- es este un tipo de conocimiento a
adquirir en los pr&oacute;ximos meses- &iexcl;Ser&aacute;n bienvenidos toda vuestra
ayuda y recomendaciones! &nbsp;No olvideis que
tambi&eacute;n es posible mezclar C y ensamblador en la capa de la
aplicaci&oacute;n. Sugiero: La interfaz de usuario (botones, manejo de LEDs, salida de pantalla, MIDI IO) puede ser
implementada con C sin deventajas, pero las rutinas que tienen que
interactuar r&aacute;pido (como un controlador perif&eacute;rico o
algoritmos con procesos de muchos datos) deber&iacute;an ser
programados
en m&oacute;dulos separados de ensamblador y llamados con C.</p>

<h2>Realizaci&oacute;n T&eacute;cnica</h2>

<p class="DESC">Para MIOS en s&iacute; no importa si una rutina de C o
ensamblador est&aacute; enganchado a las rutinas de respuesta de
USER_*, porque esta posibilidad ha sido tenida en cuenta desde el
principio de la fase de dise&ntilde;o. MIOS siempre se
entroncar&aacute; con los vectores de&nbsp; USER_* en los eventos, que
son parte de la aplicaci&oacute;n. Desde ah&iacute;, la
aplicaci&oacute;n puede enlazarse a C si se desea.</p>

<p class="DESC">Las funciones&nbsp;MIOS (MIOS_*) &nbsp;pueden ser
llamadas, en su mayor parte, desde un programa en C sin p&eacute;rdida
de datos, mientras solo haya un par&aacute;metro de entrada y/o salida.
Las funciones con m&aacute;s par&aacute;metros requieren un poco
m&aacute;s de c&oacute;digo que copie los par&aacute;metros de C ( que
son incrustados en la compilaci&oacute;n) en los&nbsp;MIOS_PARAMETER[123].</p>

<p class="DESC">Si esto te suena nuevo, &nbsp;no te sientas confuso,
por favor- no te tienes que ocupar de esta manipulaci&oacute;n de
segundo nivel.</p>

<p class="DESC">En vez &nbsp;de eso, solo tienes que usar
el&nbsp;llamado "Wrapper" (envoltura), que contiene todo el
c&oacute;digo que hace falta para enlazar funciones C con MIOS. Este
"Wrapper" es parte del paquete MIOS C Wrapper.</p>

<p class="DESC">El c&oacute;digo "Wrapper" depende mucho del compilador utilizado. Por el momento solo soporta <a href="http://sdcc.sourceforge.net" target="_blank">SDCC</a>
por ser &eacute;ste el &uacute;nico compilador gratu&iacute;to para
arquitectura PIC18F. Tambi&eacute;n es importante la versi&oacute;n del
compilador porque el m&eacute;todo de &nbsp;paso de par&aacute;metro
a&uacute;n no es estable. As&iacute; que, por
favor, usad solo lanzamientos oficiales que ya hayan sido testados con
el "Wrapper". La versi&oacute;n oficial disponible es la 2.7.0.<br>
Btw.: El m&oacute;dulo apropiado se llama "PIC16", lo que no significa
que deba tratarse de procesadores PIC16Fxxx&nbsp;sino de la familia de
los PIC18F con tama&ntilde;o de palabra de c&oacute;digo de 16 bits. El
m&oacute;dulo est&aacute; en desarrollo, por eso no est&aacute; bien
documentado, pero funciona realmente bien y ser&aacute; mejorado cada
cierto tiempo.</p><p>

</p><p class="DESC">Los siguientes archivos tambi&eacute;n forman parte del paquete&nbsp;Wrapper:
</p><ul class="CL">
   <li>main.c: un esqueleto que contiene los "atajos" de usuario- &iexcl;A&ntilde;ade tu c&oacute;digo aqu&iacute;!</li>
   <li>cmios.h: un archivo de cabecera que se incluye desde main.c y que contiene las declaraciones C de las&nbsp;<a href="cmios_fun.html">funciones MIOS&nbsp;</a>.</li>
   <li>pic18f452.c y pic18f452.h: contienen definiciones SFR para el PIC18F452</li>
   <li>make.bat: un archivo batch que configura algunas variables y llama a make_sub.bat</li>
   <li>project.lkr:
El script enlazador MPLKR que define las regiones de memoria
disponibles( y que desenmascara las regiones ya ocupadas por MIOS)</li>
   <li>tools\make_sub.bat: un archivo batch que contiene todos los pasos necesarios para constru&iacute;r el proyecto.
   </li><li>tools\fixasm.pl:
Un script PERL que inserta "workarounds" (apa&ntilde;os)en el
c&oacute;digo ensamblador generado de&nbsp;SDCC.El prop&oacute;sito de
los "workarounds" est&aacute;n documentados en el archivo PERL y puede
cambiar cada cierto tiempo, dependiendo del lanzamiento de SDCC. Muchos
de ellos no se necesitar&aacute;n m&aacute;s en las pr&oacute;ximas
semanas( estoy en contacto con el autor del m&oacute;dulo pic16&nbsp;).</li>
   <li>tools\hex2syx.pl:
convierte la aplicaci&oacute;n binaria (localizada en project.hex) en
un archivo de proyecto MIDI project.syx cargable</li></ul><p class="DESC"><i>Nota
para usuarios avanzados:Hay una apilaci&oacute;n de usuario y de IRQ
separadas, definidas en la cabecera demios_wrapper/mios_wrapper.asm,
que pueden ser incrementadas (o disminu&iacute;das) si es necesario
para programas largos en el archivo&nbsp;make.bat file. &Eacute;chale
un vistazo a las aplicaciones largas basadas en SDCC, como MIDIbox MM y
MIDIbox LC, que muestran c&oacute;mo manejar interacciones complejas de
MIOS.</i></p>

<h2>Preparaci&oacute;n</h2>

<p>Son necesarios estos pasos para preparar el medio de desarrollo :</p><p>

<table align="center" cellpadding="0" cellspacing="20">

  <tbody><tr>
    <td><a href="http://gputils.sourceforge.net" target="_blank"><img src="howto_tools/gputils.gif" width="160"></a></td>
    <td><img src="images/1x1dot.gif" alt="" width="10"></td>
    <td><span class="NORM"> Descarga el paquete <a href="https://sourceforge.net/project/showfiles.php?group_id=41924" target="_blank">GPUTILS-WIN32 de sourceforge.net</a>
que contiene el ensamblador y enlazador. Date cuenta de que el
c&oacute;digo generado con SDCC no puede ser compilado en su mayor
parte con&nbsp;MPASMWIN del MPLAB IDE (Por ej. por etiquetas de nombre
largas que exceden la limitaci&oacute;n de 32 caracteres), por eso se
necesita este ensamblador/enlazador alternativo.</span></td>
  </tr>

  <tr>
    <td><a href="http://www.perl.com" target="_blank"><img src="images/lcamel.gif" alt="Link to the perl.com" height="81" width="72"></a></td>
    <td><img src="images/1x1dot.gif" alt="" width="10"></td>
    <td><span class="NORM"> Descarga PERL si no lo tienes a&uacute;n instalado en el ordenador.<br>Usuarios de Unix: Viene inclu&iacute;do en la distribuci&oacute;n.<br>Usuarios de Windows:&nbsp;Coged <a href="http://www.activestate.com/Products/Download/Register.plex?id=ActivePerl" target="_blank">Active Perl</a>.</span></td>
  </tr>

  <tr>
    <td><a href="http://sdcc.sourceforge.net" target="_blank"><img src="howto_tools/sdcc.gif" width="160"></a></td>
    <td><img src="images/1x1dot.gif" alt="" width="10"></td>
    <td><span class="NORM"> Finalmente, descarga la &nbsp;versi&oacute;n <a href="http://sourceforge.net/project/showfiles.php?group_id=599" target="_blank">2.7.0 de SDCC</a>.</span></td>
  </tr>

  <tr>
    <td><a href="howto_tools/sdcc2_en.gif"><img src="howto_tools/sdcc2_en.gif" width="160"></a></td>
    <td><img src="images/1x1dot.gif" alt="" width="10"></td>
    <td><span class="NORM">
Cambia la ruta en GPUTILS, PERL y el compilador SDCC a tu ruta de
variable de medio (PATH environment variable) si no lo has hecho
a&uacute;n. Normalmente, estas variables deben a&ntilde;adirse
autom&aacute;ticamente con los programas de instalaci&oacute;n. Si no
es as&iacute;, puede hacerse desde el men&uacute; de preferencias del
sistema de Windows NT/2000/XP (versi&oacute;n alemana&nbsp;<a href="howto_tools/sdcc2.gif">aqu&iacute;</a>)<br>Los usuarios de Windows95/98/ME tienen que definir la variable en&nbsp;C:\AUTOEXEC.BAT</span> (y, posiblemente, reiniciar el ordenador)</td>
  </tr>

  <tr>
    <td><a href="howto_tools/sdcc3.gif"><img src="howto_tools/sdcc3.gif" width="160"></a></td>
    <td><img src="images/1x1dot.gif" alt="" width="10"></td>
    <td><span class="NORM">Ejemplo:
mis configuraciones de ruta son:
"C:\Programme\sdcc\bin;C:\Programme\Perl\bin;C:\Programme\gputils\bin\"
(las rutas est&aacute;n separadas por punto y coma)</span></td>
  </tr>

</tbody></table>


</p><h2>Compiling your first C program</h2>

<table align="center" cellpadding="0" cellspacing="20">

  <tbody><tr>
    <td><a href="howto_tools/sdcc1.gif"><img src="howto_tools/sdcc1.gif" width="160"></a></td>
    <td><img src="images/1x1dot.gif" alt="" width="10"></td>
    <td><span class="NORM">ABre un Shell para cambiar el directorio donde has extra&iacute;do el paquete MIOS SDCC Wrapper.</span></td>
  </tr>

  <tr>
    <td><a href="howto_tools/sdcc4.gif"><img src="howto_tools/sdcc4.gif" width="160"></a></td>
    <td><img src="images/1x1dot.gif" alt="" width="10"></td>
    <td><span class="NORM">Abre
main.c con tu editor de texto favorito. Esto es un pantallazo de Emacs,
mi editor preferido para&nbsp;Windows y Unix. En cualquier caso, no
todos lo encuentran muy amigable a nivel de usuario. Es uno de los
editores m&aacute;s completos( con lenguaje de programaci&oacute;n
integrado e infinitas extensiones como explorador HTML, correo, lector
de noticias y juegos ;-), pero requiere mucha pr&aacute;ctica antes de
poder usarlo eficientemente. Puedes descargar&nbsp;la versi&oacute;n
para windows aqu&iacute;: <a href="http://www.gnu.org/software/emacs/windows/ntemacs.html" target="_blank">emacs@Win</a>.<br>Otro buen editor alternativo, s&oacute;lo para windows, es <a href="http://www.ultraedit.com/" target="_blank">Ultraedit</a>.</span></td>
  </tr>

  <tr>
    <td><a href="howto_tools/sdcc5.gif"><img src="howto_tools/sdcc5.gif" width="160"></a></td>
    <td><img src="images/1x1dot.gif" alt="" width="10"></td>
    <td><span class="NORM">
Despu&eacute;s de hacer los cambios en el c&oacute;digo fuente, tienes
que invocar al archivo "make"&nbsp;(un archivo batch llamado make.bat).
&Eacute;ste ejecuta todos los comandos necesarios para constru&iacute;r
la
aplicaci&oacute;n desde tu archivo main.c hasta el archivo project.syx,
que est&aacute; listo para ser cargado v&iacute;a MIDI.</span></td>
  </tr>

  <tr>
    <td><a href="mios/mios_studio7.gif"><img src="mios/mios_studio7_small.gif" alt="" height="128" width="160"></a></td>
    <td><img src="images/1x1dot.gif" alt="" width="10"></td>
    <td><span class="NORM">Ahora abre el archivo project.hex con <a href="http://miosstudio.midibox.org" target="_blank">MIOS Studio</a>, como se describe en la p&aacute;gina del cargador <a href="mios_bootstrap_newbies.html">MIOS Bootstrap</a>.<br>Date cuenta de que esta herramienta tambi&eacute;n tiene poderosas capacidades de b&uacute;squeda de errores.</span></td>
  </tr>

</tbody></table>

<p><b>Nota:</b> El Wrapper SDCC es parte del paquete "sdcc_skeleton"&nbsp;, que se encuentra en la p&aacute;gina de <a href="mios_download.html">Descarga MIOS</a>.El m&oacute;dulo core debe funcionar con&nbsp;MIOS V1.8 (o superior).</p>

<p class="DESC"><b>Addendum 01/2006:</b> Si se usan multiplicaciones,
divisiones, operaciones de punteo, etc, en el c&oacute;digo C, el
enlazador puede fallar por las funciones que faltan, que forman parte
de la librer&iacute;a "libsdcc.lib"&nbsp;. La librer&iacute;a
com&uacute;n para los derivados de pic16 no es compatible con MIOS, Por
eso he creado una especial que puedes descargar&nbsp;<a href="mios/mios_libsdcc_v2_7_0.zip">aqu&iacute; </a>. Lee el archivo README.txt para m&aacute;s detalles.</p>

<h2>Ejemplos de programaci&oacute;n</h2>

<ul class="CL">
 
<table class="BOX" align="center" border="1" cellpadding="3" cellspacing="2" width="100%">

  <tbody><tr>
    <td width="30"><span class="BIG"><a href="mios_c_send_ain.html">CODE</a></span></td>
    <td><span class="NORM">Enviar eventos MIDI de movimientos de pote</span></td>
  </tr>

  <tr>
    <td width="30"><span class="BIG"><a href="mios_c_send_mapped.html">CODE</a></span></td>
    <td><span class="NORM">Env&iacute;o de eventos mapeados de MIDI de movimientos de pote</span></td>
  </tr>

  <tr>
    <td width="30"><span class="BIG"><a href="mios_c_send_range.html">CODE</a></span></td>
    <td><span class="NORM">Escala de valores de pote</span></td>
  </tr>

  <tr>
    <td width="30"><span class="BIG"><a href="mios_c_send_ain_takeover.html">CODE</a></span></td>
    <td><span class="NORM">Realizaci&oacute;n de funci&oacute;n Toque-suave para potes</span></td>
  </tr>

  <tr>
    <td width="30"><span class="BIG"><a href="mios_c_send_din.html">CODE</a></span></td>
    <td><span class="NORM">env&iacute;o de eventos MIDI de movimientos de boton</span></td>
  </tr>

  <tr>
    <td width="30"><span class="BIG"><a href="mios_c_set_dout.html">CODE</a></span></td>
    <td><span class="NORM">Control de 128 LEDs via MIDI</span></td>
  </tr>

  <tr>
    <td width="30"><span class="BIG"><a href="mios_c_send_enc_rel.html">CODE</a></span></td>
    <td><span class="NORM">Env&iacute;o de eventos relativos&nbsp;MIDI de movimiento de rotary encoders</span></td>
  </tr>

  <tr>
    <td width="30"><span class="BIG"><a href="mios_c_send_enc_abs7.html">CODE</a></span></td>
    <td><span class="NORM">Env&iacute;o de eventos MIDI de 7bit de movimiento de rotary encoders</span></td>
  </tr>

  <tr>
    <td width="30"><span class="BIG"><a href="mios_c_send_enc_abs14.html">CODE</a></span></td>
    <td><span class="NORM">Env&iacute;o de eventos NRPN de 14bit de movimientos de rotary encoder&nbsp;</span></td>
  </tr>

  <tr>
    <td width="30"><span class="BIG"><a href="mios_c_handle_mf.html">CODE</a></span></td>
    <td><span class="NORM">Un Manejo simple para motorfaders</span></td>
  </tr>

  <tr>
    <td width="30"><span class="BIG"><a href="mios_c_filter_cc.html">CODE</a></span></td>
    <td><span class="NORM">Filtrado de todos los eventos MIDI excepto&nbsp;Bn 07 xx (Controladores de Volumen)</span></td>
  </tr>

  <tr>
    <td width="30"><span class="BIG"><a href="mios_c_forward_chn1.html">CODE</a></span></td>
    <td><span class="NORM">S&oacute;lo eventos de avance del Channel #1</span></td>
  </tr>

  <tr>
    <td width="30"><span class="BIG"><a href="mios_c_cc_to_nrpn.html">CODE</a></span></td>
    <td><span class="NORM">Conversi&oacute;n de&nbsp; CC a NRPN</span></td>
  </tr>

  <tr>
    <td width="30"><span class="BIG"><a href="mios_c_nrpn_to_cc.html">CODE</a></span></td>
    <td><span class="NORM">Conversi&oacute;n de NRPN a CC</span></td>
  </tr>

  <tr>
    <td width="30"><span class="BIG"><a href="mios_c_pic_pin.html">CODE</a></span></td>
    <td><span class="NORM">Conduciendo los pins del PIC v&iacute;a MIDI</span></td>
  </tr>

  <tr>
    <td width="30"><span class="BIG"><a href="mios_c_lcd_out.html">CODE</a></span></td>
    <td><span class="NORM">Impresi&oacute;n de valores en una LCD&nbsp;</span></td>
  </tr>

  <tr>
    <td width="30"><span class="BIG"><a href="mios_c_lcd_schars.html">CODE</a></span></td>
    <td><span class="NORM">Uso de caracteres especiales en una LCD</span></td>
  </tr>

</tbody></table>

FOOTER

Generated by GNU enscript 1.6.4.