[Numérique] pic32mx795f512l mémoriser en flash - Page 2
Répondre à la discussion
Page 2 sur 6 PremièrePremière 2 DernièreDernière
Affichage des résultats 31 à 60 sur 156

pic32mx795f512l mémoriser en flash



  1. #31
    satinas

    Re : pic32mx795f512l mémoriser en flash


    ------

    1. Quelle est la taille de ton programme si tu le compiles avec le linker script par défaut ?
    2. Enlève le -0x10000 dans le linker script modifié et vois ce que cela donne

    -----

  2. #32
    satinas

    Re : pic32mx795f512l mémoriser en flash

    Il faut aussi enlever la ligne Flash_memory, qui d'ailleurs comportait une erreur (pas très grave), 10000 au lieu de 0x10000

  3. #33
    davidif

    Re : pic32mx795f512l mémoriser en flash

    Pour la taille du programme, tu le voie à la taille du fichier de sortie .hex ? ou sur mplab
    TAILLE.png

    j'ai retiré la ligne flash_memory et le compilateur apparemment n'aime pas ça
    erreur.jpg

    sinon, si je remet donc la ligne flash_memorie et
    je change dans mon fichier system_conf.h

    //#define DRV_NVM_MEDIA_START_ADDRESS 0x9D000000
    #define DRV_NVM_MEDIA_START_ADDRESS 0x9D070000

    voila le retour de compile
    erreur1.jpg

    d'après ce que je vois , il n'y aurait pas asser de place pour
    heap et stack

  4. #34
    davidif

    Re : pic32mx795f512l mémoriser en flash

    mes paramètres du fichier "system_config"
    Nom : nvm.png
Affichages : 65
Taille : 20,1 Ko

  5. #35
    satinas

    Re : pic32mx795f512l mémoriser en flash

    Regarde la vidéo en minute 15, en bas à gauche. Mplabx comme Mplab affiche sous forme graphique l'occupation flash et ram.
    la ligne Flash_memory a été ajoutée pour écrire des données en flash, qui a fait ça ? il faut faire l'opération inverse pour les essais.
    De toute façon, tu dois utiliser des linker scripts issus d'Harmony, car j'ai bien peur qu'il soient différents des anciens. Et ne me pousse pas dans Harmony, je reste au bord résolument. Si les anciens scripts ne sont pas compatibles je peux rien faire de plus.

  6. #36
    davidif

    Re : pic32mx795f512l mémoriser en flash

    De quel video parles tu ? le lien youtube que tu as mis dans les premiers postes

  7. #37
    satinas

    Re : pic32mx795f512l mémoriser en flash

    oui, celle fourni en lien.
    Il faut que tu détailles ce que tu fais, où as tu pris le script, l'as-tu modifié, et si possible sans balancer au milieu des explications des fichiers interminables qui donnent pas envie de te lire, fournis les sous forme d'un zip ou autre, pour aller les voir uniquement si on est intéressés.

  8. #38
    satinas

    Re : pic32mx795f512l mémoriser en flash

    Et surtout tu changes de sujet trop vite, on en a pas fini avec l'écriture de la flash, et on a est déjà parti dans le bootloader qui n'est pas une mince affaire.

  9. #39
    davidif

    Re : pic32mx795f512l mémoriser en flash

    Citation Envoyé par satinas Voir le message
    oui, celle fourni en lien.
    Il faut que tu détailles ce que tu fais, où as tu pris le script, l'as-tu modifié, et si possible sans balancer au milieu des explications des fichiers interminables qui donnent pas envie de te lire, fournis les sous forme d'un zip ou autre, pour aller les voir uniquement si on est intéressés.
    Désolé pour les fichiers qui paraissent interminable, j'essai de mettre tout ce qui peut apporter l'information que je ne trouve pas forcement du fait de mon inexpérience du domaine.
    Mais je n'ai rien changé au script, enfin tu parle du linker ? ou autre .

    Par ce que, ma compile passe bien sans le linker et d'ailleurs comment s'organise la mémoire sans linker ?
    je comprend pas trop là

  10. #40
    satinas

    Re : pic32mx795f512l mémoriser en flash

    tDepuis hier j'ai écrit plusieurs fois "linker script par défaut". Il fallait me demander qu'est ce que c'est ce truc, parce qu'il y a forcément un linker script par défaut, tu ne pas encore trouvé, je pense. Je sais toujours pas où tu as trouvé celui que tu affiches.
    Désolé, mais on a vraiment l'impression que tu as oublié (et pas relu !) ce qu'il ta été expliqué il y a 3 ans sur les bootloaders.
    Dernière modification par satinas ; 17/08/2016 à 19h58.

  11. #41
    davidif

    Re : pic32mx795f512l mémoriser en flash

    Bah quand tu me dis "linker script", je comprend qu'il s'agit du linker, mais quand tu me parle de "script" je me demandais de quoi il s'agit , il peut y avoir différents script autre ...
    Par contre, ce linker que j'ai afficher n'est pas celui par defaut mais un linker récupéré d'un autre soft que j'ai fais avec évidemment le même micro et qui fonctionnait notamment en bootloader.
    Dernière modification par davidif ; 17/08/2016 à 20h00.

  12. #42
    satinas

    Re : pic32mx795f512l mémoriser en flash

    Il vaut mieux en rester à l'écriture de la flash, car le bootloader, c'est très mal barré.

  13. #43
    davidif

    Re : pic32mx795f512l mémoriser en flash

    Pour le moment, je visais plus la lecture et ecriture, après si mon fichier fonctionnait ça faisant d'une pierre deux coup.

    je vais continuer à approndire l'écriture et la lecture, seulement j'essai de comprendre ou j'ecris surtout

  14. #44
    satinas

    Re : pic32mx795f512l mémoriser en flash

    Relis mes messages, je te l'ai expliqué, où écrire et comment.

  15. #45
    davidif

    Re : pic32mx795f512l mémoriser en flash

    Citation Envoyé par satinas Voir le message
    D'après ce que j'ai compris, pour écrire dans les derniers 4096 octets de la flash de 512k, il faut écrire à l'index 0x7f000.
    Et il faut bien sur déclarer cette zone dans le linker script, pour éviter de l'effacer à la programmation.
    excuse moi, mais je ne comprend pas, ou faut-il écrire 0x7f000 (quel index) et le déclarer dans le script linker, seulement je ne peux pas pour le moment compiler le linker

  16. #46
    satinas

    Re : pic32mx795f512l mémoriser en flash

    On ne parle plus du tout de linker script.
    Pour le moment, tu écris puis vérifie par lecture, dans le même programme, et tout sera effacé (par le linker script par défaut) à chaque fois que tu reprogrammera la flash.

    l'adresse où on écrit dans la flash, de 0 à 512k, est à mettre dans WDRV_NVM_SPACE_ADDR
    ne pas dépasser 512 octets pour size car la flash s'écrit par bloc de 512 octets max.
    elle s'efface par bloc de 4096 octets
    L'adresse, c'est plutôt un index de 0 à 0x7f000, tu prends 0x7f000 pour écrire à la fin de la flash. Et j'ai pas vérifié expérimentalement alors c'est peut être ça.

    De toute façon tu peux déjà testé la lecture de la flash, en lisant un morceau du programme qu'elle contient, et en la comparant au listing désassemblé dans MPLABX, mais j'ai bien peut que là, ton cerveau va fumer

  17. #47
    davidif

    Re : pic32mx795f512l mémoriser en flash

    ok merci pour la précision, je vois ça

    mon cerveau fume depuis un bon bout de temps malgré ça je suis arrivé à faire la majeur partie des fonctions, il me reste plus que celle-ci ( écriture,lecture) pour clore le tout .

  18. #48
    davidif

    Re : pic32mx795f512l mémoriser en flash

    Bonjour,

    après quelques essai et modif, ça fonctionne après changement d'adresse

    #define WDRV_NVM_SPACE_ADDR 0x9D070000

    Alors prudence, quand je dis ça fonctionne, c'est que ma pile tcpip, ne plante pas après redémarrage, ce qui veut dire que je n'écris pas sur le prog
    Par contre, mon changement d'ip ne ce fait toujours pas

    Au changement, ip je viens écrire :

    WDRV_NVM_write(appDataTCPIP.ne w_IP,13); // apriori ça à l'aire d'écrire, puisque ça plantais au début

    puis à l'init, je viens donc relire

    WDRV_NVM_read(appDataTCPIP.new _IP,13);

    puis un test pour charger la nouvelle

    Code:
       if (appDataTCPIP.new_IP[0]!=0x0)
        {
            networkConfig[0].ipAddr = appDataTCPIP.new_IP;
       
        } 
        else 
        {
            networkConfig[0].ipAddr = defaut_ip;
        }
    seulement , apparemment, l'emplacement mémoire doit resté tout le temps à 0 malgré le changement car je reste toujours sur l'ancienne adresse

  19. #49
    satinas

    Re : pic32mx795f512l mémoriser en flash

    Tu affiches d'abord le listing désassemblé de ton programme par
    le menu Window/Debugging/Output/Disassembly_Listing_File
    Il faudra éventuellement modifier les propriétés du projet, il te dit comment faire

    Si la première ligne affichée dans le listing est par exemple
    9D0000DC 27BDFFF0 ADDIU SP, SP, -16

    #define WDRV_NVM_SPACE_ADDR 0xDC
    tu lis 4 octets dans ta flash en 0xDC, 0x9D0000DC, où chepakoi d'autres
    et tant que tu lis pas les valeurs 27BDFFF0, pas la peine d'écrire

  20. #50
    satinas

    Re : pic32mx795f512l mémoriser en flash

    On va y arriver ...

    L'index, c'est par rapport au début de la zone flash de 64k, que tu as déclarée en zone média par :
    #define DRV_NVM_MEDIA_START_ADDRESS 0x9d070000
    #define DRV_NVM_MEDIA_SIZE 64
    Avec les fonctions nvm d'Harmony, on ne peut lire et écrire que dans cette zone média

    Pour écrire en 0x9d070000, début de la zone média
    #define DRV_NVM_MEDIA_START_ADDRESS 0x00000
    pour écrire en 0x9d07f000, derniers 4096 octets de la zone média
    #define DRV_NVM_MEDIA_START_ADDRESS 0x0f000

    Pour lire partout dans la flash, il suffit d'utiliser un pointeur en castant l'adresse
    uint8_t* pb = (uint8_t*)0x9d000000;
    uint32_t* pi = (uint32_t*)0x9d000000;
    sprintf(s, "0x%02X 0x%08X", *pb, *pi);

    Mais dans l'immédiat, tu dois avoir une console série pour debugger, c'est un minimum
    Dernière modification par satinas ; 20/08/2016 à 11h10.

  21. #51
    satinas

    Re : pic32mx795f512l mémoriser en flash

    oops
    Pour écrire en 0x9d070000, début de la zone média
    #define WDRV_NVM_SPACE_ADDR 0x0000
    pour écrire en 0x9d07f000, derniers 4096 octets de la zone média (et de la flash)
    #define WDRV_NVM_SPACE_ADDR 0xf000

  22. #52
    davidif

    Re : pic32mx795f512l mémoriser en flash

    Merci Satinas,

    En fait, pour pouvoir voir mes valeurs écrite dans la flash, j'ai dû passer sur le codage de mon bus RS232 qui communique entre ma carte et une télécommande filaire (clavier et lcd) pour afficher des valeurs.

    Je viens de réussir à faire les transferts d'information (aller et retour) entre les deux ainsi je pourrai visualiser mes valeurs enregistrées

    http://forums.futura-sciences.com/el...m-rs232-4.html

    Je vais donc pouvoir repasser sur la mémoire flash

  23. #53
    davidif

    Re : pic32mx795f512l mémoriser en flash

    Citation Envoyé par satinas Voir le message
    oops
    Pour écrire en 0x9d070000, début de la zone média
    #define WDRV_NVM_SPACE_ADDR 0x0000
    pour écrire en 0x9d07f000, derniers 4096 octets de la zone média (et de la flash)
    #define WDRV_NVM_SPACE_ADDR 0xf000
    Satinas,

    Pour écrire j'utilise donc cette fonction "WDRV_NVM_write(uint8_t *buf, int size)" si j'ai bien compris sur son utilisation, je fais

    WDRV_NVM_write(mon tableau, taille du tableau) seulement ce que je me demandais, c'est comment tout ça ce place dans la flash ?

    Si je fais mon tableau 1 : WDRV_NVM_write(mon tableau1, taille du tableau1)
    puis mon tableau 2 : WDRV_NVM_write(mon tableau2, taille du tableau2)

    on ne dois pas lui spécifier l'emplacement dans la flash à ton avis ? je me souviens dans d'autre application devoir faire quelques chose comme ça en fonction de la taille de la valeur :

    NVMWriteWord((void*)(NVM_PROGR AM_PAGE + 0), out1_usb); // 4 octet
    NVMWriteWord((void*)(NVM_PROGR AM_PAGE + 4), out2_usb); // 4 octet
    NVMWriteWord((void*)(NVM_PROGR AM_PAGE + 8), out3_usb); // 4 octet
    NVMWriteWord((void*)(NVM_PROGR AM_PAGE + 12), out4_usb); // 4 octet
    NVMWriteWord((void*)(NVM_PROGR AM_PAGE + 16), out5_usb); // 4 octet

  24. #54
    satinas

    Re : pic32mx795f512l mémoriser en flash

    Il faut faire comme dans le fichier de départ où on a pris les 2 fonctions, écrire un bloc de données contenant toute ta configuration. S'il il n'y a qu'un tableau contenant la chaîne ip, tu écris le tableau, sinon il faut prévoir une structure contenant les différentes infos de ta config. Toute écriture avec la fonction write, commence par effacer les 4096 octets à partir de l'adresse fournie, et derrière on écrit un bloc, tableau ou structure.
    Aux dernières nouvelles tu écris un un tableau de 13 octets, contenant une ip de 13 caractères, c'est à dire que tu rentres l'octet nul de fin de chaîne au marteau.

  25. #55
    davidif

    Re : pic32mx795f512l mémoriser en flash

    Bonjour satinas, bon je me remet sur la flash , après avoir eu l'impression d'avancer sur autre chose (partie RS232) et d'ailleurs j'essai de transferrer la lecture de ma flash sur mon pc via ma liaison rs232, seulement j'ai quelques difficultés.

    Ma liaison qui fonctionne bien, je lis et écrit sur mon UART, seulement je pense traverser un problème de type de déclaration de variable comme tu me l'avais expliqué plus haut entre les char et les uint8_t, signé et non signé et je n'arrive pas à y palier.

    En ma première idée est donc de caster la flash tout comme tu me l'a descrit :

    Code:
    //déclaration
    
    uint8_t* pb = (uint8_t*)0x9d000000;
    uint32_t* pi = (uint32_t*)0x9d000000;
    char s[20]="";
    
    //et construction de chaine de caratères:
    
    sprintf(s, "0x%02X 0x%08X", *pb, *pi);
    je souhaite envoyer les infos au pc via RS232
    donc je fait qq chose comme ça

    Code:
                
    while(PLIB_USART_TransmitterBufferIsFull(USART_ID_1))
    {
    }
    PLIB_USART_TransmitterByteSend(USART_ID_1,s);
    Selement, j'ai ce type d'erreur qui me laisse à penser des problème de type de variable

    Code:
    make[1]: Entering 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'
    make  -f nbproject/Makefile-pic32mx_eth_sk+ioexp+11n+freertos.mk dist/pic32mx_eth_sk+ioexp+11n+freertos/production/pic32_eth_wifi_web_server.X.production.hex
    make[2]: Entering 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'
    "C:\Program Files (x86)\Microchip\xc32\v1.40\bin\xc32-gcc.exe" -g -x c -c -mprocessor=32MX795F512L -ffunction-sections -O1 "-DPLIB_INLINE=static inline" "-DPLIB_INLINE_API=static inline" -D__XC -I../src -I../src/system_config/pic32mx_eth_sk+ioexp+11n+freertos/framework -I../../../../../framework -I../../../../../framework/crypto -I../src/pic32mx_eth_sk+ioexp+11n+freertos -I../src/system_config/pic32mx_eth_sk+ioexp+11n+freertos -I../../../../../framework/driver/wifi/mrf24wn/include -I../../../../../framework/driver/wifi/mrf24wn/wireless_driver/include -I../../../../../framework/driver/wifi/mrf24wn/wireless_driver_extension -I../../../../../bsp/pic32mx_eth_sk -I../../../../../third_party/rtos/FreeRTOS/Source/portable/MPLAB/PIC32MX -I../../../../../third_party/rtos/FreeRTOS/Source/include -Werror -Wall -MMD -MF build/pic32mx_eth_sk+ioexp+11n+freertos/production/_ext/1360937237/app2.o.d -o build/pic32mx_eth_sk+ioexp+11n+freertos/production/_ext/1360937237/app2.o ../src/app2.c 
    ../src/app2.c: In function 'APP2_Tasks':
    ../src/app2.c:268:13: error: passing argument 2 of 'PLIB_USART_TransmitterByteSend' makes integer from pointer without a cast [-Werror]
    nbproject/Makefile-pic32mx_eth_sk+ioexp+11n+freertos.mk:917: recipe for target 'build/pic32mx_eth_sk+ioexp+11n+freertos/production/_ext/1360937237/app2.o' failed
                 PLIB_USART_TransmitterByteSend(USART_ID_1,s);
                 ^
    In file included from ../../../../../framework/peripheral/usart/processor/usart_p32xxxx.h:603:0,
                     from ../../../../../framework/peripheral/usart/processor/usart_processor.h:79,
                     from ../../../../../framework/peripheral/usart/plib_usart.h:57,
                     from ../src/system_config/pic32mx_eth_sk+ioexp+11n+freertos/system_definitions.h:69,
                     from ../src/app2.h:60,
                     from ../src/app2.c:56:
    ../../../../../framework/peripheral/usart/processor/usart_p32mx795f512l.h:4514:22: note: expected '__int8_t' but argument is of type 'char *'
     PLIB_INLINE_API void PLIB_USART_TransmitterByteSend(USART_MODULE_ID index, int8_t data)
                          ^
    cc1.exe: all warnings being treated as errors
    make[2]: *** [build/pic32mx_eth_sk+ioexp+11n+freertos/production/_ext/1360937237/app2.o] Error 1
    make[2]: *** Waiting for unfinished jobs....
    comment puis-je faire pour passer d'un tableau de char à un tableau de uint8_t ? et pouvoir ainsi l'envoyer.

    Merci de ton aide

  26. #56
    satinas

    Re : pic32mx795f512l mémoriser en flash

    Salut,

    Pas la peine d'initaliser le tableau s, car juste derrière tu le remplis avec le sprintf.

    note: expected '__int8_t' but argument is of type 'char *'
    PLIB_INLINE_API void PLIB_USART_TransmitterByteSend (USART_MODULE_ID index, int8_t data)
    Il te dit ce qui ne va pas, et te donne le prototypage de la fonction mal utilisée.

    On a vu que uint_8 est un octet non signé, ou un unsigned char c'est pareil.
    la fonction send attend un int8_t, c'est à dire un octet signé, ou un char c'est pareil.
    Donc il faut lui envoyer un char, toi tu lui fournis un tableau de char, c'est à dire l'équivalent d'un pointeur, d'une adresse de donnée(s), plutôt que la donnée elle-même.
    Il faut faire une boucle qui envoie successivement tous les char du tableau s à la fonction send. La boucle s'arrêtera sur l'octet nul de fin de chaîne.
    Mets cette boucle dans une fonction void usartSendString(char* s)

  27. #57
    davidif

    Re : pic32mx795f512l mémoriser en flash

    Oui j'ai pu m'en aperçevoir et je transmet maintenant mes valeurs, reste à les mettre en forme pour bien identifier les infos

  28. #58
    davidif

    Re : pic32mx795f512l mémoriser en flash

    voila ma boucle

    Code:
                sprintf(s, "0x%02X 0x%08X", *pb, *pi);
                
                for (i=0;i<15;i++)
                {
                 //s_s[i]=s[i];
    
                 
                    while(PLIB_USART_TransmitterBufferIsFull(USART_ID_1))
                    {
                    }
                PLIB_USART_TransmitterByteSend(USART_ID_1,s[i]);
                    
                }

    voila le type de réception, pas formé pour l'instant

    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5
    346504D0x4D 0x5

  29. #59
    satinas

    Re : pic32mx795f512l mémoriser en flash

    Il faut que tu comprennes la notion de pointeur, car c'est très utile.

    Code:
    void usartSendString(USART_MODULE_ID index, char* s)
    {
      if (s) while (*s) {
         while (PLIB_USART_TransmitterBufferIsFull(USART_ID_1))  ;
         PLIB_USART_TransmitterByteSend(USART_ID_1, *s);
         s++;
      }
    }
    Si s est nul en entrée, ça plante, alors on rajoute "if (s)"
    Le s de départ et le s de la fonction n'ont rien à voir, ce sont 2 variables différentes, la première est une globale fournie en argument, et la seconde un paramètre (local) de la fonction.

  30. #60
    davidif

    Re : pic32mx795f512l mémoriser en flash

    j'ai les notions de pointeur, sauf erreur celui-ci représente l'adresse de la donnée, adresse que l'on peux incrémenter et récupérer la valeur à cette adresse.
    Maintenant, j'ai effectivement du mal à comprendre dans certain cas de figure

    par exemple : quand tu fais

    J'ai du mal à comprendre ce que tu fais :

    uint8_t* pb = (uint8_t*)DRV_NVM_MEDIA_START_ ADDRESS; // là je comprend pas ce que représente pb
    uint32_t* pi = (uint32_t*)DRV_NVM_MEDIA_START _ADDRESS; // tu met bien l'adresse de départ sur le pointeur pi

    le tout est de scanner toutes les adresses à partir du début et visualiser l'octet de données ?
    Puis on vient incrémenter cette adresse et récupère ça données

Page 2 sur 6 PremièrePremière 2 DernièreDernière

Discussions similaires

  1. programmation d'un pic32mx795f512l
    Par davidif dans le forum Électronique
    Réponses: 0
    Dernier message: 24/03/2015, 17h39
  2. programmation d'un pic32mx795f512l
    Par davidif dans le forum Électronique
    Réponses: 22
    Dernier message: 02/03/2015, 14h17
  3. bootloader pic32MX795F512L
    Par davidif dans le forum Électronique
    Réponses: 37
    Dernier message: 06/12/2013, 10h21
  4. TCP/IP sur PIC32MX795F512L
    Par invite3bb6cfa9 dans le forum Électronique
    Réponses: 2
    Dernier message: 13/02/2012, 22h58
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...