les touches alpha, maj, 2nd, et HAND sont des "modificateurs"
leur but est de modifier l'action correspondant à une autre touche (et donc, la valeur renvoyée par ngetchx quand on les utilise en combinaison avec une autre touche)
De ce fait, le fait d'appuyer uniquement sur une de ces touches modificateur ne peut pas être détecté par ngetchx.
Si tu veux lire ces touches sans avoir à ce qu'elles soient utilisées en combinaison avec une touche "normale", il faudra passer par les touches de la famille de _rowread...
Cela dit, si tu utilises ce genre de fonction de lecture du clavier, il te faudra détourner/désactiver les AUTO_INT 1 et 5... ce qui empéchera la lecture des autres touches avec ngetchx...
Il y a dans TIGCC pas mal de fonctions basées sur _rowread, parfois plus simples à utiliser ; cf la doc, si tu veux te lancer là-dedans
En somme :
- soit tu veux vraiment lire les touches modificateurs => famille de _rowread pour lire le clavier
- soit tu te passes des modificateurs => famille de ngetchx
(note: _rowread et assimilés sont généralement plus rapides que ngetchx (vu que les AUTO_INT 1 et 5 sont désactivés) et sont généralement utilisées pour les jeux)
(note 2 : _rowread n'attend pas une pression sur une touche : ça permet juste de savoir si une touche est enfoncée à l'instant où tu appelles cette fonction)

merci squale92
c bien toi l'auteur des tutos c ?
je les utilise ils sont pas mal
ben en fait je voudrais absolument utiliser la touche 2nd
donc faut que j'utilise rowread
mais
"il te faudra détourner/désactiver les AUTO_INT 1 et 5... ce qui empéchera la lecture des autres touches avec ngetchx... "
c quoi les auto_int 1-5 ?
euh.............
he y'a plein de trucs compliqués là dedans !
moi j'veux juste detecter la touche 2nd
s'il faut utiliser keytest / rowread pas de prob
mais pour les interruptions là ca paraît achement complexe
tu peux me donner un bout de code pour voir ?
merci geogeo
jcomprends pas tout ton code mais vais essayer ca.
Jyaif Le 17/06/2005 à 21:36 avant que tu commences à chercher a détecter les appuies de touches, tu met:
OldInt1 = GetIntVec (AUTO_INT_1);
OldInt2 = GetIntVec (AUTO_INT_5);
SetIntVec (AUTO_INT_1, DUMMY_HANDLER);
SetIntVec (AUTO_INT_5, DUMMY_HANDLER);
Tu détectes l'appuie de la touche [2nd] avec:
_keytest(RR_2ND)
(_keytest(RR_2ND) a une valeur différente de zéro que quand la touche 2nd est appuyée
Une fois que tu as fini d'utiliser le clavier avec _keytest, tu met:
SetIntVec (AUTO_INT_1, OldInt1);
SetIntVec (AUTO_INT_5, OldInt5);
Tu sais tout là; pour le reste il faut que tu réfléchisses...
Juste une précision, INT_HANDLER n'est pas un alias de void *, mais plutôt de void (*)(void) (malheureusement je ne suis pas sûr de la syntaxe), c'est-à-dire un pointeur vers une fonction ne prenant aucun paramètre et ne renvoyant rien.

« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas
. »
void (*foo)(void)
est bien un pointeur sur une fonction que tu decris
Mais cela dit, quand on définit un INT_HANDLER avec TIGCC, on définit bien une fonction void handler(void) qui sera appelée par le vrai handler d'interruption. Donc la fonction qu'on définit se termine bien par un rts.

« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas
. »
En parlant de ça au lieu d'utiliser INT_HANDLER pour spécifier une interruption on ne peut pas utiliser #pragma ... ?
Genre un truc de ce style? Car je connais certaines plateformes embarquées surtout pour les microcontrolleurs pour un robot où la déclaration d'une interruption se fait de cette façon:
#pragma interrupt_handler fonction_name:5
Genre on déclare la fonction 'fonction_name' qui correspond à l'interruption numéro 5.
Il me semble qu'__attribute__((__interrupt_handler__)) est censé éviter l'encapsulation par un movem d0-d7/a0-a6 vers et de la pile + la séquence d'appel et de retour de la sous-fonction.
Gain pour les handlers simples ({counter++;}): plus de 300 clocks par exécution du handler. A 256 ou ~350-395 Hz, faites le calcul...
?? Un handler d'interruption ne doit modifier aucun registre, y compris SR.
J'ai fait le calcul et je sais que c'est négligeable, même en inlinant les sous-fonctions éventuelles du handler d'INT1.