Bon Bah a vrai dire maintenant ça fonctionne avec l'addresse que j'avais prix au départ 0xBD000000 ; en fait là j'ai pas compris tout
-----

Bon Bah a vrai dire maintenant ça fonctionne avec l'addresse que j'avais prix au départ 0xBD000000 ; en fait là j'ai pas compris tout
Salut content que ça fonctionne.
Alors pour ton problème de variable sauvegarder en flash, il faudrait que tu réserves de la mémoire Flash pour les mettre.
Dans la datasheet du PIC32, il y a une section sur l'organisation mémoire.
Donc les adresses commençant par 0xAxxxxxxx sont de la RAM. Les adresses commençant par 0x9Dxxxxxx sont de la Flash. Après c'est une histoire de kseg0 et kseg1. Et moi-même sur ce sujet j'ai pas encore tout compris. Car en les adresses virtuelles sont différentes mais les adresses physiques sont les mêmes.
Donc pour résoudre ton problème, même s'il semble résolu, je te conseille de diminuer la taille de kseg0_program_mem. Enlève ce qu'il te faut pour sauvegarder tes données et prend un peu de marge dans le cas où tu voudrais en sauvegarder plus.
Ensuite tu vas créer ne nouvelle section de mémoire dans la flash.
Dans le fichier linker de ton programme principal tu ajoute cette ligne:
FLASH_MEMORY n'est qu'un exemple de nom tu peux l'appeler comme tu veux.Code:FLASH_MEMORY : ORIGIN = 0x9D000000, LENGTH = 0x100
Ensuite en origine, tu met 0x9D000000 + Taille du kseg0_program_mem (bootloader) + taille du exception_mem(prog_principal) + taille du kseg0_boot_mem(prog_principal) + taille du kseg1_boot_mem (prog_principal) + taille du kseg0_program_mem (prog_principal).
Et en taille tu met la taille restante donc la 0x80000 - taille du kseg0_program_mem (bootloader) - taille du exception_mem(prog_principal) - taille du kseg0_boot_mem(prog_principal) - taille du kseg1_boot_mem (prog_principal) - taille du kseg0_program_mem (prog_principal).
Ensuite toujours dans ton fichier linker de ton programme principal, tu ajoute ça dans la partie SECTION
Normalement cela devrait marcher.Code:.My_Flash_Memory : { *(.My_Flash_Memory) } > FLASH_MEMORY
Puis ton #define NVM_PROGRAM_PAGE = ORIGIN du FLASH_MEMORY;
OK je fais ça , merci gofio79
Effectivement, je regarde de nouveau l'organisation de la mémoire du pic pour bien comprendre l'agencement et d'après le début de la docs il est descrit les espaces mémoires du pic32MX795F512l.
Il est dit :
512k + 12k --> programme mémorie + boot flash, si j'ai bien compris les 512k sont alloué pour le programme et 12k pour pour le boot
128 --> Data Mémorie, En fait je croyais que cette espace était alloué au données donc les valeurs des variables ponctuel, mais en fait c'est simplement la RAM
il faut donc que je partage les 512 Programme Flash pour le programme principal et les données que je souhaite mémorisées en flash.
D'après ce que j'ai compris, le kseg0 est de la mémoire cachée auquel on à pas accès directement, on utilise directement le kseg1.
Pour le kseg0 et kseg1, oui c'est une histoire de cache mais on a accès à la RAM du kseg1 et à la flash du kseg0 donc je ne comprend pas tout. Pour cela, il faudrait se plonger dans le manuel MIPS.
Sinon les 512K de flash sont à partager entre ton bootloader, ton programme principal, les parties de boot kseg0 et kseg1 de ton programme principal et les données que tu veux sauvegarder en flash.
Les 128K de ram sont pour ta pile, tes variables locales tes fonctions mise en ram...
Donc à toi de tout bien calculer pour que ça tombe juste et ne pas avoir de dépassement de la flash. Regarde aussi dans le fichier .map de ton projet cela peut aider à comprendre où sont stocker tel ou tel section.
OK je vois ça![]()
Bah Ecoute , j'ai qu'une chose à dire et à redire , j'me répète peut-être mais Un grand merci pour ta disponibilités et ta grande aide, ça marche nickel, maintenant je vais refaire un point sur tout ça histoire de bien retenir.
Il y a pas de soucis.
Je suis bien content de trouver de l'aide sur les forums quelques fois donc c'est la moindre des choses.
Sinon oui, je te conseille de te faire un petit document pour bien mémoriser à quoi correspond tel ou tel espace mémoire, qu'est ce qu'il faut modifié si tu change la taille de ton booloader ...
