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
-----