stm32f407vet6 avantage avec arduino ??

Bonjour,

tous nouveau sur le forum et en arduino

j'emploie principalement micropython sur stm32, eps32, esp8266 etc.. , j'envisage de passer en arduino (que je n'ai jamais utilisé )

d'apres vous , est ce qu'arduino est moins gourmant en sram que python ?

car avec 192k de sram avec le stm32 , je suis bloqué avec micropython

j'ai besoin de 16 sorties et 24 entrees

mon debut de prog en micropython qui bloque déjà par manque de memoire

import machine

#thermostats
cchp=machine.Pin('B15', machine.Pin.IN, machine.Pin.PULL_DOWN)
cchf=machine.Pin('B13', machine.Pin.IN, machine.Pin.PULL_DOWN)
ccha=machine.Pin('D13', machine.Pin.IN, machine.Pin.PULL_DOWN)
csdb=machine.Pin('D4', machine.Pin.IN, machine.Pin.PULL_DOWN)
cchv=machine.Pin('D15', machine.Pin.IN, machine.Pin.PULL_DOWN)
cesc=machine.Pin('D1', machine.Pin.IN, machine.Pin.PULL_DOWN)
ccui=machine.Pin('E8', machine.Pin.IN, machine.Pin.PULL_DOWN)
csam=machine.Pin('E10', machine.Pin.IN, machine.Pin.PULL_DOWN)
csal=machine.Pin('E12', machine.Pin.IN, machine.Pin.PULL_DOWN)
cwc=machine.Pin('E14', machine.Pin.IN, machine.Pin.PULL_DOWN)
cbur=machine.Pin('D8', machine.Pin.IN, machine.Pin.PULL_DOWN)
cent=machine.Pin('D10', machine.Pin.IN, machine.Pin.PULL_DOWN)
tcuve=machine.Pin('E0', machine.Pin.IN, machine.Pin.PULL_DOWN)

#fenetres
fchp=machine.Pin('B14', machine.Pin.IN, machine.Pin.PULL_DOWN)
fchf=machine.Pin('B12', machine.Pin.IN, machine.Pin.PULL_DOWN)
fcha=machine.Pin('D7', machine.Pin.IN, machine.Pin.PULL_DOWN)
fsdb=machine.Pin('D5', machine.Pin.IN, machine.Pin.PULL_DOWN)
fchv=machine.Pin('D14', machine.Pin.IN, machine.Pin.PULL_DOWN)
fesc=machine.Pin('D0', machine.Pin.IN, machine.Pin.PULL_DOWN)
fcui=machine.Pin('E7', machine.Pin.IN, machine.Pin.PULL_DOWN)
fsam=machine.Pin('E9', machine.Pin.IN, machine.Pin.PULL_DOWN)
fwc=machine.Pin('E11', machine.Pin.IN, machine.Pin.PULL_DOWN)
fbur=machine.Pin('E13', machine.Pin.IN, machine.Pin.PULL_DOWN)
fent=machine.Pin('E15', machine.Pin.IN, machine.Pin.PULL_DOWN)

#relais
rchp=machine.Pin('E2', machine.Pin.OUT)
rchf=machine.Pin('E5', machine.Pin.OUT)
rcha=machine.Pin('E6', machine.Pin.OUT)
rsdb=machine.Pin('C13', machine.Pin.OUT)
rchv=machine.Pin('C0', machine.Pin.OUT)
resc=machine.Pin('C1', machine.Pin.OUT)
rcui=machine.Pin('C2', machine.Pin.OUT)
rsam=machine.Pin('C3', machine.Pin.OUT)
rsal=machine.Pin('A0', machine.Pin.OUT)
rwc=machine.Pin('A1', machine.Pin.OUT)
rbur=machine.Pin('A2', machine.Pin.OUT)
rent=machine.Pin('A3', machine.Pin.OUT)
rcirc=machine.Pin('A4', machine.Pin.OUT)
rvan=machine.Pin('A5', machine.Pin.OUT)
rchp.value(1)
rchf.value(1)
rcha.value(1)
rsdb.value(1)
rchv.value(1)
resc.value(1)
rcui.value(1)
rsam.value(1)
rsal.value(1)
rwc.value(1)
rbur.value(1)
rent.value(1)
rcirc.value(1)
rvan.value(1)
mchp=0
mchf=0
mcha=0
msdb=0
mchv=0
mesc=0
mcui=0
msma=0
msal=0
mwc=0
mbur=0
ment=0

mem=[mchp,mchf,mcha,msdb,mchv,mesc,mcui,msam,msal,mwc,mbur,ment]
ther=[cchp,cchf,ccha,csdb,cchv,cesc,ccui,csam,csal,cwc,cbur,cent]
fen=[fchp,fchf,fcha,fsdb,fchv,fesc,fcui,fsam,fsam,fwc,fbur,fent]
rel=[rchp,rchf,rcha,rsdb,rchv,resc,rcui,rsam,rsal,rwc,rbur,rent]

merci à vous

d'après vous , est ce qu'arduino est moins gourmand en sram que python ?

Arduino c'est un ensemble de bibliothèques qui simplifient la programmation sur ces cartes en apportant une certaine abstraction au niveau du hardware. On n'est même pas obligé de les utiliser et si on cherche de l'efficacité c'est parfois nécessaire (exemple vitesse d'exécution de digitalRead() ou digitalWrite()).

Le language utilisé pour coder est C++ et pas de doute que C++ est bien moins gourmand en mémoire que python et bcp plus efficace. Mais faut se taper bcp plus de choses "à la main" (plus bas Niveau) et donc on code moins vite en C++ qu'en python.

De mémoire les derniers benchmarks que j'avais lu montraient que Python est de 10 à 100 fois plus lent que le C++ et consomme bcp plus de mémoire. il existe des compilateurs de Python (Numba par exemple) qui ramène la perf proche de C++

Ces langages de plus haut niveau sont le résultat du fait qu'un développeur coûte très cher et que le prix d'un peu de RAM ou de perf CPU n'est pas en rapport dans la plupart des cas. Faire donc du code plus rapidement et de manière plus maintenable est plus rentable dans l'industrie - souvent avec une gabegie de ressources électroniques...

Dire que C / C++ est moins gourmand en mémoire que PYTHON me semble une évidence, mais encore faut-il utiliser la SRAM de manière optimale.

  • éviter d'accumuler les variables globales à l'infini
  • utiliser aussi peu que possible l'allocation dynamique (ou mettre en place des outils de test)

merci pour toute ces explications , difficile de ne pas mettre des variables globales , vu que mon prog pricipal
les utilise constamment en comparent les ther , fen , mem pour activer ou non les rel

Bonjour,
un programme aussi court qui met 192k octets de ram à genoux, ça me laisse songeur ... en + du python doit y avoir un loup quelque part

merci trimarco232 pour la suspicion , j'avais aussi un doute , je demande sur le forum micropython

ça fait longtemps que je ne me suis pas penché sur la gestion mémoire dans micro-python mais ces tableaux pourraient prendre de la place si les objets sont dupliqués

mem=[mchp,mchf,mcha,msdb,mchv,mesc,mcui,msam,msal,mwc,mbur,ment]
ther=[cchp,cchf,ccha,csdb,cchv,cesc,ccui,csam,csal,cwc,cbur,cent]
fen=[fchp,fchf,fcha,fsdb,fchv,fesc,fcui,fsam,fsam,fwc,fbur,fent]
rel=[rchp,rchf,rcha,rsdb,rchv,resc,rcui,rsam,rsal,rwc,rbur,rent]

mais c'est quand même très louche en effet - faudrait voir le reste du code

le reste du code est print(cchp.value())
c'est tout

Bonsoir,

Peut-être aucun rapport mais le fsam est dupliqué. Il manque le fsal.

bon , j'ai trouve une inversion de lettre dans une variable msam au lieu de msma

pourquoi ça ne me met pas d'erreur ??? c'est une autre question

merci à vous

trimarco232:
Bonjour,
un programme aussi court qui met 192k octets de ram à genoux, ça me laisse songeur ... en + du python doit y avoir un loup quelque part

oui il y a anguille sous roche