IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Ouverture d'un fichier à partir de son adresse


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2011
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 31
    Points : 22
    Points
    22
    Par défaut Ouverture d'un fichier à partir de son adresse
    Bonjour,

    j'ai un fichier à stocker dans une mémoire SRAM d'une carte Xilinx Virtex ML507.
    J'ai besoin, à partir de mon code C qui s'exécutera sur Microblaze, de lire ce fichier.
    Tout ce que je connais sur ce fichier est son adresse physique dans la mémoire.

    Y-a-t-il un moyen ou une fonction prédéfinie dans C
    qui me permet d'ouvrir ce fichier à partir de son adresse?

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Si le fichier est déjà en mémoire et non sur le disque dur, alors vous pouvez déjà l'utiliser en analysant le contenu de la mémoire à l'adresse spécifiée.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre éclairé
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 471
    Points : 831
    Points
    831
    Par défaut
    Bonjour my_account

    Si tu connais l'adresse des données contenu dans ton fichier, tu peux y accéder directement par pointeur


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char * pointeurVersDonnees = (char *) address ; // ou adress est l'adresse du premier octet
     
    char val = *pointeurVersDonnees;  // premier octet du fichier
    Page sur Developpez : http://pbriand.developpez.com

  4. #4
    Membre à l'essai
    Inscrit en
    Septembre 2011
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 31
    Points : 22
    Points
    22
    Par défaut
    Merci pour vos réponses,

    en fait, mon code s'exécute normalement sur pc,
    ma tâche demandée est de le faire fonctionner sur la carte.

    J'ai une fonction
    jas_stream_t *jas_stream_fopen(const char *filename, const char *mode)
    où l'image sera lue à partir d'un fichier.

    et j'ai une fonction
    jas_stream_t *jas_stream_fdopen(int fd, const char *mode)
    où l'image est lue à partir d'une entrée standard

    Bon, j'ai essayé d'utiliser mon adresse physique 0X8A300000
    à la place de :
    *filename
    ou
    fd
    mais ça n'a rien donné.

    Je ne sais pas comment je devrais faire pour lire les données de mon image,
    à partir de ces fonctions: fdopen et fopen.

  5. #5
    Membre expérimenté
    Profil pro
    Développeur en systèmes embarqués retraité
    Inscrit en
    Mars 2006
    Messages
    946
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 946
    Points : 1 351
    Points
    1 351
    Par défaut
    Salut,

    Citation Envoyé par my_account Voir le message
    Tout ce que je connais sur ce fichier est son adresse physique dans la mémoire.
    Tu ne donnes pas toutes les infos... Ce fichier est-il géré par une FAT? Car si c'est le cas, même en connaissant son adresse, rien ne dit que les secteurs qui le contiennent se suivent, et tu n'as pas non plus l'info sur la longueur.

    Citation Envoyé par my_account Voir le message
    Je ne sais pas comment je devrais faire pour lire les données de mon image,
    à partir de ces fonctions: fdopen et fopen.
    Si tu veux absolument lire ton image comme une zone mémoire, que tu connais la longueur et que l'image est continue, la solution t'a déjà été donnée: Initialise un pointeur de unsigned char sur l'adresse de ton fichier, lit le byte qui s'y trouve, incrémente ton pointeur pour accéder à l'octet suivant, etc... Le nombre d'itérations de ta boucle correspond à la longueur du fichier. Oublie les fonctions de stdio, elles ne peuvent fonctionner qu'avec une vraie FAT.


    A+

    Pfeuh

  6. #6
    Membre à l'essai
    Inscrit en
    Septembre 2011
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 31
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par pfeuh Voir le message
    Salut,
    Tu ne donnes pas toutes les infos... Ce fichier est-il géré par une FAT? Car si c'est le cas, même en connaissant son adresse, rien ne dit que les secteurs qui le contiennent se suivent, et tu n'as pas non plus l'info sur la longueur.
    J'ai chargé cette image sur la mémoire d'une carte (initialement vide), en précisant l'adresse de début.

    Citation Envoyé par pfeuh Voir le message
    Si tu veux absolument lire ton image comme une zone mémoire, que tu connais la longueur et que l'image est continue, la solution t'a déjà été donnée: Initialise un pointeur de unsigned char sur l'adresse de ton fichier, lit le byte qui s'y trouve, incrémente ton pointeur pour accéder à l'octet suivant, etc... Le nombre d'itérations de ta boucle correspond à la longueur du fichier. Oublie les fonctions de stdio, elles ne peuvent fonctionner qu'avec une vraie FAT.
    Merci, c'est bien expliqué, je connais de même la taille de mon image, je devrais par contre me renseigner sur l'arrangement de ces données dans la mémoire en question (n'est ce pas 4 octets par ligne, ou ceci diffère d'une mémoire à une autre?)


    Bref, j'ai trouvé hier une fonction prédéfinie:
    jas_stream_t *jas_stream_memopen(char *buf, int bufsize);
    dont le rôle est d'ouvrir un tampon de mémoire autant que flux.
    J'ai remplacé *buf par mon adresse physique, et ça a marché,
    mais je ne sais pas jusqu'à maintenant si la lecture de mes données se fait
    correctement ou non.

    Par contre, si j'ai à la faire manuellement (comme vous me l'avez expliqué), je devrais avoir en résultat une variable de type jas_stream_t (dont je me servirai ensuite dans le code), un type prédéfini, ce qui me compliquerait la tâche d'avantage.

    Merci en tout cas

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Citation Envoyé par my_account Voir le message
    (n'est ce pas 4 octets par ligne, ou ceci diffère d'une mémoire à une autre?)
    Euh, il n'y a pas de concept de ligne dans la mémoire ...

    J'ai remplacé *buf par mon adresse physique, et ça a marché,
    mais je ne sais pas jusqu'à maintenant si la lecture de mes données se fait
    correctement ou non.
    Lisez une partie d'un fichier que vous connaissez, affichez les résultats et voyez si ça marche.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  8. #8
    Membre à l'essai
    Inscrit en
    Septembre 2011
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Septembre 2011
    Messages : 31
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Euh, il n'y a pas de concept de ligne dans la mémoire ...
    Je voulais dire, est ce que l'adresse dans la mémoire s'incrémente après chaque 4 octets lus? C'est dans ce contexte là.

    Citation Envoyé par LittleWhite Voir le message
    Lisez une partie d'un fichier que vous connaissez, affichez les résultats et voyez si ça marche.
    Il s'agit d'une image, et déjà pour l'affichage, il me faut un autre travail pour le faire.

  9. #9
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Citation Envoyé par my_account Voir le message
    Je voulais dire, est ce que l'adresse dans la mémoire s'incrémente après chaque 4 octets lus? C'est dans ce contexte là.
    Si l'incrémentation est "à la main", c'est à dire:
    Alors, l'incrémentation est égale à la taille en mémoire de la donnée pointée. Donc si on veut avancer octet par octet, on utilise un pointeur sur char.


    Il s'agit d'une image, et déjà pour l'affichage, il me faut un autre travail pour le faire.
    Si vous pouvez (mais je doute), vous n'avez qu'à réécrire un fichier et le comparer avec celui de base (ou envoyer par le réseau, ou autre encore).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. ouverture d'un fichier à partir de son chemin
    Par BenkessiratAmina dans le forum Entrée/Sortie
    Réponses: 46
    Dernier message: 26/06/2014, 21h30
  2. Récupérer le nom d'un fichier à partir de son chemin
    Par Jiraiya42 dans le forum Langage
    Réponses: 2
    Dernier message: 31/03/2007, 11h38
  3. obtenir la taille d'un fichier à partir de son URL
    Par djanos dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 23/02/2007, 00h22
  4. Réponses: 1
    Dernier message: 18/02/2007, 19h33
  5. [8086] Valeur dans un tableau à partir de son adresse
    Par dridri dans le forum x86 16-bits
    Réponses: 2
    Dernier message: 22/03/2006, 08h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo