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.
|