manipulation de variables > 256 bytes en C18 sur PIC18
Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

manipulation de variables > 256 bytes en C18 sur PIC18



  1. #1
    invite51e48a05

    manipulation de variables > 256 bytes en C18 sur PIC18


    ------

    Bonjour à tous,

    Petit souci avec la manipulation des variables de grande taille en MPLAB C18 sur un PIC18:

    j'ai adapté mon fichier .lkr de la manière suivante :

    DATABANK NAME=msgToSend START=0x100 END=0x263 PROTECTED // 355 bytes
    DATABANK NAME=usartBuff START=0x264 END=0x3FF PROTECTED // 411 bytes
    DATABANK NAME=memoryBuff START=0x400 END=0x7FF PROTECTED // 1023 bytes
    SECTION NAME=msgToSend RAM=msgToSend
    SECTION NAME=usartBuff RAM=usartBuff
    SECTION NAME=memoryBuff RAM=memoryBuff

    afin de déclarer des tableaux de char > 256B dans le code du programme :
    #pragma idata msgToSend // déclaration des tableaux dans leur mémoire respective
    char msgToSend[350] = { 0 };
    #pragma idata usartBuff
    char inputBuffer[400] = { 0 };
    #pragma idata
    char *msg_ptr = &msgToSend[0];// pointeurs pour manipuler les grands tableaux
    char *buff_ptr = &inputBuffer[0];

    les manipulations via le pointeur buff_ptr fonctionnent correctement, mais pas celles de msg_ptr;
    Premièrement, bien que les pointeurs semblent déclarés de la même manière, je constate des différences dans la fenêtre "variable" de MPLAB :
    buff_ptr est typé char* et initialisé sur l'adresse de inputBuffer (OK!)
    msg_ptr est typé char* (*)(_entry) et pointe sur 0x00 (???)

    Deuxièmement, je dois aussi préciser que je manipule msg_ptr à travers sprintf (ce qui n'est pas le cas avec buff_ptr). sprintf semble ne pas parvenir à gérer nativement les grandes variables > 256B.
    En réduisant la taille de la chaine passé à sprintf, je constate qu'il parvient à réaliser l'opération via mon pointeur qui est pourtant BIZAREMENT initialisé!?

    Bref, pourriez-vous tenter de m'aider à élucider ces mystères, merci

    -----

  2. #2
    paulfjujo

    Re : manipulation de variables > 256 bytes en C18 sur PIC18

    bonjour,

    Il me parait curieux ( je n'ai jamais testé ce cas) de couper les bank à l'interieur des modulo 256.
    Moi j'aurais pluto declarer une grosse bank de 3x256 soit 768 pour y loger les 2 tables
    msgToSend[350] et inputBuffer[400] , soit 750 bytes.

    D'autre part il faut laisser quelques bank au compilateur pour qu'il puisse faire son boulot
    car tu mobilise deja de 0X100 à 0x7FF !

  3. #3
    invite51e48a05

    Re : manipulation de variables > 256 bytes en C18 sur PIC18

    Hello Paul,

    Oui, il est certain qu'il est possible de faire plus propre... cependant, la réservation mémoire ne gêne pas le fonctionnement du reste du programme. Ce que je trouve réellement étrange c'est le type différent signalé par le compilateur de MPLAB au niveau des pointeurs et je ne trouve pas de documentation précise sur les limites de sprintf avec C18 sur PIC18.

Discussions similaires

  1. problème lecture UART (PIC18, C18)
    Par invite402e4532 dans le forum Électronique
    Réponses: 3
    Dernier message: 13/04/2011, 19h17
  2. [PIC18 / Copilateur C18] - Configuration des bits
    Par invite3c35244f dans le forum Électronique
    Réponses: 3
    Dernier message: 30/08/2010, 10h34
  3. [C] - Manipulation sur variables
    Par invite3c35244f dans le forum Électronique
    Réponses: 5
    Dernier message: 28/04/2010, 15h37
  4. [Programmation]Différence Compilateur C C18/IAR PIC18
    Par invite3c35244f dans le forum Électronique
    Réponses: 3
    Dernier message: 01/04/2008, 08h38
  5. Géospace, manipulation de multiples variables.
    Par Keorl dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 13/02/2005, 11h08
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...