salut, oui j'ai oublié un 0
pour la 3ème fois, est-ce que les bits de config hardware du bootloader et de l'appli, sont les mêmes ou pas ?
-----
salut, oui j'ai oublié un 0
pour la 3ème fois, est-ce que les bits de config hardware du bootloader et de l'appli, sont les mêmes ou pas ?
justement, bizarement et je ne sais pas pourquoi je compile bien avec le 0 en moins, bizzarement en rajoutant le 0 je ne compile pas ...
Non je n'ai pas répété la même configue hardware car quand mon bootloader fonctionnait avec mon autre programme principal je n'ai pas eu besoin de configurer les mêmes configues hardware et ça fonctionnait très bien, j'essai surtout de comprendre pourquoi je ne compile plus avec ce 0 en plus.
Donc en fait, j'ai rechargé les emplacements linkers application tel que tu m'avais indiqué avec le 0 en plus .
J'ai donc repris les mêmes que mon ancien linker appli fonctionnel, en compilant j'ai eu cette erreur
J'ai donc déplacé monCode:Link Warning: absolute section '_0463296058753825' crosses the boundary of region kseg0_program_mem. Link Error: Could not allocate section '_0463296058753825' at 0x9d006000 Link Error: Could not allocate program memory collect2.exe: error: ld returned 255 exit status make[2]: *** [dist/pic32mx_eth_sk+ioexp+11n+freertos/production/pic32_eth_wifi_web_server.X.production.hex] Error 255 make[1]: *** [.build-conf] Error 2 make: *** [.build-impl] Error 2
#define DRV_NVM_MEDIA_START_ADDRESS 0x9D006000
en
#define DRV_NVM_MEDIA_START_ADDRESS 0x9D078000
et je compile correctement, seulement quand je charge mon hex, rien ne ce passe, car quand je programme sans le bootloader (directement ) ça ne démarre pas non plus en 78000
J'ai l'impression que mon #define DRV_NVM_MEDIA_START_ADRESS n'est peut-être pas bien placé pour que mon soft démarre.
Dernière modification par davidif ; 10/01/2017 à 20h50.
car quand je programme mon appli sans bootloader (donc directement) je ne demarre pas non plus en 78000
Pour la quatrième fois, donne moi les 4 mots 32 bits de configuration hardware :
- de l'appli bootloader
- de l'appli à bootloader
- contenus dans le pic juste après que tu ait bootloadé l'appli
Ca fait 12 en tout
re-boujour (:
je te donne ma config hardware de l'appli à bootloader
pour le bootloader "HardwareProfile_PIC32MX_USB_S tarterKit.h":Code:/*** Ports System Service Configuration ***/ #define SYS_PORT_AD1PCFG 0xffff #define SYS_PORT_CNPUE 0x0 #define SYS_PORT_CNEN 0x0 #define SYS_PORT_D_TRIS 0xfff9 #define SYS_PORT_D_LAT 0x0 #define SYS_PORT_D_ODC 0x0 #define SYS_PORT_C_TRIS 0xfff1 #define SYS_PORT_C_LAT 0x0 #define SYS_PORT_C_ODC 0x0 #define SYS_PORT_A_TRIS 0x003E //#define SYS_PORT_A_TRIS_IN 0x001C #define SYS_PORT_A_LAT 0x0 #define SYS_PORT_A_ODC 0x0 #define SYS_PORT_B_TRIS 0xffff #define SYS_PORT_B_LAT 0x0 #define SYS_PORT_B_ODC 0x0 //#define SYS_PORT_E_TRIS_OUT 0x001f //#define SYS_PORT_E_TRIS_IN 0x03E0 #define SYS_PORT_E_TRIS 0x0000 #define SYS_PORT_E_LAT 0x0 #define SYS_PORT_E_ODC 0x0 #define SYS_PORT_G_TRIS 0x0000 #define SYS_PORT_G_LAT 0x0 #define SYS_PORT_G_ODC 0x0
j'aurai qq choses comme ça ...
Code:// this revision of the MCHPFSUSB framework. Please review each // option carefully and determine which options are desired/required // for your application. //#define USE_SELF_POWER_SENSE_IO #define tris_self_power TRISAbits.TRISA2 // Input #define self_power 1 //#define USE_USB_BUS_SENSE_IO #define tris_usb_bus_sense TRISBbits.TRISB5 // Input #define USB_BUS_SENSE 1 /*******************************************************************/ /*******************************************************************/ /*******************************************************************/ /******** Application specific definitions *************************/ /*******************************************************************/ /*******************************************************************/ /*******************************************************************/ /** Board definition ***********************************************/ //These defintions will tell the main() function which board is // currently selected. This will allow the application to add // the correct configuration bits as well use the correct // initialization functions for the board. These defitions are only // required for this demo. They are not required in // final application design. #define mLED LATDbits.LATD2 // Blinks LED 1 on USB Starter kit #define BlinkLED() (mLED = ((ReadCoreTimer() & 0x0800000) != 0)) #define InitLED() do{ \ AD1PCFG = 0; \ TRISDbits.TRISD2 = 0; \ TRISDbits.TRISD1 = 0; \ TRISDbits.TRISD0 = 0; \ LATDbits.LATD0 = 0; LATDbits.LATD1 = 0; LATDbits.LATD2 = 0;\ }while(0) // Switch S3 on USB Starter Kit. //#define ReadSwitchStatus() (PORTReadBits(IOPORT_D, BIT_13) & BIT_13) #define bp_poussoir PORTDbits.RD13 // Error indication. #define Error() do{LATDbits.LATD0 = 1; LATDbits.LATD1 = 1; LATDbits.LATD2 = 1;} while(0);
Les bits de configuration hardware , c'est pas ça.
D'abord tu compiles ton appli, ensuite tu vas dans le menu Window/PIC Memory View/Configuration bits
et tu notes la valeur des 4 mots de 32bits DEVCFG0 à DEVCFG3, par exemple 0x7FFFFFFF
Ceux de l'appli bootloadeur et de l'appli bootloadée doivent être exactement les mêmes.
je vais regarder ce que tu m'à dit, seulement en reprenant nos échanges , je m’arrêterai au poste 71, ou tu m'a fais reprendre les emplacements comme mon ancien linker appli pour dire que ma compile ne passe pas en définitif.
au départ je ne distinguai pas les fichiers à leur emplacement d'origine et ceux placé dans mon projet, et les modifs ce prenaient en compte une fois mplabx fermé puis d'ré-ouvert, comme tu m'a conseiller j'ai donc renommé mon fichier .ld(en linkerapp.ld) et modifier son nom en include du fichier .x , j'ai donc ces erreur là : évidement tout passe correctement avec le fichier .ld d'origine renommé en linkerapp.ld
J'ai bien repris les fichiers linker (le .ld et .x )Code:nbproject/Makefile-pic32mx_eth_sk+ioexp+11n+freertos.mk:1527: recipe for target 'dist/pic32mx_eth_sk+ioexp+11n+freertos/production/pic32_eth_wifi_web_server.X.production.hex' failed make[2]: Leaving directory 'C:/Users/Tecwave/disque 1t/etude/hardware/Programme PIC32/WIFI/N V1.2/apps/tcpip/web_server_nvm_mpfs/firmware/pic32_eth_wifi_web_server.X' nbproject/Makefile-pic32mx_eth_sk+ioexp+11n+freertos.mk:78: recipe for target '.build-conf' failed make[1]: Leaving directory 'C:/Users/Tecwave/disque 1t/etude/hardware/Programme PIC32/WIFI/N V1.2/apps/tcpip/web_server_nvm_mpfs/firmware/pic32_eth_wifi_web_server.X' nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed c:\program files (x86)\microchip\xc32\v1.40\bin\bin\gcc\pic32mx\4.8.3\..\..\..\..\bin/xc32-ld.exe:linkerapp.ld:16: syntax error collect2.exe: error: ld returned 255 exit status make[2]: *** [dist/pic32mx_eth_sk+ioexp+11n+freertos/production/pic32_eth_wifi_web_server.X.production.hex] Error 255 make[1]: *** [.build-conf] Error 2 make: *** [.build-impl] Error 2
ha ok ,
pour l'application :
DEVCFG0 :7FFFFFFF
DEVCFG1 :FFFFFFFF
DEVCFG2 :FFFFFFFF
DEVCFG3 :FFFFFFFF
Pour le prog bootloader :
DEVCFG0 :7FFFFFFF
DEVCFG1 :FF7FCEFB
DEVCFG2 :FFF879D9
DEVCFG3 :FFFFFFFF
VOILA
ha ok ,
pour l'application :
Désolé, j'ai fais une fausse manip, ceux là sont les bon
DEVCFG0 :7FFFFFFF
DEVCFG1 :FF740DFB
DEVCFG2 :FFF879D9
DEVCFG3 :38FFFFFF
Pour le prog bootloader :
DEVCFG0 :7FFFFFFF
DEVCFG1 :FF7FCEFB
DEVCFG2 :FFF879D9
DEVCFG3 :FFFFFFFF
VOILA
Dernière modification par davidif ; 24/01/2017 à 18h02.
Tu es sur pour ceux de l'application ?
Compile l'application avec le linker script par défaut, et après compilation tu regardes les mots.
Les bits de configuration de l'horloge sont différents du bootloader, ça ne peut pas marcher.
Donne aussi la config de l'ancienne appli qui marchait avec le bootloader. Il ne suffit pas de charger l'appli, il faut aussi la compiler.
oui, je l'ai compilé avec le linker par défaut justement, l'autre modifier ne ce compile pas, tout du moins j'ai des erreurs en définitif
ok, mais je suppose qu'avant tout c'est de faire fonctionner le linker modifier avec l'appli
je te fais ça
Dans un premier temps, ce qu'il faut faire c'est fonctionner ton appli sans login script (celui par défaut donc), en la programmant avec le programmateur hardware, et avec les mêmes mots de configuration que l'appli bootloader. Et si ça marche, tu pourras envisager de la bootloader.
J'en suis pas encore absolument sur, mais je pense que le bootloader ne modifie pas la configuration hardware, donc l'appli après avoit été bootloadée, démarre avec la config hardware du bootloader.
donc les mots de l'application qui fonctionne avec mon bootloader sont
DEVCFG0 :7FFFFFFF
DEVCFG1 :FFE0FE59
DEVCFG2 :FFF879D9
DEVCFG3 :FFFFFFFF
OK mais comment changer directement ces mots ? pas dans la fenêtre directement je suppose , car ça correspond à la configue
sachant que la configu de l'appli est plutôt délicat à modifier pour son fonctionnement, il serai pas mieux de la changer sur le bootloader ?
après je n'ai pas forcement la main sur le DEVCFG3 en userid et le DEVCFG1, faut que je vois à quel config ça correspond , c'est ça ?
Tu dupliques les directives #pragma config du fichier main, dans un sens ou dans l'autre.
Certains bits sont sans doute peu importants, d'autres beaucoup plus.
Le bootloader a besoin de la PLL USB.
Bonjour satinas,
J'ai bien pris note des derniers observation, mais j'ai voulu revenir en arrière et testé de nouveau pour que qu'harmony me génère le linker application via la sélection des choix de configure et là à ma grande surprise, là ou avant je compilais pas , je ne sais pas pourquoi mais là ça veut bien compiler et ma donc générer un fichier linker "btl_mx.ld".
Evidemment, j'ai temporairement retiré ceux par défaut.
voici ce que m'a généré harmony
ça c'est mon linker du bootloader :Code:*************************************************************************/ PROVIDE(_vector_spacing = 0x00000001); _ebase_address = 0x9D00E000; /************************************************************************* * 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 = (0x9D00E000 + 0x1000); _BEV_EXCPT_ADDR = ((0x9D00E000 + 0x1000) + 0x380); _DBG_EXCPT_ADDR = ((0x9D00E000 + 0x1000) + 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 { kseg0_program_mem (rx) : ORIGIN = (0x9D001000 + 0xE000 + 0x490), LENGTH = 0x80000 - (0xE000 + 0x490) /* All C Files will be located here */ kseg0_boot_mem : ORIGIN = 0x9D00E000, LENGTH = 0x0 /* This memory region is dummy */ exception_mem : ORIGIN = 0x9D00E000, LENGTH = 0x200 /* Interrupt vector table */ config3 : ORIGIN = 0xBFC02FF0, LENGTH = 0x4 config2 : ORIGIN = 0xBFC02FF4, LENGTH = 0x4 config1 : ORIGIN = 0xBFC02FF8, LENGTH = 0x4 config0 : ORIGIN = 0xBFC02FFC, LENGTH = 0x4 kseg1_boot_mem : ORIGIN = (0x9D00E000 + 0x1000), LENGTH = 0x490 /* C Startup code */ kseg1_data_mem (w!x) : ORIGIN = 0xA0000000, LENGTH = 0x20000 sfrs : ORIGIN = 0xBF800000, LENGTH = 0x100000 debug_exec_mem : ORIGIN = 0xBFC02000, LENGTH = 0xFF0 configsfrs : ORIGIN = 0xBFC02FF0, LENGTH = 0x10
Code:PROVIDE(_vector_spacing = 0x00000001); _ebase_address = 0x9FC01000; /************************************************************************* * 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 { kseg0_program_mem (rx) : ORIGIN = 0x9D000000, LENGTH = 0x6000 /* All C Files will be located here */ kseg0_boot_mem : ORIGIN = 0x9FC00490, LENGTH = 0x0 /* This memory region is dummy */ exception_mem : ORIGIN = 0x9FC01000, LENGTH = 0x1000 /* Interrupt vector table */ kseg1_boot_mem : ORIGIN = 0xBFC00000, LENGTH = 0x490 /* C Startup code */ 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
j'ai donc été voir dans le fichier Bootloader.h du programme du bootloader, pour voir si quelque choses devrait être adapter, comme
#define PROGRAM_FLASH_END_ADRESS (0x9D000000+BMXPFMSZ-1)
#define APP_FLASH_BASE_ADDRESS 0x9D000000
#define USER_APP_RESET_ADDRESS (0x9D006000 + 0x1000 + 0x970)
sachant que le programme si je dis pas de bêtise serait placé en 0x9D00E000 D'après ce qu'a généré harmony j'ai pensé faire
#define APP_FLASH_BASE_ADDRESS 0x9D00E000
MERCI
Salut,
ça devrait passer car le bootloader va de 0 à 0x6000 et l'appli est en 0xe000
Code:#define APP_FLASH_BASE_ADDRESS 0x9D00E000 #define USER_APP_RESET_ADDRESS 0x9D00F000 #define PROGRAM_FLASH_END_ADRESS (0x9D000000+BMXPFMSZ-1)
Bah oui , mais apparemment non
j'ai modifier le Bootloader.h du programme du bootloader, pour voir
#define PROGRAM_FLASH_END_ADRESS (0x9D000000+BMXPFMSZ-1)
#define APP_FLASH_BASE_ADDRESS 0x9D00E000
#define USER_APP_RESET_ADDRESS (0x9D00E000 + 0x1000 + 0x970)
Mais ça ne fonctionne toujours pas
Tu me dis qu'avec tes valeurs ça fonctionne pas, ok, et avec les miennes ?
parce que ...
Bah oui , mais apparemment non
pour moi ça veut pas dire grand chose
Fais une lecture du contenu du pic après que l'appli ait été bootloadée.
Vérifie que le pic a conservé la config hardware du bootloader.
Compile ton appli sans linker script, et AVEC la config hardware du bootloader, elle doit fonctionner.
Ensuite tu pourras passer au bootloader.