Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Problème allocation mémoire PIC24E avec XC16



  1. #1
    SportsEngine

    Exclamation Problème allocation mémoire PIC24E avec XC16


    ------

    Bonjour,

    j'ai un problème assez important avec un projet sous MPLAB X (v3.61) et XC16 (v1.32) :

    J'ai besoin de 6 buffers de 4000 octects chacun (2000 words) soit 24000 octets. A côté j'ai environ 15 Ko d'utilisés pour différentes variables et autres buffers.

    le PIC24EP512GU810 possède 52 Ko de RAM, donc logiquement mes 40 Ko de data devraient tenir dedans.
    Sauf qu'au delà de 6 x 800 words (soit 9600 octets) j'ai des erreurs comme quoi les secteurs n'ont pas pu tous être alloués...

    J'ai essayé de jouer sur les attributs "far" et autre paramètres "large" dans le compilateur mais rien ne fait, je ne peux pas dépasser 52% de RAM utilisée...

    J'ai mis en pièce jointe quelques screenshots sans et avec erreur, de même que la config du compilo.

    Compilation sans erreur :
    Compilation OK - 6 x 800 points.jpg

    Compilation avec erreurs :
    Compilation KO - 6 x 900 points.jpg

    Configuration compilo :
    Configuration XC16 - Large attribute.png

    Merci!

    -----

  2. Publicité
  3. #2
    SportsEngine

    Re : Problème allocation mémoire PIC24E avec XC16

    Personne n'a d'idée/déjà été confronté à un problème similaire?

    J'ai essayé de modifier mon array :

    temperatureProfile[6][900]

    en 6 arrays :

    temperatureProfile1[900]
    temperatureProfile2[900]
    temperatureProfile3[900]
    temperatureProfile4[900]
    temperatureProfile5[900]
    temperatureProfile6[900]

    pour voir si ça vient de la taille max de l'array, mais aucun changement

  4. #3
    SportsEngine

    Re : Problème allocation mémoire PIC24E avec XC16

    Bon c'est résolu! La solution était d'ajouter un attribut de telle façon que le compilateur gère l'allocation mémoire

    J'ai utilisé :
    Code:
    __eds__ UINT16 temperatureProfile[6][2000]__attribute__((eds));
    de manière à ce que le compilo gère ça tout seul comme un grand (allocation dans la RAM).
    Il est également possible de définir une adresse précise à partir de laquelle on veut stocker l'array, mais je ne l'ai pas implémenté.
    Dans le cas où la RAM serait déjà saturée, on peut utiliser la mémoire programme avec l'attribut suivant (là encore pas d'adresse précise, c'est fait automatiquement) :
    Code:
    __eds__ UINT16 temperatureProfile[6][2000]__attribute__((space(prog)));
    Je pense qu'il vaut mieux se limiter à la RAM dans un premier temps, et se servir de la FLASH qu'en cas de nécessité.

    Voilà voilà!

  5. #4
    RISC

    Re : Problème allocation mémoire PIC24E avec XC16

    Salut,
    Si ton tableau contient des constantes il faut le mettre en FLASH sinon il doir être en RAM (variables).
    Initialement les PIC24HJ ne pouvait gérer que 32K de RAM maximum (0 à 7FFF) et la partie haute était une copie virtuelle de la FLASH (8000 à FFFF).
    Le coeur PIC24EP a été modifié pour pouvoir gérer des banques entre 8000 à FFFF. On peut donc avoir aussi de la RAM dans cette zone (8000 à FFFF) et cela permet d'avoir plus de 32K de RAM ;=)
    Il suffit donc effectivement de dire au compilateur qu'on souhaite qu'il gère les changement de banque automatiquement en utiisant l'attribut __eds__
    a+
    Ma marotte ? les microcontrôleurs ;=)

  6. A voir en vidéo sur Futura
  7. Comparatifs

    Gagnez du temps et de l'argent grâce à nos comparatifs de produits. Parmi nos sujets :

Discussions similaires

  1. [Programmation] Problème sortie de veille PIC24E
    Par SportsEngine dans le forum Électronique
    Réponses: 8
    Dernier message: 01/08/2017, 17h45
  2. en C : allocation dynamique tableau 2D avec sous programmes
    Par Annabaile dans le forum Programmation et langages, Algorithmique
    Réponses: 8
    Dernier message: 13/05/2016, 11h49
  3. Salome Meca - Allocation Mémoire
    Par mAx6010 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 02/09/2013, 14h34
  4. [language C]Allocation mémoire.
    Par piwi dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 05/07/2010, 08h33
  5. allocation memoire sous windows 32 bits
    Par crussol07 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 08/10/2006, 21h01
Découvrez nos comparatifs produits sur l'informatique et les technologies.