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 :

Les pointeurs global


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 74
    Par défaut Les pointeurs global
    Bonjour, j'ai rencontré un petit problème avec un pointeur global.
    Lorsque je déclare un pointeur glabal 'p', par exemple

    unsigned char* p = (unsigned char*)0xB8000;

    et que je lu affecte 'A'

    *p = 'A';

    le caractère 'A' ne se trouve pas à l'adreese 0xB8000 alors que si 'p' et local à une fonction, cela fonctionne !!!!!

  2. #2
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut,

    Qu'est ce qui te fait croire qu'on a le droit d'écrire à cette adresse?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 74
    Par défaut
    Je suis en ring 0 ( c'est a dire que j'ai le control total de la machine ).
    Enfin, je dévlope un mini OS !
    L'adresse 0xB8000 est le début de la mémoire video en mode console.

  4. #4
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Essaye de rajouter le qualificateur "volatile" dans le type du pointeur, ça indique au compilateur que la zone pointée peut être modifiée par d'autres biais que le programme lui même (et donc d'acceder systematiquement à la zone pointée quand on le demande).
    A mon avis, ça doit marcher avec une globale car le compilateur ne doit pas faire d'optimisation pour l'accès à la zone pointée, mais c'est un hasard

  5. #5
    Membre confirmé
    Homme Profil pro
    Software engineer
    Inscrit en
    Août 2008
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Software engineer

    Informations forums :
    Inscription : Août 2008
    Messages : 139
    Par défaut
    as tu allouer correctement avec malloc ?
    peux tu envoyer le code ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 74
    Par défaut
    je ne peut pas allouer la mémoire dynamiquement ,car mon système ne le comprend pas pour l'instant !!! Mais ca ne doit pas avoir d'importance car si le pointeur est local, le caractaire se trouve en 0xB8000 et il est afficher à l'écran !! Pour ce qui est de volatile je vais aseiller ce soir et pour le code ca devra attendre un peu car, je ne suis pas chez moi !! DSL

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Vérifie que cette variable n'est pas occultée par une autre de portée réduite.
    Je te conseille de lui donner un nom plus "parlant", comme g_ecran.

    Et aussi, vérifie que ta variable est bien initialisée: Teste sa valeur dans ta fonction.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 479
    Par défaut
    Citation Envoyé par spiner900 Voir le message
    L'adresse 0xB8000 est le début de la mémoire video en mode console.
    C'était le début de la mémoire vidéo. Avec le matériel moderne, rien ne dit qu'elle y soit toujours mappée par défaut (peut-être que le BIOS le fait quand même, ça fait bien longtemps que je n'ai pas essayé).

    En outre, il faut vérifier dans quel mode tu travailles, même en mode protégé, les accès mémoire se font toujours relativement à un segment qui, lui, doit être proprement initialisé. Rien ne dit a priori que ton programme C se réfère directement à la mémoire physique, même en ring 0.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 74
    Par défaut
    pour le nom du pointeur il s'appelle p_screen dans mon code ... 'p' n'est qu'un exemple. Pour ce qui est de la mémoire .. oui elle est encore mapper la car si p_screen et local a une fonction, je peu afficher des caractère en mode réel et protégé..... Et c'est assez dure de tester sa valeur car je ne peut rien afficher pour l'instant .... j'ai désassembler mon code et jai remarquer que lorsque la variable est global, elle vaut 0x0080B000 et si elle est local je vois MOV ESX, 0xB8000 .....

  10. #10
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 479
    Par défaut
    Citation Envoyé par spiner900 Voir le message
    pour le nom du pointeur il s'appelle p_screen dans mon code ... 'p' n'est qu'un exemple. Pour ce qui est de la mémoiré .. oui elle est encore mapper la car si p_screen et local a une fonction, je peu afficher des caractère en mode réel et protégé.....
    Si tu le fais depuis un programme fonctionnant dans une boîte D.O.S., par exemple, le résultat sera émulé.

    Dans quelles conditions lances-tu ton programme ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. pointeurs, toujours les pointeurs :/
    Par giviz dans le forum C
    Réponses: 16
    Dernier message: 08/10/2003, 15h02
  2. Pb de débutant sur les pointeurs!!!
    Par benji17c dans le forum C
    Réponses: 6
    Dernier message: 30/09/2003, 17h50
  3. [DTS] Passer les var globales d'un lot à un autre
    Par David K. dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 25/07/2003, 12h39
  4. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 13h59
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

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