Manque de place mémoire dans le pic. (Resolu)

Forum de support pour les locuteurs de la langue française qui souhaitent écrire dans leur langue maternelle.

Moderator: Benj

Post Reply
Philbert Pascal
Posts: 80
Joined: Fri Jul 20, 2012 8:55 am
Location: Chambly (France)
Been thanked: 4 times
Contact:

Manque de place mémoire dans le pic. (Resolu)

Post by Philbert Pascal »

Bonjour au utilisateurs de Flowcode,
je suis bien embarrassé. Je viens de terminer un programme de gestion de LED.
Manque de chance, je dépasse de quelque mots la capacité maximum de mon Pic 16F877 qui est de 8192 Octets.
Pourriez vous vous m'aider à simplifier mon programme Flowcode?
J'ai essayé d'utilisé des boucles, mais c'est encore pire.
J'ai essayé d'envoyer directement le code décimal pour activer les ports de mon processeur, mais rien n'y fait.
Je sèche un peu. N'étant pas un pro de la programmation en C ou en assembleur, je me fie à ce que génère Flowcode.
Une seule petite idée me suffirait.
Aidez moi s'il vous plait.
La macro la plus imposante est "Programme7_Haut".
Je joint le fichier Flowcode zipper pour info.
Merci d'avance
Attachments
Code_Programme_Escalier_pousssoir_prog_PIC16F877_1.5.fcf.zip
(19.34 KiB) Downloaded 280 times
Last edited by Philbert Pascal on Thu Aug 02, 2012 7:00 pm, edited 1 time in total.

User avatar
Enamul
Posts: 1772
Joined: Mon Mar 05, 2012 11:34 pm
Location: Nottingham, UK
Has thanked: 271 times
Been thanked: 814 times
Contact:

Re: Manque de place mémoire dans le pic

Post by Enamul »

Salut,
Si vous n'avez pas expliquer ce que sont les différentes macros et quel est le but du circuit .. ce sera difficile pour quiconque de vous aider .. Parce que readabilty dépend commentaire et la langue est ici barrière pour nous ...
Donc, s'il vous plaît envoyer une explication de détails sur le programme et les macros ..

J'ai essayé de compiler le programme ... plus de 900 emplacements doivent être réduites .. ce n'est pas très facile ... sans votre aide

Enamul
Enamul
University of Nottingham
enamul4mm@gmail.com

Philbert Pascal
Posts: 80
Joined: Fri Jul 20, 2012 8:55 am
Location: Chambly (France)
Been thanked: 4 times
Contact:

Re: Manque de place mémoire dans le pic

Post by Philbert Pascal »

Bonjour Enamul,
veuillez m'excuser pour le manque de précision. Mon circuit pilote une vingtaine de rampe à LED qui sont montée sous les contre-marche d'un escalier. Je détecte le passage d'une personne et je lance le programme choisi par l'utilisateur. J'ai écris 9 programmes qui allumes différement les marches . Le dernier est un des plus long (Programmes7_Bas et Programme7_Haut). Je suis obligé d'écrire 2 programme à chaque fois. C'est fonction du détecteur qui est déclenché. Le haut ou le bas. C'est le même programme, sauf que l'allumage des marches est inverser. Donc mes programmes sont une succession d'allumage et d'extinction de LED. Je peux changer la vitesse d'exécution avec un commutateur 4 positions (4 interupteurs dans Flowcode). Un bouton poussoir de choix des programmes. Et deux poussoir pour simuler les détecteurs Bas et Haut.
Je suis arrivé au tout dernier programme et c'est là que je me suis rendu compte, en compilant, que je dépassait de plus de 200 de mots la capacité du PIC.
Je pense qu'il y a moyen de réduire la longueur du code.
Je test avec des boucles, mais ce n'est pas gagné. Peut être, existe t'il une astuce pour réduire la taille des programmes.
Si vous charger le programme dans Flowcode, vous pourrez vous rendre compte des diffèrents programmes.
J'avais pensé charger toute les valeurs du code décimal des entrée du pic dans des variables, et boucler en incrémentant le nom de la variable. Exemple: A1=2; A2=64; A3=128 et je crée une boucle avec $portA=A($Nb), ou la valeur du port est fonction de la valeur de la variable. Y a t'il un gain?
J'espère avoir été plus précis. Dernière chose, comment vois tu que 900 emplacement peuvent être réduit.
Merci de votre aide.
Pascal

User avatar
Dan81
Valued Contributor
Valued Contributor
Posts: 268
Joined: Sun Jan 15, 2006 4:07 pm
Location: Albi France
Been thanked: 60 times
Contact:

Re: Manque de place mémoire dans le pic

Post by Dan81 »

Salut Pascal

- tu peux supprimer certaines initalisations de variables, par ex : manu_auto = 0, la variable prendra la valeur qd tu fais E0 => ManuAuto.
- tu as declare certaines variables comme des booleens, d'apres moi (je peux me tromper) cela necessite du code supplementaire. Il reste de la place en RAM (74 / 386) , utilise des octets.

- en groupant les LEDs par ports , il suffirait de faire portB = 0x?? plutot ledON ledOff qui consomme du code.
- quel interet de creer une macro pour une tempo variable (je ne vois pas) ?
- pour faire des decalages sur un port , il existe le calcul >> ou <<


Dernière chose, comment vois tu que 900 emplacement peuvent être réduit.

regarde le texte pdt la compilation :

Building CASM file
Memory Usage Report
===================
RAM available:368 bytes, used:74 bytes (20.2%), free:294 bytes (79.8%),
Heap size:294 bytes, Heap max single alloc:110 bytes
ROM available:8192 words, used:9123 words (111.3%), free:-931 words (-11.-3%)
Too much code to fit in ROM, overfilled by:931 locations.

Bon courage

Daniel

Philbert Pascal
Posts: 80
Joined: Fri Jul 20, 2012 8:55 am
Location: Chambly (France)
Been thanked: 4 times
Contact:

Re: Manque de place mémoire dans le pic

Post by Philbert Pascal »

Bonjour Dan81,
je vais suivre tes conseils. J'ai déjà commencé à réécrire des portions de programme.
De plus je vais revoir la valeur de mes variables. Toute place gagné est bonne à prendre.
Depuis hier j'ai regroupé mes ports.
Je pense avoir terminé dans la soirée.
Merci encore pour tout vos conseil.
Salutations.
Pascal

Philbert Pascal
Posts: 80
Joined: Fri Jul 20, 2012 8:55 am
Location: Chambly (France)
Been thanked: 4 times
Contact:

Re: Manque de place mémoire dans le pic

Post by Philbert Pascal »

Bonjour Dan81,
je suis en train de ré-écrire une nouvelle version. En attendant j'ai créer une version sans les 2 dernières macro. Ce qui me fait un code plus compacte.
J'ai un autre problème. Depuis que je suis passé à la version professionnelle, j'ai l'impression que mon code est buggé.
J'utilise Flowcode pour programmer le pic. Tout ce passe sans problème. Aucune erreur.
Je le test sur mon circuit final ou ma maquette et là, rien ne va.
Je ne comprend pas.
J'ai utilisé Pickit2 et c'est la même chose.
Je joint le code .HEX et le code lu dans le pic. Peux tu me dire si le début du programme est conforme?
Merci d'avance.
Pascal
Attachments
Capture d’écran 2012-07-23 à 20.01.26.png
(161.3 KiB) Downloaded 1668 times

User avatar
Dan81
Valued Contributor
Valued Contributor
Posts: 268
Joined: Sun Jan 15, 2006 4:07 pm
Location: Albi France
Been thanked: 60 times
Contact:

Re: Manque de place mémoire dans le pic

Post by Dan81 »

salut Pascal

Pour le hex, je ne peux rien te dire, c'est peu exploitable.

Qu'utilises tu comme carte micro ?
Quelle version de Flowcode as tu ?

Ta configuration montre que tu programmes en "low voltage" de memoire tu dois perdre RB3 ou RB5.

Il est possible que tu aies des problemes de pile, (sous prog qui appelle un autre sous prog ...)

Tu peux passer en Pic 18F , tu auras plus de place.


Daniel

Philbert Pascal
Posts: 80
Joined: Fri Jul 20, 2012 8:55 am
Location: Chambly (France)
Been thanked: 4 times
Contact:

Re: Manque de place mémoire dans le pic

Post by Philbert Pascal »

Bonjour Dan81,
j'utilise une carte SEEIT Multipic, je l'ai utilisé sur mes autres programmes sans soucis.
Je suis en version Flowcode 5.2.0.0 version professionnelle.
Au niveau imbrication, je suis à 3 voir 4 niveaux maxi.
J'ai passé le programme dans Protheus. Tout est ok.
Peux-etre est ce mon pic qui à un problème? Je vais en prendre un autre. 16F877 à 20Mhz.
Je vais vérifier ma maquette si toutefois un fil toucherai un autre. Mais si le circuit final ce comporte de la même manière, ce sera le pic.
Merci encore pour ton éclairage, moi qui n'est plus fait d'électronique depuis 25ans.

@+

User avatar
Dan81
Valued Contributor
Valued Contributor
Posts: 268
Joined: Sun Jan 15, 2006 4:07 pm
Location: Albi France
Been thanked: 60 times
Contact:

Re: Manque de place mémoire dans le pic

Post by Dan81 »

salut Pascal

Tu peux remplacer le 16F877 par un 16F887, il est mieux et moins cher. ( 8K de Flash aussi)

Daniel

Philbert Pascal
Posts: 80
Joined: Fri Jul 20, 2012 8:55 am
Location: Chambly (France)
Been thanked: 4 times
Contact:

Re: Manque de place mémoire dans le pic

Post by Philbert Pascal »

Bonjour Dan81,
Quels sont les avantages du 16F887?
Je penchais pour un 18F45J10 avec 32Ko de mémoire. (même brochage). Qu'en penses-tu?
Pour l'instant il faut que je résolve mon problème de gravure.
Je vais repasser en version Home avec mon programme en version 1.0.
Je l'ai déjà gravé plusieurs fois et tout fonctionnait nickel.
Si j'ai encore un soucis, c'est un problème matériel.
Bonne journée et merci pour ton aide.
Pascal

User avatar
Dan81
Valued Contributor
Valued Contributor
Posts: 268
Joined: Sun Jan 15, 2006 4:07 pm
Location: Albi France
Been thanked: 60 times
Contact:

Re: Manque de place mémoire dans le pic

Post by Dan81 »

salut Pascal

je te proposais le 887 car tu utilisais 877.
avantage : oscilateur interne (8MHz max) , interruption sur port B plus evoluee.

Il est certain que le 18Foffre plus de capacité memoire.

Daniel

Philbert Pascal
Posts: 80
Joined: Fri Jul 20, 2012 8:55 am
Location: Chambly (France)
Been thanked: 4 times
Contact:

Re: Manque de place mémoire dans le pic

Post by Philbert Pascal »

Bonjour à tous,
voila j'ai terminé mon projet et tout fonctionne à merveille.
J'ai réussi à faire tenir mes 10 programmes dans les 8k de mon PIc.
Les problèmes de programme sur circuit, venait que lors de mon passage de Home à Professional, les paramètres du pic avaient été modifiés.
J'ai ré-ecrit les bons paramètre et la gravure c'est passé sans soucis.
Mon circuit fonctionne impecable.
Je tenais à tous vous remercier pour vos bons conseils.
Bon weekend à tous
Pascal

Post Reply