Bonjour tout le monde,

Voila je réalise un projet sur le microcontrôleur pic32mx795F512L, j'utilise MPLAB.X v1.2 et le compiler C32 v2.02. Mon but est d'incorporer un bootloader à mon projet actuel.
Comme documentation, j'ai strictement respecté la démo AN1388 de microchip. D'abord j'ai fais tourné la démo, avec leur petite application qui fais clignoter deux leds.
Le problème vient quand je travaille avec ma propre application. J'ai modifié le link script comme indiqué.
Je lance le bootloader, charge le fichier hex, les étapes erase-program-verify se passent parfaitement. Quand je lance le bouton run aplication, je sors du bootloader ( la led correspondante à ce mode arrête de clignoter) mais le code de l'application ne se lance pas. Il ne se passe plus rien.
Mon application marche toute seule avec le linker script intégré dans le projet.

La map de la mémoire flash que j'ai faite dans le link script a l'air de fonctionner, sinon il ne sortirait pas du bootloader. J'ai vérifié dans la flash memory ( à l'aide de MPLAB), je retrouve bien mon application à la bonne adresse.
Je me demande si le problème ne peux pas venir d'un conflit de configuration. J'aimerai en savoir plus sur ce point.


Voici la partie mémoire dans le bootloader script :
/****************************** ****************************** *************
* For interrupt vector handling
****************************** ****************************** *************/
PROVIDE(_vector_spacing = 0x00000001);
_ebase_address = 0x9FC01000;

/****************************** ****************************** *************
* Memory Address Equates
****************************** ****************************** *************/
_RESET_ADDR = 0xBFC00000;
_BEV_EXCPT_ADDR = 0xBFC00380;
_DBG_EXCPT_ADDR = 0xBFC00480;
_DBG_CODE_ADDR = 0xBFC02000;
_DBG_CODE_SIZE = 0xFF0 ;
_GEN_EXCPT_ADDR = _ebase_address + 0x180;
[/COLOR]

/****************************** ****************************** *************
* Memory Regions
*
* Memory regions without attributes cannot be used for orphaned sections.
* Only sections specifically assigned to these regions can be allocated
* into these regions.
****************************** ****************************** *************/
MEMORY
{
kseg0_program_mem (rx) : ORIGIN = 0x9D000000, LENGTH = 0x6000 /* 20KB of Program Flash*/
kseg0_boot_mem : ORIGIN = 0x9FC00490, LENGTH = 0x4E0
exception_mem : ORIGIN = 0x9FC01000, LENGTH = 0x1000
kseg1_boot_mem : ORIGIN = 0xBFC00000, LENGTH = 0x490
debug_exec_mem : ORIGIN = 0xBFC02000, LENGTH = 0xFF0
config3 : ORIGIN = 0xBFC02FF0, LENGTH = 0x4
config2 : ORIGIN = 0xBFC02FF4, LENGTH = 0x4
config1 : ORIGIN = 0xBFC02FF8, LENGTH = 0x4
config0 : ORIGIN = 0xBFC02FFC, LENGTH = 0x4
kseg1_data_mem (w!x) : ORIGIN = 0xA0000000, LENGTH = 0x10000
sfrs : ORIGIN = 0xBF800000, LENGTH = 0x100000
configsfrs : ORIGIN = 0xBFC02FF0, LENGTH = 0x10
}



Voila le mapping mémoire de mon application :
/****************************** ****************************** *************
* For interrupt vector handling
****************************** ****************************** *************/
PROVIDE(_vector_spacing = 0x00000001);
_ebase_address = 0x9D07F000;


/****************************** ****************************** *************
* Memory Address Equates
* _RESET_ADDR -- Reset Vector
* _BEV_EXCPT_ADDR -- Boot exception Vector
* _DBG_EXCPT_ADDR -- In-circuit Debugging Exception Vector
* _DBG_CODE_ADDR -- In-circuit Debug Executive address
* _DBG_CODE_SIZE -- In-circuit Debug Executive size
* _GEN_EXCPT_ADDR -- General Exception Vector
****************************** ****************************** *************/
_RESET_ADDR = 0xBFC00000;
_BEV_EXCPT_ADDR = 0xBFC00000 + 0x380;
_DBG_EXCPT_ADDR = 0xBFC00000 + 0x480;
_DBG_CODE_ADDR = 0xBFC02000;
_DBG_CODE_SIZE = 0xFF0 ;
_GEN_EXCPT_ADDR = _ebase_address + 0x180;


/****************************** ****************************** *************
* Memory Regions
*
* Memory regions without attributes cannot be used for orphaned sections.
* Only sections specifically assigned to these regions can be allocated
* into these regions.
****************************** ****************************** *************/
MEMORY
{
exception_mem : ORIGIN = 0x9D07F000, LENGTH = 0x1000
kseg0_boot_mem : ORIGIN = 0x9D07E690, LENGTH = 0x970
kseg1_boot_mem : ORIGIN = 0xBFC00000, LENGTH = 0x490
kseg0_program_mem (rx) : ORIGIN = 0x9D006000, LENGTH = 0x78500
debug_exec_mem : ORIGIN = 0xBFC02000, LENGTH = 0xFF0
config3 : ORIGIN = 0xBFC02FF0, LENGTH = 0x4
config2 : ORIGIN = 0xBFC02FF4, LENGTH = 0x4
config1 : ORIGIN = 0xBFC02FF8, LENGTH = 0x4
config0 : ORIGIN = 0xBFC02FFC, LENGTH = 0x4
kseg1_data_mem (w!x) : ORIGIN = 0xA0000000, LENGTH = 0x20000
sfrs : ORIGIN = 0xBF800000, LENGTH = 0x100000
configsfrs : ORIGIN = 0xBFC02FF0, LENGTH = 0x10
}



Et j'ai modifié le bootloader.h pour informer où faire les jump :
#define APP_FLASH_BASE_ADDRESS 0x9D006008
#define APP_FLASH_END_ADDRESS 0x9D07FFFF

#define USER_APP_RESET_ADDRESS 0x9D07E690



Habituellement je prends plaisir à debugger, mais là je ne comprends pas ce qui m'échappe. Es ce que quelqu'un a des conseils à me donner ou des pistes que je pourrai explorer. A votre avis l'erreur peut-elle venir du mapping ou comme je le pense plutôt de la configuration ? Es ce que ca pourrait venir d'ailleurs ?
Merci d'avance à vos tous.

Bonne journée.