English Version French Version Spanish Version

Interfaz MIOS C

Programar aplicaciones MIOS en C podrá ser una solución alternativa para el ensamblador en el futuro, porque este lenguaje es más fácil de entender, menos propenso a errores y más reutilizable. La desventaja de C es un peor funcionamiento y códigos mucho más largos, lo que significa que no será posible programar aplicaciones tan complejas como MIDIbox SID o MIDIbox SEQ completamente en C, especialmente por la reducció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án mucha más memoria, pero puuede que esto tarde algunos años.


De cualquier manera, a pesar de este hecho, MIOS y C son una estupenda combinación. ¿Por qué? porque MIOS (el Sistema Operativo) está programado en lenguaje ensamblador y ha sido optimizado a mano para mayor velocidad. Maneja muchas tareas críticas de ejecución de las que el usuario no se tiene que preocupar. MIOS contiene un montón de funciones prefabricadas que evitan a la gente tener que reinventarlo todo- Posibilita al programador interesado la correcta implementación del proyecto MIDI sin conocimientos básicos sobre IO de alto rendimiento o correcto procesamiento MIDI.

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

Actualmente, no soy capaz de estimar cuándo conviene programar algo en ensamblador o en C- es este un tipo de conocimiento a adquirir en los próximos meses- ¡Serán bienvenidos toda vuestra ayuda y recomendaciones!  No olvideis que también es posible mezclar C y ensamblador en la capa de la aplicació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ápido (como un controlador periférico o algoritmos con procesos de muchos datos) deberían ser programados en módulos separados de ensamblador y llamados con C.

Realización Técnica

Para MIOS en sí no importa si una rutina de C o ensamblador está enganchado a las rutinas de respuesta de USER_*, porque esta posibilidad ha sido tenida en cuenta desde el principio de la fase de diseño. MIOS siempre se entroncará con los vectores de  USER_* en los eventos, que son parte de la aplicación. Desde ahí, la aplicación puede enlazarse a C si se desea.

Las funciones MIOS (MIOS_*)  pueden ser llamadas, en su mayor parte, desde un programa en C sin pérdida de datos, mientras solo haya un parámetro de entrada y/o salida. Las funciones con más parámetros requieren un poco más de código que copie los parámetros de C ( que son incrustados en la compilación) en los MIOS_PARAMETER[123].

Si esto te suena nuevo,  no te sientas confuso, por favor- no te tienes que ocupar de esta manipulación de segundo nivel.

En vez  de eso, solo tienes que usar el llamado "Wrapper" (envoltura), que contiene todo el código que hace falta para enlazar funciones C con MIOS. Este "Wrapper" es parte del paquete MIOS Base.

Ejemplos de programación

    CODE Enviar eventos MIDI de movimientos de pote
    CODE Envío de eventos mapeados de MIDI de movimientos de pote
    CODE Escala de valores de pote
    CODE Realización de función Toque-suave para potes
    CODE envío de eventos MIDI de movimientos de boton
    CODE Control de 128 LEDs via MIDI
    CODE Envío de eventos relativos MIDI de movimiento de rotary encoders
    CODE Envío de eventos MIDI de 7bit de movimiento de rotary encoders
    CODE Envío de eventos NRPN de 14bit de movimientos de rotary encoder 
    CODE Un Manejo simple para motorfaders
    CODE Filtrado de todos los eventos MIDI excepto Bn 07 xx (Controladores de Volumen)
    CODE Sólo eventos de avance del Channel #1
    CODE Conversión de  CC a NRPN
    CODE Conversión de NRPN a CC
    CODE Conduciendo los pins del PIC vía MIDI
    CODE Impresión de valores en una LCD 
    CODE Uso de caracteres especiales en una LCD


    Last update: 2015-09-24

    Copyright 1998-2015, Thorsten Klose. All rights reserved.