Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
On parle des Pics, sans rapport avec le langage ou la programmation

Modérateur : Jérémy

Memoire ( RAM,ROM) sur les PIC et MikroC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#1 Message par Jérémy » mar. 13 déc. 2016 22:38

Bonsoir à tous,

Je m'embrouille les pinceaux avec ces histoires de mémoires RAM ROM etc ....

Si quelqu'un a la gentillesse de me brosser un tableau succinct , ce serait vraiment sympa . Si je pose cette question c'est qu'aujourd'hui je me confronte à un manque cruelle de mémoire pour stocker mon programme; Qui aurait pu prédire que cela allait m'arriver ? :langue:

Je bricole actuellement sur un PIC 16F1847 . D’après microchip il possède ceci (lien sur MAPS) :
Sans titre.jpg


Je pensais largement être a l’abri , mais que nini , ca c'est sans compter sur mon imagination . heeee oui je lui parle a mon module GMS ! et lui doit me répondre ! :sifflotte:

Voila le tableau des statistiques ouvert avec MikroC :
Sans titre2.jpg


Comme vous le voyez je suis presque complet. Mais maintenant je souhaite endormir mon module et le réveiller ; Cela va rallonger pas mal mon programme !
Je pense pouvoir faire un peu de ménage et rassembler quelques trucs pour gratter quelques mémoires mais bon ....

Dans les spécifications de Microchip on a par exemple :
P.memory (Kbytes) : 14 flash ? je suppose qu'il s'agit de l'endroit ou je place mon programme ?
mais alors que signifie le P.Memory (Kwords) : 8 en dessous ?

Soit se sont les spécifications de microchip qui sont flous, soit celles de MikroC , soi c'est moi qui comprends rien ( j'ai ma petite idée sur la réponse :roll: ).
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Memoire ( RAM,ROM) sur les PIC et MikroC
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#2 Message par Temps-x » mer. 14 déc. 2016 01:39

Bonsoir Jérémy , et bonsoir a tous le monde,

Identification d’un PIC®

Pour identifier un PIC®, vous utiliserez simplement son numéro.
Les 2 premiers chiffres indiquent la catégorie du PIC®, 16 indique un PIC® Mid-Range.

Vient ensuite parfois une lettre L : Celle-ci indique que le PIC® peut fonctionner avec une
plage de tension beaucoup plus tolérante.

Ensuite, vous trouvez :

C indique que la mémoire programme est une EPROM ou plus rarement une EEPROM
CR pour indiquer une mémoire de type ROM
Ou F pour indiquer une mémoire de type FLASH. <------ ton pic

Note à ce niveau que seule une mémoire FLASH ou EEPROM est susceptible d’être
effacée, donc n’espère pas reprogrammer ton PIC® de type CR. Pour les versions C.

Un composant qu’on ne peut reprogrammer est appelé O.T.P. pour One Time
Programming : composant à programmation unique.

Donc, ton 16F1847 est un PIC® Mid-Range (16) donc la mémoire programme est de type
FLASH (F) donc réinscriptible.

Chaque ligne de mémoire est un mot de 14 bits.

PROGRAMME = (1024 * 8) = 8192 octets <-- ou tu écris ton programme.
SRAM = 1024 octets <-- stockage qui n'est pas fixe, s'efface par coupure de courant.
EEPROM = 256 octets <-- stockage fixe, qui ne s'efface pas par coupure de courant .

16F1847.jpg


Voir si tu peux incorporer de l'assembleur, ça réduiras ton programme, car le Langage C se sert des bibliothèques comme tu le sais.
Quelque fois ça rends service, mais parfois c'est très mal approprié.

J'ai vue des programmes en Langage C, 8 fois plus gros quand Langage ASM, pour la même application.

C'est bien pour cela, quand on programme en langage évolué, qu'il faut prendre un microcontrôleur pouvant supporté des grosses
taille programme.

humour!! Sinon compresse en zip ton programme.

A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Memoire ( RAM,ROM) sur les PIC et MikroC
cyril13110
Confirmé
Confirmé
Messages : 724
Âge : 41
Enregistré en : avril 2016
Localisation : 13

#3 Message par cyril13110 » mer. 14 déc. 2016 08:36

salut,
oua il doit etre pas mal concequent ton code.
est ce que tu as tenter de regarder pour le restructurer afin de compresser la taille du code?
Cette phase de remodelage est ma phase final, je repend mon code et je regarde comment le synthétiser afin de l’alléger au max, en général je divise par 2....
après il est vrai que utiliser un compilateur n'est pas très économe en mémoire, meme si mikroe prêtent compiler des codes sans superflu, il y en a toujours....
ou alors tu change de pic et tu passe sur un 18F compatible en brochage qui a plus de memoire

Memoire ( RAM,ROM) sur les PIC et MikroC
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#4 Message par Guest » mer. 14 déc. 2016 12:20

Bonjour

Comme d'ab, je peux me tromper.Mais ton problème n'est pas coté flash reste 37% ,mais plutôt coté DATA donc RAM ou il ne te reste que 2%.
Que faire en C voir du coté de tes tableaux ,gratter quelques octets, utiliser un max les variables volatiles, après une bonne RE RE RE lecture de ton code, pour voir si pas de redondance cote variables

A+
Modifié en dernier par Anonymous le mer. 14 déc. 2016 16:22, modifié 1 fois.

Memoire ( RAM,ROM) sur les PIC et MikroC
cyril13110
Confirmé
Confirmé
Messages : 724
Âge : 41
Enregistré en : avril 2016
Localisation : 13

#5 Message par cyril13110 » mer. 14 déc. 2016 16:01

essaie de voir pour alléger la table de variable déclarés, de simplifier les fonctions, voir peut etre d'en créer d'autre question d'eviter les appel recurant.
aprés perso je ne travail jamais avec des variables temporaires dans les fonctions, je déclare tous au debut du programme, j'ai remarqué qu'avec mikrobasic les codes etaient plus court en memoire de chargement.

Memoire ( RAM,ROM) sur les PIC et MikroC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#6 Message par Jérémy » mer. 14 déc. 2016 16:56

Bonjour,
Merci pour vos réponses. Je suis en déplacement aujourd'hui, je vous répondraisur en detail ce soir
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Memoire ( RAM,ROM) sur les PIC et MikroC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#7 Message par Jérémy » mer. 14 déc. 2016 21:11

Re,

Merci à tous pour vos réponses .

Donc d’après de ce que je comprends :
- Mai , il me reste 37% de ROM d’après le camembert ! mais la mémoire programme n'est pas de la FLASH ?
- Pour les variables volatiles je vais regarder ce que je peux faire mais, j'avoue etre un peu comme Cyril j'abuse des varaibles globales pour me simplifier la tache. ( surtout pour les compteurs) par exemple.

j'avoue avoir été surpris par la taille de mon code aussi . changer de PIC me parait difficile je n'en ai aps trouver avec 18 broches avec plus de memoire. seul un 20 broches répondrais au critère.

Je pense que ma gestion du texte à affiché est mauvaise, mais du coup on tombe sur le coup de la programmation. Je vais regarder mon code essayer d'apporter quelques modifs et je reposterais dans la partie programmation pour voir si vous pouvez me conseillez sur comment redire mon code .
Je suis sur déjà que Paulfjujo va faire des bons sur mon UART ! :-D
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Memoire ( RAM,ROM) sur les PIC et MikroC
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#8 Message par Jérémy » jeu. 15 déc. 2016 20:18

Bonsoir,

Bon j'ai regarder mon code je ne vois pas trop comment gratter quelques variables, sans toucher à tout le programme !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Memoire ( RAM,ROM) sur les PIC et MikroC
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#9 Message par paulfjujo » ven. 16 déc. 2016 11:43

bonjour,



si tu as pas mal de texte à afficher ou envoyer; inclus directement dans ton code programme,
il est preferable de le mettre en Flash ROM (espace code) , sinon celui ci est stocké en RAM
contrairement à ce que l'on pourrait penser...
C'est un probleme Recurent pour tous les 16F avec peu de memoire RAM..

il y a plusieurs manieres, dont ces 2 là que j'utilise:

ex1: remplacement de la fonction MikroC traditionelle

Code : Tout sélectionner


UART1_Write_Text
(...);

void UART1_Write_CText(const code char *txt) {
   while (*txt)
      UART1_Write(*txt++);
}

 UART1_Write_Text("Init ADC RA3 pin2 as Analog input\r\n");   // stocké en RAM
  UART1_Write_CText("Init ADC RA3 pin2 as Analog input\r\n"); // stocké en Flash ROM

 


2em
le texte en dur est copié dans une zone RAM predefinie..
Cette MEME zone RAM pourra servir à plusieurs Textes differents

Code : Tout sélectionner


unsigned char TEXTE
[80];

 // --- Copie le texte depuis ROM vers RAM
void strConstRamCpy(char *dest, const char *source)
{
  while(*source) *(dest++) = *(source++) ;
  *dest = 0 ;    // terminateur
}

void strConstRamCpy(unsigned char *dest, const code char *source);

  txt=&TEXTE[0];
   strConstRamCpy(txt,  "  Chinese Chars      ");
    OLED_ShowStr(0,0,txt,1);
 strConstRamCpy(txt,"4 L de 21 carac. 6x8 ");
    UART2_Write_Text(txt);CRLF2();
 


3em:
Stocker les texte en EEPROM du PIC
Aide toi, le ciel ou FantasPic t'aidera

Memoire ( RAM,ROM) sur les PIC et MikroC
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#10 Message par Guest » ven. 16 déc. 2016 12:25

Bonjour
Jérémy a écrit :
j'avoue avoir été surpris par la taille de mon code aussi .

C'est du C (et en plus MICROC optimise ton code ) tu prends des blocks que tu assembles. je me souviens d'une certaine fonction DIFF de la lib TIME . :sifflotte: SI SI. Appel d'une fonction, pour faire une simple soustraction :lol: en C j'ai trouve encore plus stupide appel d'une fonction pour changer l’état d'un bit, alors certains dirons que c'est pour la compréhension du code, certes une macro fait cela AUSSI très bien si si. Donc comme d'ab, tu fais comme tu veux. Je ne sais pas faire du C, mais écrire mes propres fonctions, CA je sais faire, je t'invite encore une fois à en faire de même. après ......

Pour la RAM je pense que tu as bien mis tes textes récurrents en flash :wink: car te le demander, je n’aie même pas pensé . Car avant d’être en RAM il faut bien les stocker quelque part, en flash, sinon je ne sais pas comment cela peut fonctionner, on est pas sur du 16 bits oui il y a un vecteur int pour les variables. Le PROBLÈME est plutôt comme tu récupères ces données.

Pour le choix de ton pic (tu as encore de la marge),sauf , si tu as encore plein d'idéeS a mettre dedans, la c'est trop tard et faire une RAZ du soft , c'est du boulot.Comme quoi une très bonne estimation de ce que l'on veux faire de notre projet(cahier des charges) c'est 50% du travail


La ta signature est bien approprie pour le sujet

A+

PS pour les textes récurrents, si il n'y pas de modification du texte en flash. sinon tenir compte, aussi que c'est plus rapide en RAM d'en flash a voir ...


Retourner vers « Généralités sur les PICs »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 36 invités