je te l'ai envoyé, par contre pour le vendre, va falloir le donner car je ne suis pas chère comparé à d'autre
Bon a priori
le fichier p32MX795F512L.ld est l'ensemble des données linker compris dans les 2 fichiers que sont procdefs.ld et elf32pic32mx.x
Car quand on les ajoute au projet individuellement (les 2 ) ça ne ce compile pas
Mais quand je met seulement p32MX795F512L.ld ça passe correctement, donc au final vaut mieux prendre ce dernier et l'adapter , si je dis pas de bêtises.
Même quand on les ouvrent, on s'aperçois que tout n'y est pas dans l'un ou l'autre des 2 fichiers
Si tu mets les 2 fichiers que je t'ai cités dans ton projet à côté du makefile, et si tu mets le .x dans le dossier linker script de ton projet, IL DOIT SE COMPILER.
Mon PC a lâché suite à un choc. Je suis sur un vieux portable, pour le moment je n'ai plus accès aux fichiers que tu m'as envoyés. Redonne moi le linker script bootloader et il me faudrait voir le source pic de ce bootloader aussi (et rien d'autre).
Bonjour satinas,
Je vais pas pouvoir faire grand chose aujourd'hui, mais dès que possible je mis met.
Je t'envoi le programme bootloader, avec son linker
https://www.dropbox.com/s/vnmpxjarep...%20v3.rar?dl=0
et te remet les fichiers linker appli
https://www.dropbox.com/sh/athe133x1...6v3ndjgoa?dl=0
Dernière modification par davidif ; 03/12/2016 à 12h55.
OK , ça passe !!Si tu mets les 2 fichiers que je t'ai cités dans ton projet à côté du makefile, et si tu mets le .x dans le dossier linker script de ton projet, IL DOIT SE COMPILER.
Mon PC a lâché suite à un choc. Je suis sur un vieux portable, pour le moment je n'ai plus accès aux fichiers que tu m'as envoyés. Redonne moi le linker script bootloader et il me faudrait voir le source pic de ce bootloader aussi (et rien d'autre).
j'ai donc mis les 2 fichiers (elf32pic32mx.x, procdefs.ld) dans
C:apps\tcpip\web_server_nvm_mp fs\firmware\pic32_eth_wifi_web _server.X
Puis mis elf32pic32mx.x dans le répertoire "liker files" de mon projet.
Pour n'avoir aucun doute, j'ai laissé modifier les fichiers d'origine utilisé habituellement pour être bien sûr qu'il utilise bien ceux ajoutés
Donc l'obejctif, est de placer le bootloader de environ 15ko en bout de flash, sachant que l'on possède 42ko de libre.
ça consiste à modifier le
kseg0_boot_mem : ORIGIN = 0x9FC00490, LENGTH = 0x970
Si on admet un espace bootlaoder large de 20ko (4E20HEX)
Je fais un 7FFFF-4E20= 7b1dF donc à l'adresse 0x9D07B1DF
en faisant :
kseg0_boot_mem : ORIGIN =0x9D07B1DF, LENGTH = 0x4E20
voui, mais je me demande si je vais pas changer d'avis, surtout parce que en attendant une carte mère, je peux pas trop investiguer. A priori ton bootloader tel qu'il est actuellement est pas mal, on doit pouvoir décaler l'appli de 24K, j vais regarder ça.
Quand tu écris le bootloader dans le pic avec MplabX, cela efface l'appli dans le pic ou pas ?
Oui, en tout cas quand celle-ci ce met à plus fonctionner.voui, mais je me demande si je vais pas changer d'avis, surtout parce que en attendant une carte mère, je peux pas trop investiguer. A priori ton bootloader tel qu'il est actuellement est pas mal, on doit pouvoir décaler l'appli de 24K, j vais regarder ça.
Quand tu écris le bootloader dans le pic avec MplabX, cela efface l'appli dans le pic ou pas ?
En fait, je charge le bootloader par le biais de mplabx, et après en USB je charge mon appli, mais après rien ne ce passe, par contre je peux rebooter et à nouveau recharger en USB;
je suis en train dexaminer le linker de l'application avec laquel le bootloader fonctionne correctement, que j'ai programmé à l'époque
https://www.dropbox.com/s/o77snj9cew...ocdefs.ld?dl=0
Je parlais bien sur de ton appli qui fonctionnait bien avec le bootloader, est ce que quand tu reécrivait le bootloader, ça effacait l'appli ? Si tu comprends pas la question, tu le dis, si tu as pas la réponse tu le dis, c'est pas grave.
Mais Satinas, en te répondant j'était sûr que tu me parlais de ma nouvelle application, c'est la raison pour laquelle je t'es pas posé la question, sinon évidement que je t'aurai redemandé.
Donc si on parle de mon ancienne application fonctionnelle avec le boot, je suis pas tout à fait sûr mais il s'emblerai qui oui , à l'écriture du boot, j'effaçai tout.
Bon, on va dire que tu n'as pas la réponse, ton bootloader se compile aussi sans linker script spécifique, et dans ce cas on st sur qu'il efface tout.
Pour l'appli, fais une copie backup du procdefs.ld de ton projet.
puis modifie procdefs.ld comme cela, en espérant que la compil marche, mais il faudra déplacer sans doute la zone média en 0x6000, ou la mettre ailleurs
Code:_ebase_address = 0x9d06000; _RESET_ADDR = 0x9d07970; _BEV_EXCPT_ADDR = 0x9d07970+0x380; _DBG_EXCPT_ADDR = 0x9d07970+0x480; exception_mem : ORIGIN = 0x9d06000, LENGTH = 0x1000 kseg0_boot_mem : ORIGIN = 0x9d07000, LENGTH = 0x970 kseg1_boot_mem : ORIGIN = 0x9d07970, LENGTH = 0x490 kseg0_program_mem (rx) : ORIGIN = 0x9d07e00, LENGTH = 0x80000-0x7e00
La zone media en 0x9D006000 ou 0x9D078000, taille 32k
ok j'ai fait les modif, et ça passe ce qui est asser bizzare dans le sens ou je n'ai pas changer la zone média et je m'attendais justement que ça ne passe pasBon, on va dire que tu n'as pas la réponse, ton bootloader se compile aussi sans linker script spécifique, et dans ce cas on st sur qu'il efface tout.
Pour l'appli, fais une copie backup du procdefs.ld de ton projet.
puis modifie procdefs.ld comme cela, en espérant que la compil marche, mais il faudra déplacer sans doute la zone média en 0x6000, ou la mettre ailleurs
Code:_ebase_address = 0x9d06000; _RESET_ADDR = 0x9d07970; _BEV_EXCPT_ADDR = 0x9d07970+0x380; _DBG_EXCPT_ADDR = 0x9d07970+0x480; exception_mem : ORIGIN = 0x9d06000, LENGTH = 0x1000 kseg0_boot_mem : ORIGIN = 0x9d07000, LENGTH = 0x970 kseg1_boot_mem : ORIGIN = 0x9d07970, LENGTH = 0x490 kseg0_program_mem (rx) : ORIGIN = 0x9d07e00, LENGTH = 0x80000-0x7e00
faudra essayer à 3 endroits pour la zone media alors
et ta config tu l'écrivais où, je me souviens plus ...
dans bootloader.h; tu dois avoir
#define APP_FLASH_BASE_ADDRESS 0x9D006000
#define USER_APP_RESET_ADDRESS (0x9D006000 + 0x1000 + 0x970)
j'ai donc chargé le boot sans problème et après les modifs que tu m'a fait faire , j'ai essai un chargement de l'appli via USB mais rien ne ce passe, le micro ne demarre pas.
J'ai donc modifié l'emplacement des pages web en 6000 avant évidement.
Ma configue n'est pas dans le micro mais dans la flash externe, donc elle reste en mémoire
Dernière modification par davidif ; 03/12/2016 à 15h40.
Essaye le bootloader sur une appli Harmony plus simple, sans zone média.
Et envoie moi le procdefs.ld modifié
code 415788 + data 65536 / 524288 = 91%
code 415788 + data 32768 / 524288 = 83%
On va pas repartir sur un dialogue de sourd.
Tu refais ton appli avec la zone media de 32k (pas 64k) à la fin de la flash.
Si tu as d'autres datas, elles aussi à la fin de la flash.
Quand l'appli marche bien sans bootloader, tu repasses en mode bootloader avec le procdefs.ld modiifié, que tu ne m'as toujours pas envoyé.
OK je vois ça, désolé je vais devoir reprendre plus tard, mes obligations de parents m'oblige à m'absenter qq tempsOn va pas repartir sur un dialogue de sourd.
Tu refais ton appli avec la zone media de 32k (pas 64k) à la fin de la flash.
Si tu as d'autres datas, elles aussi à la fin de la flash.
Quand l'appli marche bien sans bootloader, tu repasses en mode bootloader avec le procdefs.ld modiifié, que tu ne m'as toujours pas envoyé.
Et tu testes le bootloader sur l'appli Harmony "led_blink"
J'ai raccourci la zone media de 64k à 32kOn va pas repartir sur un dialogue de sourd.
Tu refais ton appli avec la zone media de 32k (pas 64k) à la fin de la flash.
Si tu as d'autres datas, elles aussi à la fin de la flash.
Quand l'appli marche bien sans bootloader, tu repasses en mode bootloader avec le procdefs.ld modiifié, que tu ne m'as toujours pas envoyé.
const uint8_t __attribute__((space(prog),add ress(DRV_NVM_MEDIA_START_ADDRE SS))) NVM_MEDIA_DATA[DRV_NVM_MEDIA_SIZE*1024]
const uint8_t __attribute__((space(prog),add ress(DRV_NVM_MEDIA_START_ADDRE SS))) NVM_MEDIA_DATA[DRV_NVM_MEDIA_SIZE*512]
puis placé ma zone media à la fin
#define DRV_NVM_MEDIA_START_ADDRESS 0x9D078000
Je l'ai compilé et fait fonctionner correctement sans bootloader
ensuite j'ai donc remis avec bootloader, mais sans succés l'application de démarre toujours pas.
Je t'envoi le linker modifié
https://www.dropbox.com/s/2lb91iabwh...ocdefs.ld?dl=0
Je peux rien tester n'ayant pas xc32 et Harmony sur le portable.
Si le bootloader ne marche avec l'appli Harmony "led_blink", c'est mal barré.
Je n'ai pas essayé le bootloader avec l'appli "led_blink" pour le moment, j'ai voulu m'assuré de l'état de fonctionnement du linker modifié avec ou sans bootloader, car à chaque changement if faut fermer mplabx et le ré-ouvrir et dans le doute de ne pas l'avoir fait j'ai préféré me l'assuré en prenant des notes.
C'est peut-être de la re-dite , mais comme ta pu le constater (: j'ai besoin de temps pour comprendre , en résumé :
sans bootloader, linker d'origine ; ça fonctionne en modifiant les l'emplacement et la taille de média_start
lorsque je met le linker modifié, ça ce compile bien mais ne fonctionne plus quand je le charge
Avec bootloader, linker modifié, ne fonctionne pas quand je le charge
je regarde et compare les 2 linker de mon ancien programme qui fonctionne correctement et son bootloader pour essayé de comprendre ce qui ne va pas.
Normalement c'est le bootloader qui dit de ce placer à l'adresse de démarrage du programme principal ?
à l'époque, on m'avait fait modifier également un autre fichier du bootloader, bootloader.h, y a pas grand chose
https://www.dropbox.com/s/kcmgiuc5tq...tLoader.h?dl=0
http://forums.futura-sciences.com/el...ml#post5754152
je te conseille de renommer tes 2 fichiers linker scripts, afin d'éviter toute confusion avec ceux par défaut de xc32 qu'il faut laisser en permanence (maintenant que t'as compris). Il faudra aussi modifier la ligne de ton .x qui fait un include du second fichier.
Led_blink sera le verdict, moi j'avais pas pu trouver ou déclarer la pin de la led, Harmony, très peu pour moi, mais toi t'as plus le choix.
Je sais plus si le bootloader met à jour les registres de configuration hardware du pic, il vaut mieux que les 2 applis bootloadeur et bootloadée aient les mêmes.
Juste une petite question, dans le linker appication on m'a fait rajouté un emplacement
Flash_memory : ORIGIN = 0x9D070000, LENGTH = 10000 avec
.My_Flash_Memory : {
*(.My_Flash_Memory)
} > Flash_memory
que je comprenne une peu, le programmme est compris dans kseg0_program_mem ?
A quoi correspond les autres
kseg0_boot_mem
exception_mem
kseg1_boot_mem
j'ai également repris des choses dont je ne connait pas trop leur rôle, mais au cas ou ...
_ramfunc_begin = 0;
EXTERN (_min_stack_size _min_heap_size)
PROVIDE(_min_stack_size = 0x400) ;
PROVIDE(_min_heap_size = 0) ; /*Defined on the command line */
OUTPUT_FORMAT("elf32-tradlittlemips")
OUTPUT_ARCH(pic32mx)
ENTRY(_reset)
Merci de l'aide apporté
En d'autres termes, une fois que tu as bootloadé ton programme, vérifie que les registres de configuration du pic sont bien ceux de ton application, parce qu'un pic qui démarre avec n'importe quoi comme configuration hardware, il va pas bien loin.
Bonjour et mes meilleurs vœux 2017.
Bon après une bonne pause tout du moins sur cette partie, he oui !! (: je n'ai toujours pas fait mon bootloader.
J'ai donc relu les commentaires précédent histoire de me remettre dedans, ce qui n'est pas simple et à ma relecture une chose m'interpelle en poste 71;
pourquoi à t'on sur 7 chiffre hex et pas 8
Code:_ebase_address = 0x9d06000; _RESET_ADDR = 0x9d07970; _BEV_EXCPT_ADDR = 0x9d07970+0x380; _DBG_EXCPT_ADDR = 0x9d07970+0x480; exception_mem : ORIGIN = 0x9d06000, LENGTH = 0x1000 kseg0_boot_mem : ORIGIN = 0x9d07000, LENGTH = 0x970 kseg1_boot_mem : ORIGIN = 0x9d07970, LENGTH = 0x490 kseg0_program_mem (rx) : ORIGIN = 0x9d07e00, LENGTH = 0x80000-0x7e00
et pas
Code:_ebase_address = 0x9d006000; _RESET_ADDR = 0x9d007970; _BEV_EXCPT_ADDR = 0x9d007970+0x380; _DBG_EXCPT_ADDR = 0x9d007970+0x480; exception_mem : ORIGIN = 0x9d006000, LENGTH = 0x1000 kseg0_boot_mem : ORIGIN = 0x9d007000, LENGTH = 0x970 kseg1_boot_mem : ORIGIN = 0x9d007970, LENGTH = 0x490 kseg0_program_mem (rx) : ORIGIN = 0x9d007e00, LENGTH = 0x80000-0x7e00