English Version French Version Spanish Version

MIOS : L'Interface C

La programmation des applications MIOS en C sera dans l'avenir une bonne alternative au language assembleur, ce language de haut-niveau étant facile à comprendre, moins enclin à l'erreur et plus facilement ré-utilisable. Les points faibles du C sont de moins bonnes performances et un code plus volumineux, ce qui implique que les applications comme la MIDIbox SID ou MIDIbox SEQ ne pourront être programmées intégralement en C, notament à cause de la taille réduite des mémoires flash et RAM du PIC18F452 (dans la plupart des cas néanmoins suffisantes - mais pas pour de telles fonctionnalités...). Ce problème sera probablement résolu au fur et à mesure de la sortie de nouveaux chips à la connectique compatible et disposants de plus de mémoire, mais cela prendra plusieurs années.

Malgrés ces contraintes, la combinaison du MIOS et du C est une bonne solution. Pourquoi ? Parce que le MIOS (le système d'exploitation) est programmé en language assembleur et spécialement optimisé pour la rapidité d'éxecution. Il traite un grand nombre de tâches de performance critiques , desquelles l'utilisateur n'a plus à se soucier. Le MIOS contient un grand nombre de fonctions - vous dispensant d'avoir à réinventer la roue - et permet au programmateur de réaliser son projet MIDI avec succés sans être obligé de maîtriser les connaissances de fond sur les traitements IO haute performance et la gestion du MIDI appropriée.

Du coup, l'utilisateur peut simplement commencer à programmer dans la couche "application" , où l'optimisation du code dans la plupart des cas n'a pas trop d'importance, avec l'assurance que les fonctions seront traitées avec la même rapidité, qu'elles aient été programmées en C ou en assembleur . Bien sûr, le résultat dépend aussi et en grande partie de l'application et du compileur utilisé, mais il est d'ores et déjà possible de programmer de pas mal de choses sans trop d'effort. Et plus d'utilisateurs se lanceront dans la programmation en C, plus d'exemples de codes pourront être partagés par la communauté, et plus vite apparaitront de nouvelles applications...

Pour l'instant, je ne suis pas en mesure de bien définir ce qui avec raison doit être programmé en C ou ce qui doit être programmé en assembleur - c'est une base de connaissance à établir dans les mois à venir - vos opinions sont les bienvenues! Gardez à l'esprit que le mélange du language C et de l'assembleur est toujours possible dans la couche "application". Mon opinion pour le moment : l'interface utilisateur (boutons, gestion des LED, des écrans, MIDI IO) peut être implémentée en C sans grands désavantages, mais les routines qui doivent interagir rapidement (comme les pilotes de périphériques, ou encore les algorythmes destinés à traiter un grand nombre de données) doivent être programmées dans des modules en assembleur distincts puis appelées depuis le C.

Réalisation Technique

Pour le MIOS , cela ne fait aucune différence qu'une routine attachée aux routines d'appel  USER_*  soit en C ou en assembleur, car cette éventualité a été prise en compte dès les premières phases de la conception. Le MIOS est toujours branché sur les entrées USER_* en présence d'évènements, entrées qui font partie de l'application. De là, l'application peut appeler la fonction en C si nécessaire.

Les fonctions MIOS (MIOS_*) peuvent le plus souvent être appelée depuis un programme en C sans perte de performance, du moment qu'il n'y a qu'un paramètre en entrée et en sortie. Une fonction impliquant plus de paramètres requiert du code supplémentaire afin de copier les paramètres en C (ceux qui sont mis dans la pile) dans  MIOS_PARAMETER[123].

Si tout cela est nouveau pour vous, ne vous en inquiétez pas trop - vous n'avez pas vraiment à vous soucier de ces considérations sur les traitements "bas-niveau" .

Servez-vous simplement du "Wrapper" contenant tous les codes requis afin de "linker" les fonctions en C au MIOS. Ce "wrapper" est inclu dans l'archive "MIOS baser" .

Exemples de Programmations

CODE Envoi d'évènements MIDI à partir de mouvements de potentiomètres
CODE Envoi d'évènements MIDI mappés à partir de mouvements de potentiomètres
CODE Etalonnage de valeurs de potentiomètres
CODE Realisation d'une fonction "Soft-Takeover" pout potentiomètres
CODE Envoi d'évènements MIDI à partir de mouvements de boutons
CODE Contrôle de 128 LEDs via MIDI
CODE Envoi d'évènements MIDI relatifs à partir de mouvements d'encodeurs
CODE Envoi d'évènements MIDI 7bit à partir de mouvements d'encodeurs
CODE Envoi d'évènements NRPN 14bit à partir de mouvements d'encodeurs
CODE Un gestionnaire de Faders Motorisés simple
CODE Filtrage de tous les évènements MIDI Event à l'exception des messages Bn 07 xx (Contrôleurs Volumes)
CODE Renvoi des évènements uniquement du Canal #1
CODE Convertion CC vers NRPN
CODE Convertion NRPN vers CC
CODE Pilotage des pins du PIC via MIDI
CODE Affichage de valeurs sur un écran LCD
CODE Utilisation de caractères spéciaux sur un écran LCD



Last update: 2015-09-24

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