Bonjour,
L'inscription sur ce forum et les premiers messages sont modérés par un Administrateur.
Ce n'est pas très convivial mais malheureusement nécessaire suite au spam intensif de nos amis russes.
Cordialement,
Dominique

Comment connaître espace libre de la Flash sur le Pi Pico ?

Le langage MicroPython, l'API machine (I2C, SPI, UART, Pin, etc)
Règles du forum
Vous aimez MicroPython? Nous aussi! Ces forums sont destinés aux amoureux de Python sur MicroContrôleur.
Le support se fait sur base volontaire et uniquement pour des produits officiels (pas de copie SVP).
Le forum de MicroPython.org sera une excellente référence documentaire (en anglais).

Merci de suivre les recommandations suivantes.
Pensez à:
  • Titre claire: permettant d'identifier le produit et le problème
  • Contenu complet: schema, message d'erreur, etc (tout ce qui permet d'aider à distance).
  • Fichier joint: Max 300 Ko
  • Courtoisie et précision
sensor56
Messages : 41
Inscription : jeu. 1 avr. 2021 07:14

Comment connaître espace libre de la Flash sur le Pi Pico ?

Message par sensor56 »

Est-ce qu'il y a un moyen simple de connaître l'espace libre restant sur la Flash à partir du code Python sur la carte Pi Pico ? Il semble intéressant de pouvoir connaître l'espace restant depuis le code, notamment si on fait du datalogging, etc. Question idem pour une carte SD d'ailleurs. J'imagine qu'il faut passer par os.statvfs() ? https://docs.micropython.org/en/latest/ ... os.statvfs Et faire quelque chose comme ce qui est indiqué ici : https://stackoverflow.com/questions/426 ... given-file

SI quelqu'un a une combine, je suis preneur...
sensor56
Messages : 41
Inscription : jeu. 1 avr. 2021 07:14

Re: Comment connaître espace libre de la Flash sur le Pi Pico ?

Message par sensor56 »

Ok, j'ai trouvé et je me réponds à moi-même. Je poste ici en espérant que çà serve à d'autres :

En se basant sur :

* <https://docs.micropython.org/en/latest/library/uos.html>
* <https://stackoverflow.com/questions/426 ... given-file>

On peut faire :

Code : Tout sélectionner

>>> import os
>>> statvfs = os.statvfs('/')
Par contre on ne peut pas poser comme en CPython:

Code : Tout sélectionner

statvfs.f_frsize * statvfs.f_blocks     # Size of filesystem in bytes
statvfs.f_frsize * statvfs.f_bfree      # Actual number of free bytes
statvfs.f_frsize * statvfs.f_bavail     # Number of free bytes that ordinary users
                                        # are allowed to use (excl. reserved space
Traceback (most recent call last):
  File "<stdin>", line 4, in <module>
AttributeError: 'tuple' object has no attribute 'f_frsize'
En fait, en MicroPython, statvfs est un tuple ce qui ne permet donc pas l'accès direct aux propriétés :

Code : Tout sélectionner

>>> statvfs
(4096, 4096, 352, 315, 315, 0, 0, 0, 0, 255)
En se basant sur la doc de la fonction statvfs du module uos (https://docs.micropython.org/en/latest/ ... os.statvfs), on peut poser :

Code : Tout sélectionner

>>> f_bsize, f_frsize, f_blocks,f_bfree,f_bavail, f_bavail, f_ffree, f_favail, f_flag, f_namemax=0,1,2,3,4,5,6,7,8,9
Ensuite, on peut faire facilement :

Code : Tout sélectionner

>>> statvfs[f_frsize] *statvfs[f_bfree] # free
1290240
>>> statvfs[f_frsize] *statvfs[f_blocks] # total
1441792
>>> totalSize=statvfs[f_frsize] *statvfs[f_blocks]
>>> freeSize=statvfs[f_frsize] *statvfs[f_bfree]
>>> totalSize=statvfs[f_frsize] *statvfs[f_blocks] / 10**6 # en Mo
>>> freeSize=statvfs[f_frsize] *statvfs[f_bfree] / 10**6 # en Mo
>>> print(str(freeSize)+"/"+str(totalSize)+"Mo")
1.29024/1.441792Mo
>>> print(str(freeSize)+" Mo free /"+str(totalSize)+" Mo total")
1.29024 Mo free /1.441792 Mo total
On pourrait facilement mettre tout çà dans une petite fonction utilitaire. Et c'est cool de voir que l'on a plus de 1Mo effectivement libre sur le Pi Pico, ce qui est intéressant pour du datalogging, sans avoir besoin de connecter une carte SD. Par exemple, un fichier de 1440 lignes de data (1 mesure par minute pendant 24H) ne prend que 30Ko environ.
Avatar de l’utilisateur
Dominique
Administrateur du site
Messages : 109
Inscription : dim. 17 mai 2020 22:43

Re: Comment connaître espace libre de la Flash sur le Pi Pico ?

Message par Dominique »

User mais ne pas abuser

Attention avec les écritures récurrentes en flash... une cellule flash grille au bout de 100.000 cycles d'écriture.
Cela semble beaucoup mais peut être atteint en quelques mois suivant l'intensité data-logging.
MicroPython utilise maintenant LittleFs et je ne sais pas si cela améliore cette contrainte (en distribuant les écritures sur différentes cellules)

Si data-logging intensif alors faut absolument passer sur un stockage externe (soit carte SD, soit EEPROM) que l'on pourra remplacer.

Note: En test intensif, je suis déjà arrivé à griller de la flash en moins de 20 mins.
Dominique, MC Hobby.
sensor56
Messages : 41
Inscription : jeu. 1 avr. 2021 07:14

Re: Comment connaître espace libre de la Flash sur le Pi Pico ?

Message par sensor56 »

reste à savoir si un "append" sur un fichier existant entraîne une ré-écriture complète du fichier ou un simple ajout.

Mais, ok, privilégier l'usage d'une SD si datalogging important.

Et ce rappel sur le nombre max d'écriture en FLASH donne aussi de la pertinence au fait de garder les codes côté PC et de les envoyer en RAM à l'exécution, en phase de développement, plutôt que de les écrire sur la flash à chaque modif.
Avatar de l’utilisateur
Dominique
Administrateur du site
Messages : 109
Inscription : dim. 17 mai 2020 22:43

Re: Comment connaître espace libre de la Flash sur le Pi Pico ?

Message par Dominique »

sensor56 a écrit : jeu. 8 avr. 2021 07:42 reste à savoir si un "append" sur un fichier existant entraîne une ré-écriture complète du fichier ou un simple ajout.
A mon avis, tant que le block n'est pas rempli (4096 octets sous MicroPython), on peut s'attendre à des écritures récurrentes partielles dans le bloc tant que celui-ci n'est pas rempli. Cela aura probablement moins d'impact dans le cas d'un append() que lorsque l'on modifie constamment la même section.
sensor56 a écrit : jeu. 8 avr. 2021 07:42 Et ce rappel sur le nombre max d'écriture en FLASH donne aussi de la pertinence au fait de garder les codes côté PC et de les envoyer en RAM à l'exécution, en phase de développement, plutôt que de les écrire sur la flash à chaque modif.
A tiens, je n'avais pas pensé à celle là!
Mais c'est effectivement pertinent!
Dominique, MC Hobby.
Répondre