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

pic32mx795f512l mémoriser en flash



  1. #91
    invite830075ec

    Re : pic32mx795f512l mémoriser en flash


    ------

    Bon courage pour la suite
    Tu peux aussi agrandir la zone média, en espérant que cela ne détraque pas le château de cartes savamment construit avec harmonie.

    -----

  2. #92
    invite830075ec

    Re : pic32mx795f512l mémoriser en flash

    Pour la flash, tout ça est régi par l'architecture MIPS.
    La flash comporte une zone de boot non cachée de 12k en 0xbfc00000 et une autre zone de 512k (0x80000 octets).
    Les 512k sont accessibles à travers des adresses virtuelles, soit dans le segment non caché kseg1 en 0xbd000000, soit dans le segment caché kseg0 en 0x9d000000.
    il y a 2 types d'accès à la même mémoire flash physique, sans ou avec cache selon le contexte.

  3. #93
    davidif

    Re : pic32mx795f512l mémoriser en flash

    Bonjour,

    j'essais de comprendre comment s'architecture la mémoire pour savoir ou placer mon bloque en autre choses, j'ai pour ça évidemment vu la docs mais surtout j'essai de comprendre comment et ou harmony organise tout ça car à l'origine du programme il n'utilise pas de linker (fichier procdefs.ld) , ce qui serait plus facile d'avoir une vue globale sur la mémoire si c'était le cas.

    Les fois ou le linker est récupéré par harmony est seulement quand je choisie l'option bootloader et encore là il ne ce compile pas correctement.

    j'ai fais quelques recherche à ce sujet, comme ici : http://picatout-jd.blogspot.fr/2013/...rtie-3-la.html histoire d'y voir plus claire

    j'aimerai bien construire une cartographie de la mémoire utilisé de mon proc, sous le dédale de programme source, je ne sais pas ou chercher.

  4. #94
    invite830075ec

    Re : pic32mx795f512l mémoriser en flash


  5. #95
    davidif

    Re : pic32mx795f512l mémoriser en flash

    pour la taille alloué au pages web, d'après mon soft ce serait

    entre 9d000000 et (64*1024)+9d000000=9d010000 ce qui fait 65536 de taille , si je dis pas trop de bêtises.
    Seulement quand je voie la taille du fichier mpfs_img2.c , celui-ci fait 412 ko est-ce représentatif de la taille qu'il prend dans la mémoire ?

  6. #96
    davidif

    Re : pic32mx795f512l mémoriser en flash

    Donc a priorie :

    mes pages web prennent 61908 octet car elles commence donc à 0x9d000000 jusqu'à 0x9d00f1d4 il me reste donc 3627octet inférieur au bloc de 4096 nécessaire.

    La solution serait de réduire le taille des pages web, ce qui tout à fait envisageable car il y en a beaucoup trop dont je n'est forcement pas besoin.

    ou y a t-il autre solution plus judicieuse que la mienne (je suppose que c'est pas compliqué (: )

  7. #97
    davidif

    Re : pic32mx795f512l mémoriser en flash

    Nickel !! ça fonctionne correctement, reste plus qu'a faire la bonne structure à enregistrer qui regroupe tout les paramètres réseaux

    En faite, j'ai viré pas mal de place pris par les pages web, dont je n'avais pas besoin pour mon projet et libérer ainsi plus de 12000 octet là ou il m'en manquait qu'environ 400.

  8. #98
    invitee05a3fcc

    Re : pic32mx795f512l mémoriser en flash

    Citation Envoyé par davidif Voir le message
    ou y a t-il autre solution plus judicieuse que la mienne (je suppose que c'est pas compliqué (: )
    Tu mets une EEPROM I²C

    64Kb http://fr.farnell.com/webapp/wcs/sto...=213247516&vw=

  9. #99
    davidif

    Re : pic32mx795f512l mémoriser en flash

    Merci pour ta réponse Daudet, je vais certainement prendre, mais en fait, j'ai déjà prévu et câblé une flash extérieur en SPI en prévision, seulement au vu du temps qui mes impartie et du temps que j'ai surtout mis à implémenter mon code, j'ai préférer remettre à plus tard le codage en communication de ma flash.

    En prévision de me mettre dessus en cas ou j'ai besoin d'alourdir mes page web notamment qui pour le moment sont raisonnablement allégé, pour me permettre de caser mes paramètres réseaux comme je le souhaitai.

    Par contre, j'ai bien repéré ou ce situait l'initialisation des paramètres réseau (ip, mask, passerel...), situé dans le system_init.c sous harmony mais quelqu'un pourrait me dire ou ce situe l'init des paramètres wifi(ssid, cle wep...), je cherche toujours mais j'ai des doutes, il ne ce trouve pas là ou le reste s'initialise, mais je cherche toujours.

    Merci

  10. #100
    invite830075ec

    Re : pic32mx795f512l mémoriser en flash

    Pour la 9999ème fois, utilise findstr, dans le dossier de ton appli

  11. #101
    davidif

    Re : pic32mx795f512l mémoriser en flash

    Citation Envoyé par satinas Voir le message
    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.

    Bonjour,

    avec ma fonction d'écriture j'écrit donc bien dans ma flash un tableau et pour sauvegarder toutes une stucture faut-il que je fasse la fonction qui va bien , ou exist-il un code plus simple pour ce faire.

    Au premier abord, j'avais pensé assez brutalement mettre toute la conf dans un tableau, les un à la suite des l'autre comme tab_conf[]={ip,mask,passerel, dns1,dns2,...} et ensuite aller chercher l'info au bonne emplacement de la flash ou du tableau, il y a certainement plus structuré je suppose ?

    si j'ai une structure

    Code:
    typedef struct
    {
    char new_IP[16];
    char new_MASK[16];
    char new_GATEWAY[16];
    
    
    } APP_DATA_TCPIP;

    je sais pour l'avoir bêtement essayé (: qu'il s'agit pas de faire : WDRV_NVM_write_new(appDataTCPI P,48);

    Sinon, quel genre de caractère que l'on rentre en fin de chaine, c'est pas uniquement "0" ? pour ça détection car il peut-être présent dans la données, il y a pas un /

  12. #102
    invite830075ec

    Re : pic32mx795f512l mémoriser en flash

    Salut,
    Je note que tu as pris un jour de congé hier, tu vas finir par prendre du retard
    https://openclassrooms.com/courses/a...-de-caracteres

  13. #103
    davidif

    Re : pic32mx795f512l mémoriser en flash

    Oui , ça fait du bien, sinon j'explose (:

  14. #104
    invite830075ec

    Re : pic32mx795f512l mémoriser en flash

    le fameux caractère '\0' c'est un octet nul, dès qu'il y a un octet nul, la chaîne est finie.
    L'initialisation par char *s = "xxx", ainsi que les fonctions de manipulation de chaînes, ajoutent automatiquement cet octet nul.
    Dans le cas où on remplit la chaîne caractère par caractère, là il faut l'ajouter à la main, derrière le dernier caractère.

  15. #105
    invitee05a3fcc

    Re : pic32mx795f512l mémoriser en flash

    je vais jouer l'oiseau de mauvais augure ......
    Tu as regardé combien de fois tu peux ré-écrire la flash ? Dans la datasheet, il garantisse 1000 écritures (au moins)

  16. #106
    davidif

    Re : pic32mx795f512l mémoriser en flash

    Citation Envoyé par satinas Voir le message
    le fameux caractère '\0' c'est un octet nul, dès qu'il y a un octet nul, la chaîne est finie.
    L'initialisation par char *s = "xxx", ainsi que les fonctions de manipulation de chaînes, ajoutent automatiquement cet octet nul.
    Dans le cas où on remplit la chaîne caractère par caractère, là il faut l'ajouter à la main, derrière le dernier caractère.
    oui effectivement; c'est que je fais sur cette boucle ou je récupère mon ip en retour de la page web

    Code:
            for ( inc=6; inc<19; inc++) 
            {     
            appDataTCPIP.new_IP[tabIP] = *( httpDataBuff+inc);
            tabIP++;
            }
            appDataTCPIP.new_IP[15]='\0';
    par contre, je sais pas si c'est normal mais dans ma flash, je ne vois rien qui s'apparente à '\0' en fin de caractère

    Code:
    0x9D00E000:0x31 0x39 0x32 0x2E
    0x9D00E004:0x31 0x36 0x38 0x2E
    0x9D00E008:0x31 0x2E 0x31 0x33
    0x9D00E00C:0x30 0x00 0x00 0x00

  17. #107
    invite830075ec

    Re : pic32mx795f512l mémoriser en flash

    L'usure de la flash, ça concerne aussi le flashage du soft, le pire c'est les PIC18F97J60 avec internet intégré, 100 écritures max.

  18. #108
    invitee05a3fcc

    Re : pic32mx795f512l mémoriser en flash

    Citation Envoyé par satinas Voir le message
    L'usure de la flash, ça concerne aussi le flashage du soft,
    certainement, mais pour faire 1000 test de soft, ça peut prendre un bout de temps.

    Par contre, si il fait une sauvegarde des paramètres toutes les minutes, au bout de un jour, il peut avoir des problèmes ... et sans avertissement (si il n'y a pas une vérification systématique après écriture) !

  19. #109
    davidif

    Re : pic32mx795f512l mémoriser en flash

    je pense pas avoir atteint la limite d'écriture qui sont au dessus des 1000 cycle d'après mes vagues souvenir et pour utiliser depuis quelques temps un starter kit que j'utilise toujours.

    la carte que je programme est plus récente encore, et j'écris bien mon ip , pourquoi pas le \0, d'ailleurs ça devrait correspondre à quel octet, pas 55 00

  20. #110
    invitee05a3fcc

    Re : pic32mx795f512l mémoriser en flash

    Citation Envoyé par davidif Voir le message
    je pense pas avoir atteint la limite d'écriture qui sont au dessus des 1000 cycle d'après mes vagues souvenir
    Je ne te demande pas si tu les as atteint .

    Je te demande , dans ton soft terminé et livré chez le client , tous les combien tu procèdes à une sauvegarde en Flash ?

  21. #111
    invite830075ec

    Re : pic32mx795f512l mémoriser en flash

    Mes 2 pic32 depuis 6 ans, vaut mieux pas savoir combien de fois je les ai flashés, mais je les vendrai à personne.

    davidif, une simple quote (caractère) c'est pas un guillemet (chaîne).
    char *s = "xxx"
    char c = 'A';
    char c = '0'
    char c = '\0';
    le \ permet de mettre le code ascii au lieu de mettre le caractère. donc '\0', c'est 0, un OCTET NUL !

  22. #112
    davidif

    Re : pic32mx795f512l mémoriser en flash

    Citation Envoyé par DAUDET78 Voir le message
    Je ne te demande pas si tu les as atteint .
    Bah !! au vue des nombreuses difficulté rencontré et au nombreuses reprogrammation, j'ai pas compté mais c'est possible (:

    Citation Envoyé par DAUDET78 Voir le message
    Je te demande , dans ton soft terminé et livré chez le client , tous les combien tu procèdes à une sauvegarde en Flash ?
    la sauvegarde en flash concerne seulement les paramètres réseaux, donc ont les changes pas non plus fréquemment normalement et quelques données lors d'interruptions.

  23. #113
    davidif

    Re : pic32mx795f512l mémoriser en flash

    d'accord, donc c'est normal d'avoir un octet nul en flash à la fin ?

    Donc si j'utilise certaines instructions de récupération de caractère pour l'IP par exemple, celle-ci généralement s'arret au \0 , comment identifier la fin si il n’apparaît pas dans la flash ? un caractère null peut-être dans la données , comme une IP ? pas seulement à la fin

  24. #114
    invite830075ec

    Re : pic32mx795f512l mémoriser en flash

    Tu as l'air de confondre le caractère '0' qui dans ta flash est un 0x30(48) et le caractère '\0' qui est un 0x00(0), fin de chaîne.
    Le fait de parler de caractère pour '\0', ça ajoute à la confusion, c'est un octet nul et puis c'est tout.
    Une structure c'est différent, aucune analogie avec une chaîne.

  25. #115
    davidif

    Re : pic32mx795f512l mémoriser en flash

    HA oui , c'est vrai , autant pour moi

  26. #116
    davidif

    Re : pic32mx795f512l mémoriser en flash

    bon bah voila, ma fonction de savegarde

    Code:
    bool WDRV_NVM_write_new()
    {
        char *buf;
        int i,j,k, tmp;
        DRV_HANDLE nvmHandle;
        DRV_NVM_COMMAND_HANDLE nvmCommandHandle;
        uint8_t NVM_DATA_READ_BUFF_local[DRV_NVM_ROW_SIZE];
    
        //if (size > DRV_NVM_ROW_SIZE) {
        //    return false;
        //}
        k=0;
    
        for (j=0;j<10;j++)
        {
        i=0;
            
            if(j==0) buf=appDataTCPIP_WIFI.new_IP;
            if(j==1) buf=appDataTCPIP_WIFI.new_MASK;
            if(j==2) buf=appDataTCPIP_WIFI.new_GATEWAY;
            if(j==3) buf=appDataTCPIP_WIFI.new_DNS1;
            if(j==4) buf=appDataTCPIP_WIFI.new_DNS2;
            if(j==5) buf=appDataTCPIP_WIFI.new_DHCP;
            if(j==6) buf=appDataTCPIP_WIFI.new_SSID;
            if(j==7) buf=appDataTCPIP_WIFI.new_WEP;
            if(j==8) buf=appDataTCPIP_WIFI.new_WPA;
            
                    while(buf[i]!='\0')
                    {    
                    NVM_DATA_BUFF_local[k] = buf[i];
                    k++;
                    i++;
                    };   
    
        }
        
        nvmHandle = DRV_NVM_Open(0, DRV_IO_INTENT_READWRITE);
        if (DRV_HANDLE_INVALID == nvmHandle) {
            return false;
        }
    
        gAppNVMMediaGeometry = DRV_NVM_GeometryGet(nvmHandle);
        if (NULL == gAppNVMMediaGeometry) {
            return false;
        }
    
        DRV_NVM_Read (nvmHandle, &nvmCommandHandle, NVM_DATA_READ_BUFF_local, WDRV_NVM_MY_CONFIG_ADDR, DRV_NVM_ROW_SIZE);
        if (DRV_NVM_COMMAND_HANDLE_INVALID == nvmCommandHandle) {
            return false;;
        }
    
        tmp = WDRV_NVM_MY_CONFIG_ADDR * (gAppNVMMediaGeometry->geometryTable[2].numBlocks) / (DRV_NVM_MEDIA_SIZE * 1024);
        DRV_NVM_Erase(nvmHandle, &nvmCommandHandle,  tmp, 1);
        if (nvmCommandHandle == DRV_NVM_COMMAND_HANDLE_INVALID) {
            return false;;
        }
    
        while (DRV_NVM_COMMAND_COMPLETED != DRV_NVM_CommandStatus(nvmHandle, nvmCommandHandle));
    
        tmp = WDRV_NVM_MY_CONFIG_ADDR * (gAppNVMMediaGeometry->geometryTable[1].numBlocks) / (DRV_NVM_MEDIA_SIZE * 1024);
        DRV_NVM_Write(nvmHandle, &nvmCommandHandle, (uint8_t *)NVM_DATA_BUFF_local, tmp, 1);
        if (DRV_NVM_COMMAND_HANDLE_INVALID == nvmCommandHandle) {
            return false;;
        }
    
        while (DRV_NVM_COMMAND_COMPLETED != DRV_NVM_CommandStatus(nvmHandle, nvmCommandHandle));
    
        DRV_NVM_Close(nvmHandle);
    
        return true;
    }
    J'ai vu un truc comme ça et qui fonctionne, qu'en pensez vous ?

    Mon bloc

    0x9D00E000:0x31 0x39 0x32 0x2E
    0x9D00E004:0x31 0x36 0x38 0x2E
    0x9D00E008:0x31 0x2E 0x31 0x31
    0x9D00E00C:0x30 0x32 0x35 0x35
    0x9D00E010:0x2E 0x32 0x35 0x35
    0x9D00E014:0x2E 0x32 0x35 0x35
    0x9D00E018:0x2E 0x32 0x31 0x39
    0x9D00E01C:0x32 0x2E 0x31 0x36
    0x9D00E020:0x38 0x2E 0x31 0x2E
    0x9D00E024:0x32 0x31 0x39 0x32
    0x9D00E028:0x2E 0x31 0x36 0x38
    0x9D00E02C:0x2E 0x31 0x2E 0x33
    0x9D00E030:0x31 0x39 0x32 0x2E
    0x9D00E034:0x31 0x2E 0x38 0x39
    0x9D00E038:0x2E 0x32 0x00 0x00
    Dernière modification par davidif ; 29/08/2016 à 19h55.

  27. #117
    invite830075ec

    Re : pic32mx795f512l mémoriser en flash

    Ne mélange pas les choses. D'abord tu renseignes le contenu de la structure config, ensuite tu l'écris en bloc par
    WDRV_NVM_write_new(((uint8_t *)&appDataTCPIP_WIFI, sizeof(appDataTCPIP_WIFI));

    Le compilateur connait la taille de tous les tableaux et structures que tu as déclarés, donc tu peux utiliser l'opérateur sizeof(), ça t'évitera des calculs superflus.

  28. #118
    davidif

    Re : pic32mx795f512l mémoriser en flash

    Citation Envoyé par satinas Voir le message
    Ne mélange pas les choses. D'abord tu renseignes le contenu de la structure config, ensuite tu l'écris en bloc par
    WDRV_NVM_write_new(((uint8_t *)&appDataTCPIP_WIFI, sizeof(appDataTCPIP_WIFI));

    Le compilateur connait la taille de tous les tableaux et structures que tu as déclarés, donc tu peux utiliser l'opérateur sizeof(), ça t'évitera des calculs superflus.
    Ha ok !! merci j'essai demain et pour la lecture, je fais pareil pour recharger ma structure ?

    Sinon, une question concernant toujours la mémoire, en plus des paramètres réseaux qui eux nécessite pas une écriture fréquente, je pense devoir utiliser ma flash externe en SPI( SST26VF064b) que j'ai mis sur ma carte et pas encore utilisé car j'ai d'autres valeurs à mémoriser, valeurs à écrire plus régulièrement sur l'état du système donc pour la flash interne ça risque d'êtres limité en cycle d'écriture.
    selon toi c'est compliqué à mettre en oeuvre ? est-ce la même méthode d'écriture que pour la flash interne ?

  29. #119
    invite830075ec

    Re : pic32mx795f512l mémoriser en flash

    pour charger la config, la fonction memcpy() devrait convenir.
    ou tu utilises un pointeur sur la structure directement en flash.

    findstr /s /c:SST26 *.h ou *.c dans harmony retourne des choses intéressantes
    chaque fois que tu te poses une question, tape findstr

  30. #120
    invite830075ec

    Re : pic32mx795f512l mémoriser en flash

    Mine de rien, t'es en train d'annoncer que tout le travail fait sur la flash interne ne sert à rien, car il y avait sur la carte une seconde flash qui attendait sagement qu'on s'occupe d'elle.

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

Discussions similaires

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