Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Projets de programmation


Index du Forum » Projets de programmation » MicroPython sur Graph 35/75+E
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

MicroPython sur Graph 35/75+E

Posté le 09/05/2018 17:27

Page du programme : https://www.planet-casio.com/Fr/programmes/voir_un_programme_casio.php?showid=3603

Todo list :

- Corriger le bug de sauvegarde lors de la sauvegarde d'un fichier vide
- Faire les menus en image
- Module graphique
- Plus de mémoire pour les SH4

Ancien message
Cliquer pour enrouler
Parce que le python est très conseillé pour l'année prochaine, il serait bien de faire un port de MicroPython pour les graph monochromes.

Niveau faisabilité, c'est faisable :
- MicroPython demande 256k d'espace (la limite est de 512k donc on a de la chance) et 16 ko de ram (même pas besoin de taper dans les 256 ko des SH4)
- L'éditeur de texte serait tout simplement une version modifiée d'Edit, avec l'interface adaptée au Python (catalogue intégré, fonctions disponibles avec les F-keys, comme l'appli pour graph 90).

Du coup j'aimerais bien faire le port moi même, mais j'aurai sûrement besoin de votre aide :
- MicroPython ne compile que sous linux (ou en tout cas sûrement pas avec le SDK casio), du coup pour moi ça va être chiant voire impossible de le compiler
- J'ai regardé le port minimal (https://github.com/micropython/micropython/tree/master/ports/minimal) et je comprends que dalle à ce qu'il faudrait modifier sûrement les trucs GPIO, mais quoi d'autre ?

Si vous êtes partant pour ce projet, votre aide est la bienvenue



Précédente 1, 2, 3, 4, 5, 6, 7, 8, 9 Suivante
Lephenixnoir Hors ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 13/11/2018 10:38 | #


Zezombye a écrit :
Par contre, c'est dans la ram statique ça non ? Du coup j'ai tenté de faire :

char* heap = malloc(5000);


mais ça me fait une erreur chelou :

Tu as tout à fait raison, et la RAM statique fait 8 ko, donc c'est pas terrible. Pour ton problème, il te suffit d'écrire const char *heap; au début du fichier et ensuite heap = malloc(20000) tout au début de main(). S'il y a des constructeurs, fais-en un constructeur de plus haute priorité.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Critor Hors ligne Administrateur Points: 2689 Défis: 18 Message

Citer : Posté le 13/11/2018 19:39 | #


@Zezombye C'est stable, tu mets à jour ?
Hâte de tester si diverses choses marchent maintenant, et auquel cas ça méritera une annonce.
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 13/11/2018 19:41 | #


Pas stable du tout : j'ai réussi pour l'instant à allouer 30 ko, mais y'a une grosse fuite de mémoire qui est apparemment que, quand on retourne sur l'éditeur après avoir exécuté un script, il alloue une 2ème fois la mémoire nécessaire pour l'éditeur.

Je ferai une release quand j'aurai réussi à faire tourner les 2 scripts du triconcours, là je pense que j'aurai un peu tout.
(et pour l'instant c'est la seule chose que j'ai faite depuis 2 mois )
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Critor Hors ligne Administrateur Points: 2689 Défis: 18 Message

Citer : Posté le 13/11/2018 19:46 | #


Ok, merci pour ta réponse.

Outre suffisamment de mémoire (quelques Ko devraient suffire, après tout ça marche sur NumWorks) il te faudra la gestion des entiers longs pour le script de Force.

Sur le script de Courage, il faudra aussi de préférence la gestion des flottants en double précision, pour que ça ne réponde pas n'importe quoi.
En plus d'un module graphique, mais ça tu peux toujours mettre en commentaire.
Lephenixnoir Hors ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 13/11/2018 19:56 | #


Je suppose que tu as mis des double partout Zezombye non ? Avec Python c'est plus simple...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 15/11/2018 19:45 | #


j'ai réussi pour l'instant à allouer 30 ko, mais y'a une grosse fuite de mémoire


C'est sûr que, si je fais un malloc(30000) mais pas de free(), y'a une très grosse fuite de mémoire.

Du coup je commence les floats, en parallèle je fais aussi les MPZ (les entiers à taille infinie) mais me faut de l'aide du forum parce que selon MPy, c'est pas compatible : https://forum.micropython.org/viewtopic.php?f=3&t=5074&start=40#p31851

Ajouté le 15/11/2018 à 20:13 :
J'ai trouvé pour les MPZ (c'était juste un truc à modifier dans le makefile), du coup je peux calculer la factorielle de 50 sans problème (par contre faut pas trop en abuser : fact(100) fait une system error, et fact(69) a l'air de faire planter la calto )
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir Hors ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 15/11/2018 20:58 | #


Bah, euh, la factorielle de 100 ne fait "que" 158 chiffres de long, ça devrait être calculable quand même x)
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 16/11/2018 18:08 | #


C'est aussi peut-être un problème de récursion (même si dans ce cas il devrait mettre une erreur dans python et pas faire crasher le système...), je regarderai après les floats.
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir Hors ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 16/11/2018 18:52 | #


Ce n'est pas un problème de récursion ! Une récursion de profondeur 100 c'est rien du tout.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 16/11/2018 19:18 | #


Voilà le problème des floats est réglé :



(je crois que c'est le 2ème truc le plus sale que j'ai fait, après avoir passé 2 variables dans une seule avec du bit shifting)
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 16/11/2018 19:42 | #


2**3.14

Ajouté le 16/11/2018 à 19:43 :
Pour être plus précis :
>>> pow
<built-in function pow>
>>> pow(2, 3.14)
8.815240927012887
>>> 2**3.14
8.815240927012887

Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 16/11/2018 21:01 | #


Euh, ouais Darks a raison, pow() prend les exposants flottants, tu peux pas faire ça.

D'ailleurs tu as des float ou des double ? À ce stade il faut vraiment te poser des questions parce qu'il est probable que MICROPY_FLOAT_C_FUN(pow) soit là pour utiliser uniquement des float.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 16/11/2018 21:06 | #


Rah mais dans ce cas précis, je remplace pow(10^x) avec x entier, ce qui est faisable avec une boucle for

Mais bon en fait je dois toujours implémenter pow(), vu que l'opérateur puissance (**) l'utilise. Par contre j'ai trouvé le saint graal : dans lib/libm_dbl y'a plein d'implémentations de fonctions de math.h standalone (c'est à dire exactement ce dont j'ai besoin), j'ai déjà repris leur implémentation de pow et ça marche parfaitement. (du coup j'ai viré mes boucles for alakon)

Là vu que le modulo sur les floats marchent toujours pas, j'en ai conjecturé que fmod() marchait pas non plus, et donc peut être le reste de math.h, du coup j'ai ajouté tous les fichiers de libm_dbl, j'essaie de compiler et normalement tout ce qui concerne les floats devrait marcher.

(MICROPY_FLOAT_C_FUN c'est un macro qui sélectionne la fonction en fonction de float/double, là j'ai mis double donc ça donne pow() mais si j'avais mis float ça aurait donné powf())
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir Hors ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 16/11/2018 21:14 | #


Zezombye a écrit :
(MICROPY_FLOAT_C_FUN c'est un macro qui sélectionne la fonction en fonction de float/double, là j'ai mis double donc ça donne pow() mais si j'avais mis float ça aurait donné powf())

Ok, tout va bien alors. Bien joué jusque-là !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 26/11/2018 18:03 | #


Du coup j'aimerais mettre un module graphique avec comme fonctions :
- line(x1, y1, x2, y2, color=1)
- pxl(x, y, color=1)
- rect(x1, y1, x2, y2, color=1)
- circle(x1, y1, r, color=1)
et en gros toutes les fonctions de MonochromeLib (avec peut être même les BMP s'ils marchent).

Par contre, comment je fais pour switcher entre le shell (mode texte) et le mode graphique ? Toute fonction graphique bascule en mode graphique (et un print/input rebascule en mode texte), ou j'utilise des fonctions spéciales pour entrer/sortir du mode graphique ? Ca marche comment sur la numworks ?
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir Hors ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 26/11/2018 18:04 | #


Je crois que ça dessine par-dessus l'écran, ça fait bizarre. Regarde les tests de Critor sur la fractale de Mandelbrot.

Je serais d'avis que tu fasses deux VRAMs avec une commande pour passer de l'une à l'autre.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Critor Hors ligne Administrateur Points: 2689 Défis: 18 Message

Citer : Posté le 26/11/2018 18:26 | #


Sur la NumWorks, toute commande graphique fait basculer l'affichage en mode graphique, initialement un écran blanc.
Une fois le script terminé, la touche [annul] du clavier permet de revenir à l'affichage console.

Mais tu es libre de faire un autre choix.
Lephenixnoir Hors ligne Administrateur Points: 24678 Défis: 170 Message

Citer : Posté le 26/11/2018 18:29 | #


Les deux ! Les deux ! Les deux !

(Pas la solution de facilité please)
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 26/11/2018 18:29 | #


Et on ne peut pas revenir au mode texte entre temps ?
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Critor Hors ligne Administrateur Points: 2689 Défis: 18 Message

Citer : Posté le 26/11/2018 18:43 | #


Pas à ma connaissance.
Ni avec print() ni avec input() en tous cas.
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 26/11/2018 18:50 | #


Je trouve ça bof ça pourrait être utile.

Bon du coup :
- Toute utilisation d'une fonction graphique basculera sur le mode graphique
- Toute utilisation de print() ou input() basculera sur le mode texte
- Il y aura des fonctions pour basculer manuellement (c'est aussi pour faire plaisir à lephé, mais de toute façon j'allais les mettre parce que ça me coûte pas grand chose).
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Précédente 1, 2, 3, 4, 5, 6, 7, 8, 9 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 81 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd