question sdk graph 90+e/ portage CAS
Re: question sdk graph 90+e/ portage CAS
Premiere adaptation de l'interface d'eigenmath, affichage 1-d pour le moment
https://www-fourier.ujf-grenoble.fr/~parisse/casio/test.g3a
https://www-fourier.ujf-grenoble.fr/~parisse/casio/test.g3a
-
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)- Posts: 3699
- Joined: 13 Dec 2013, 16:35
- Gender:
- Calculator(s):→ MyCalcs profile
Re: question sdk graph 90+e/ portage CAS
Peut-on tester qu'une touche est appuyee sans bloquer le programme? Je voudrais permettre a l'utilisateur de pouvoir interrompre un calcul trop long.
-
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)- Posts: 3699
- Joined: 13 Dec 2013, 16:35
- Gender:
- Calculator(s):→ MyCalcs profile
Re: question sdk graph 90+e/ portage CAS
Tu peux utiliser la fonction suivante (probablement attribuable à SimLo si on remonte la chaîne) :
C'est pas super joli donc autant privilégier GetKey(). Le keycode à envoyer est un keycode Basic et AC/ON a la valeur 32.
- Code: Select all
int IsKeyDown(int basic_keycode)
{
volatile const unsigned short *keyboard_register = (void *)0xA44B0000;
int row, col, word, bit;
row = basic_keycode%10;
col = basic_keycode/10-1;
word = row>>1;
bit = col + 8*(row&1);
return (0 != (keyboard_register[word] & 1<<bit));
}
C'est pas super joli donc autant privilégier GetKey(). Le keycode à envoyer est un keycode Basic et AC/ON a la valeur 32.
-
LephePartenaire
Niveau 11: LV (Légende Vivante)- Posts: 387
- Images: 42
- Joined: 15 Jun 2018, 19:53
- Gender:
- Calculator(s):→ MyCalcs profile
Re: question sdk graph 90+e/ portage CAS
Merci pour l'indication, mais je ne la comprends pas. Est-ce que je dois faire IsKeyDown(32) pour tester si AC/ON est enfoncé?
Comment fonctionne GetKey() si je veux utiliser quelque chose de plus propre? Le prototype que j'ai est le suivant
int GetKey(int*key);
Comment fonctionne GetKey() si je veux utiliser quelque chose de plus propre? Le prototype que j'ai est le suivant
int GetKey(int*key);
-
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)- Posts: 3699
- Joined: 13 Dec 2013, 16:35
- Gender:
- Calculator(s):→ MyCalcs profile
Re: question sdk graph 90+e/ portage CAS
C'est ça.
Quant à GetKey(), on ne peut pas l'utiliser pour le problème spécifique de savoir si une touche est pressée sans arrêter le programme, mais le reste du temps, il faut la préférer à cette fonction IsKeyDown() pour plusieurs raisons :
- GetKey() contient plusieurs fonctions spécifiques à l'OS (catalogue, réglage du contraste, extinction de la machine)
- GetKey() endort le processeur pendant l'attente, alors que IsKeyDown() est typiquement utilisé dans une boucle
Après je ne sais pas comment tu comptes implémenter l'interruption du calcul avec cette procédure parce que ton programme ne sera pas averti tout seul si l'utilisateur appuie sur AC/ON (il faut le vérifier manuellement). Un timer serait peut-être une solution intéressante.
IsKeyDown(32)
renvoie zéro si la touche AC/ON n'est pas pressée et un nombre non nul sinon (1 en l'occurrence). Ça marche pour toutes les touches, mais une seule à la fois.Quant à GetKey(), on ne peut pas l'utiliser pour le problème spécifique de savoir si une touche est pressée sans arrêter le programme, mais le reste du temps, il faut la préférer à cette fonction IsKeyDown() pour plusieurs raisons :
- GetKey() contient plusieurs fonctions spécifiques à l'OS (catalogue, réglage du contraste, extinction de la machine)
- GetKey() endort le processeur pendant l'attente, alors que IsKeyDown() est typiquement utilisé dans une boucle
Après je ne sais pas comment tu comptes implémenter l'interruption du calcul avec cette procédure parce que ton programme ne sera pas averti tout seul si l'utilisateur appuie sur AC/ON (il faut le vérifier manuellement). Un timer serait peut-être une solution intéressante.
-
LephePartenaire
Niveau 11: LV (Légende Vivante)- Posts: 387
- Images: 42
- Joined: 15 Jun 2018, 19:53
- Gender:
- Calculator(s):→ MyCalcs profile
Re: question sdk graph 90+e/ portage CAS
Il y a dans giac une fonction appelee control_c() qui est executee souvent (a chaque operation arithmetique ou lors des instructions de programmation de giac), c'est la que je voudrais tester que ON a ete activee. En fait ce n'est pas le fait qu'elle soit enfoncee qui m'interesse, mais qu'on a appuyé dessus.
-
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)- Posts: 3699
- Joined: 13 Dec 2013, 16:35
- Gender:
- Calculator(s):→ MyCalcs profile
Re: question sdk graph 90+e/ portage CAS
Ça semble honnête comme méthode. Par curiosité, ça représente quelle fréquence d'exécution à peu près ?
Pour détecter que la touche a été enfoncée puis relâchée c'est plus compliqué (il faut au moins deux exécutions de control_c() en tout cas, pour une méthode simple). À voir ce qui est le plus pratique à utiliser ; en tous cas l'interpréteur Basic s'arrête dès qu'on appuie sur AC/ON, sans attendre le relâchement, donc en première approche ça semble suffisant.
Pour détecter que la touche a été enfoncée puis relâchée c'est plus compliqué (il faut au moins deux exécutions de control_c() en tout cas, pour une méthode simple). À voir ce qui est le plus pratique à utiliser ; en tous cas l'interpréteur Basic s'arrête dès qu'on appuie sur AC/ON, sans attendre le relâchement, donc en première approche ça semble suffisant.
-
LephePartenaire
Niveau 11: LV (Légende Vivante)- Posts: 387
- Images: 42
- Joined: 15 Jun 2018, 19:53
- Gender:
- Calculator(s):→ MyCalcs profile
Re: question sdk graph 90+e/ portage CAS
La frequence d'appel de control_c depend de ce qu'on fait, si les calculs sont simples c'est tres frequent, du coup il vaudrait mieux pre-calculer les variables dans IsKeyDown, sinon ca risque de ralentir. Sauf erreur de ma part, word vaut 1 et bit vaut 2 pour le test
(0 != (keyboard_register[word] & 1<<bit));
(0 != (keyboard_register[word] & 1<<bit));
-
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)- Posts: 3699
- Joined: 13 Dec 2013, 16:35
- Gender:
- Calculator(s):→ MyCalcs profile
Re: question sdk graph 90+e/ portage CAS
C'est ça. On obtient (sauf erreur à mon tour) un test simple :
Cette expression vaut autre chose que zéro quand la touche AC/ON est pressée.
- Code: Select all
(*(volatile uint16_t *)0xa44b0002 & 0x4)
Cette expression vaut autre chose que zéro quand la touche AC/ON est pressée.
-
LephePartenaire
Niveau 11: LV (Légende Vivante)- Posts: 387
- Images: 42
- Joined: 15 Jun 2018, 19:53
- Gender:
- Calculator(s):→ MyCalcs profile
Re: question sdk graph 90+e/ portage CAS
Mise a jour de https://www-fourier.ujf-grenoble.fr/~parisse/casio/test.g3a.
J'ai corrige un bug fort genant qui provoquait un reboot au lancement (sauf si Eigenmath avait ete utilisee auparavant, c'est pour ca que je ne l'avais pas vu!).
Les fonctions de calcul formel courantes (celles du catalogue) devraient fonctionner (y compris tabvar mais l'affichage n'est pas convaincant). C'est le moment de tester pour me faire remonter des problemes que je puisse les corriger a temps, si certains lyceens envisagent de l'utiliser pour le bac!
J'ai corrige un bug fort genant qui provoquait un reboot au lancement (sauf si Eigenmath avait ete utilisee auparavant, c'est pour ca que je ne l'avais pas vu!).
Les fonctions de calcul formel courantes (celles du catalogue) devraient fonctionner (y compris tabvar mais l'affichage n'est pas convaincant). C'est le moment de tester pour me faire remonter des problemes que je puisse les corriger a temps, si certains lyceens envisagent de l'utiliser pour le bac!
-
parisseVIP++
Niveau 12: CP (Calculatrice sur Pattes)- Posts: 3699
- Joined: 13 Dec 2013, 16:35
- Gender:
- Calculator(s):→ MyCalcs profile
Who is online
Users browsing this forum: ClaudeBot [spider] and 5 guests