gestion memoire PIC18F26K20
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

gestion memoire PIC18F26K20



  1. #1
    Eki27

    gestion memoire PIC18F26K20


    ------

    Bon, de toute évidence je n'ai pas compris l'entièreté des finesses du modèle mémoire de mon PIC!
    Mais heureusement que vous êtes là (surtout RISC ) pour m'aider à éclaircir tout ca!

    Jusqu'ici, lorsque j'avais besoin de créer zones de stockages contigus en mémoire (par exemple pour créer un gros tableau de plus de 256 KB) je manipulais le fichier .lkr du pic pour regrouper plusieurs databank. Ca, ca fonctionne Ok.

    Cependant en regardant de plus près le fichier lkr original du PIC18F26K20 (en attachement), je constate qu'il n'y a que 14 databank déclarés, soit 1MB de RAM défini? Mais le 18F26K20 possède pourtant 4MB! Ou sont définis les 3 autres?

    A cause de cette incompréhension, je bloque actuellement sur la création d'un "2-méga-groupe" pour l'utiliser en tant que "super-buffer" (j'adore inventer des mots...) afin de pouvoir stocker quand mon PIC ne peut plus communiquer avec son hôte.

    En précisant que je travaille avec le compilateur C18 sous MPLAB.
    D'avance merci pour vos conseils.

    -----
    Fichiers attachés Fichiers attachés

  2. #2
    Seb.26

    Re : gestion memoire PIC18F26K20

    Tu as un petit souci d'unités on dirait

    Ton PIC a 3936 OCTETS de RAM donc tu risque pas de pouvoir faire des buffers de 256KB ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  3. #3
    Eki27

    Re : gestion memoire PIC18F26K20

    ouillllllle, la honte ! A force de travailler avec des véritables ordinateurs, je perds l'habitude de m'exprimer avec des dimensions si petites

    Revoici ma demande en bonne et due forme :

    Jusqu'ici, lorsque j'avais besoin de créer zones de stockages contigus en mémoire (par exemple pour créer un gros tableau de plus de 256 B) je manipulais le fichier .lkr du pic pour regrouper plusieurs databank. Ca, ca fonctionne Ok.

    Cependant en regardant de plus près le fichier lkr original du PIC18F26K20 (en attachement), je constate qu'il n'y a que 14 databank déclarés, soit 1KB de RAM défini? Mais le 18F26K20 possède pourtant 4KB! Ou sont définis les 3 autres?

    A cause de cette incompréhension, je bloque actuellement sur la création d'un "2-Kilo-groupe" pour l'utiliser en tant que "super-buffer" (j'adore inventer des mots...) afin de pouvoir stocker quand mon PIC ne peut plus communiquer avec son hôte.

    En précisant que je travaille avec le compilateur C18 sous MPLAB.
    D'avance merci pour vos conseils.

  4. #4
    Eki27

    Re : gestion memoire PIC18F26K20

    Bon, je continue à me corriger (je me mets une baffe à chaque post, rassurez-vous)

    J'ai bien 16 BANKS de 256 bytes, soit 4096 bytes au total, tout va bien mieux.

    j'ai donc regroupé les BANKS 7 à 12 (256 * 6 = 1536 bytes) pour pouvoir contenir un tableau de 50 structures comme ci-dessous.

    Si je comptes bien chaque structure pèse 24 bytes (5 int (10 bytes) + 6 char (6 bytes) + 2 long (8 bytes)) * 50 unités = 1200 bytes
    Je suppose qu'une structure ne peut pas chevaucher 2 BANKS!? Donc je perds 16 bytes sur les 5 premières = 80 bytes

    1280 bytes devraient pouvoir tenir dans 1563. J'ai pourtant une erreur du linker de MPLAB qui requiert 1912 bytes pour contenir mon tableau de structure, après avoir essayé je ne peux en mettre que maximum 34, moi pas comprendre!

    struct StrBuffer {
    int t;
    int i1;
    int i2;
    int i3;
    int i4;
    char s[6];
    long r;
    long v;
    };

  5. A voir en vidéo sur Futura
  6. #5
    paulfjujo

    Re : gestion memoire PIC18F26K20

    bonsoir,


    Ton raisonnement devrait tenir , en raisonnant sur la granularité des bank à 256 bytes, mais
    au niveau langage assembleur,
    mais il faut penser que le compilateur C18 se sert d'abord ! et doit grapiller par ci par là
    de la place necessaire à gerer ses pointeurs et autres..
    et il faudra aussi de la RAM dispo pour le reste de ton programme..

  7. #6
    RISC

    Re : gestion memoire PIC18F26K20

    Salut,

    Il faudrait avoir ton programme pour examiner cela de plus près...
    Je pense que le problème que tu as es déjà lié à l'alignement des données (le char au milieu c'est pas bon...).
    Si tu as la possibilité de réorganiser ta structure, je te conseille de procéder comme suit (à titre de test) :

    [/code]
    struct StrBuffer {
    long r;
    long v;
    int t;
    int i1;
    int i2;
    int i3;
    int i4;
    char s[6];
    };
    [/code]

    Utilises-tu la version optimisée ou non du compilateur C18 ?

    a+

  8. #7
    Eki27

    Re : gestion memoire PIC18F26K20

    J'utilise le "biessss" compilateur de base C18 livré avec MPLAB, un tel gaspillage me fait peur! Ou bien c'est voulu pour forcer l'achat!?

    De plus si la fonction stroul était inclue dans les librairie de C18, je pourrais transformer le tableau de char en long (techniquement gagner deux bytes, peut être plus?)

    Vous me conseillez de changer de compilo? Si oui par quoi?

    J'ai tenté la réorganisation tel que tu l'as proposée mon cher RISC, malheureusment aucun changement, toujours limité à 34 structures maximum pour les 6 BANKS.

    Autres questions en rapport avec MPLAB et :
    - la data memory gauge est-elle fiable (je ne crois pas du tout)?
    - Dans le menu VIEW, je peux accéder à l'affichage du program memory, mais pas à memory, je ne peux donc pas voir ou il place mes variables en RAM! (est-ce du à mon outil de debug? qui n'est autre que le simple picKit 3 en direct)
    - je ne comprends pas l'utilité de l'option single-bank / multi-bank de stack model dans les options du projet (et je ne sais pas si cela influence mon problème actuel)

    Encore merci

  9. #8
    Seb.26

    Re : gestion memoire PIC18F26K20

    Demande au compilo la taille de ta stucture : sizeof(...)
    http://en.wikipedia.org/wiki/Sizeof

    [Edit] Et pourquoi pas splitter ton tableau de structures en x tableaux ( un tableau par structure) ... au moins pour le stockage, ensuite tu fais une fonction qui reconstitue ta structure ...
    Dernière modification par Seb.26 ; 20/03/2012 à 02h15.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  10. #9
    Eki27

    Re : gestion memoire PIC18F26K20

    ha ben oui , je pourrais faire un sizeof de chaque élément, majoré de de la récupération de la position en mémoire et puis faire tous des petits tableaux... Mais, mais, ca revient à faire de l'assembleur avec le langage C!! Je crois que tu viens d'inventer un nouveau concept

    Non sans blague, j'aimerais réaliser quelque chose de propre.

    A bientôt,
    Eki

  11. #10
    paulfjujo

    Question Re : gestion memoire PIC18F26K20

    bonsoir,


    Ayant un doute, j'ai fait la manip suivante pour tester une Grosse BANK : (bank 6 à C)
    bizarre il ya des lettres maintenant sur les declaration de bank , on n'est plus en decimal ?
    test fait avec un 18F46K22

    voir images
    il s'avere que la jauge donne bien un ecart de 1718-518=1200 !!!
    mais mon programme , dans lequel j'ai inséré la declaration est tres court ...
    ce qui peut expliquer que quand il y a de la place libre dans les banks que l'on s'accapare là ... c'est OK !!!

    ou ai-je mal fait la declaration ?

    nota: j'ai la version C18 V3.37.01 lmitee 60j , qui a du repassé depuis longtemps en mode NON Optimisée.
    Images attachées Images attachées  

  12. #11
    RISC

    Re : gestion memoire PIC18F26K20

    Salut,

    Je n'ai pas trop confiance dans les jauges...Je préferre regarder la mémoire RAM.
    Dans MPLAB : View > File Registers tu devrais trouver tes structures.

    Autre chose, génère un fichier .map : Project > Build Options > Project > onglet Mplink Linker > cochde la boite "Generate Map File"

    Après compilation tu trouveras un fichier MAP qui te donne un rapport extrêmement précis de l'utilisation de la RAM et de la FLASH et de tout ce qui se trouve dedans..

    a+

  13. #12
    Eki27

    Re : gestion memoire PIC18F26K20

    Merci pour ces infos, qui m'ont bien aidé à y voir plus clair!

    Je pense avoir solutionné mon problème via ces trois principes :
    1) optimisation de l'organistation de banks; en partant de la bank1 0X100 pour mes grandes sections et en les ajustant au mieux.
    2) utilisation correcte de la directive #pragma udata/idata; le fait de placer des variables initialisées dans une section udata était incohérent et ne donnait pas le résulat attendu (problème principal)
    3) utilisation du mot clé PROTECTED pour les banks réservées dans le fichier du linker afin d'éviter que le compilateur y place d'autres données

    Avec ces corrections, la jauge mémoire de MPLAB redevient fiable (elle l'a probablement toujours été, le problème était entre la chaise et le clavier )

    Bonne journée et à bientôt!
    Dernière modification par Eki27 ; 21/03/2012 à 08h36.

Discussions similaires

  1. Question sur la gestion de la memoire
    Par invited170028e dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 06/11/2010, 08h30
  2. gestion de le mémoire sous Scilab
    Par invitebb29dda1 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 12/11/2009, 14h14
  3. Gestion mémoire I2C
    Par Olfox dans le forum Électronique
    Réponses: 1
    Dernier message: 24/02/2009, 12h58
  4. gestion de la memoire
    Par ABN84 dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 19/01/2007, 08h03
  5. gestion de la mémoire vive par xp
    Par invite20f79a5f dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 07/07/2004, 23h40
Découvrez nos comparatifs produits sur l'informatique et les technologies.