Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1946 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [résolu] question bête sur un pointeur..

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[résolu] question bête sur un pointeur..

n°2110475
abaddon200​2
Posté le 09-11-2011 à 11:19:35  profilanswer
 

Hello,
 
voilà ma situation. J'ai 128 MB de DDR3 situés de l'adresse 0x0 à l'adresse 0x07ffffff et 128 kB de SRAM situés de l'adresse 0x8000000 à l'adresse 0x0801ffff.
 
Le code de mon programme démarre sur la SRAM et je veux parcourir ma DDR. Je fais alors un truc du genre :

Code :
  1. volatile int * mem = (int *) malloc(1);
  2. printf("start mem = %p\n\n",mem); // j'ai en général qqch qui vaut à peu près 0x0f00
  3. // je suppose, mais j'en sais rien du tout, que les adresses au dessous sont réservées..
  4. while ((unsigned int)mem < 0x08000000) {
  5. *mem = 0x55555555;
  6. if(*mem != 0x55555555) {
  7.  printf("problem 5 at address %p\n", mem);
  8. }
  9. *mem = 0xaaaaaaaa;
  10. if(*mem != 0xaaaaaaaa) {
  11.  printf("problem a at address %p\n", mem);
  12. }
  13. mem++;
  14. }
  15. free((int *)mem);
  16. printf("memory test passed\n" );

Ce code fonctionne bien et j'ai mon memory test passed qui s'affiche, mais toutefois, j'ai systématiquement une erreur à la fin du test pour une adresse qui vaut étrangement 0xaaaaaaaa.  

problem 5 at address 0xaaaaaaaa
problem a at address 0xaaaaaaaa
memory test passed

Cependant, c'est normal qu'il n'arrive pas à lire à cette adresse vu qu'elle n'existe pas.
 
Est-ce que quelqu'un pourrait m'expliquer pourquoi mem prend la valeur 0xaaaaaaaa avant de quitter ma boucle while ?
 
merci d'avance.
 
Abaddon2002


Message édité par abaddon2002 le 09-11-2011 à 13:32:06
mood
Publicité
Posté le 09-11-2011 à 11:19:35  profilanswer
 

n°2110494
h3bus
Troll Inside
Posté le 09-11-2011 à 13:23:25  profilanswer
 

Ton code me semble correct...
 
Par contre, rien à voir avec ton problème, mais pourquoi tu utilise un malloc? Si ton code est en SRAM tu peux sans te poser de question balayer ta DDR de 0 à son adresse max.
 
Deuxième remarque: évite les cast quand ils ne servent à rien.


---------------
sheep++
n°2110495
abaddon200​2
Posté le 09-11-2011 à 13:23:59  profilanswer
 

Bon en fait j'ai trouvé... c'était bête..
 
Je ne sais pas pourquoi mais si j'affiche cela :

Code :
  1. printf("problem 5 at address %p\n", &mem);

à la place de cela :

Code :
  1. printf("problem 5 at address %p\n", mem);

J'ai bien l'adresse qui s'affiche et qui est inférieure à 0x08000000. Mon octet qui posait problème était du au fait que j'avais dans mon code une autre variable de 8 bits déclarée à cet endroit.. En la commentant pour faire mon test, tout se passe correctement.
 
edit:
 
pour les casts, c'est parce que sinon j'ai des warnings et la compilation s'arrête (j'utilise l'option -Werror de gcc) sinon j'ai regardé, les adresses 0x0 à 0x1f sont réservées pour le boot, et après oui, que j'utilise un malloc ou pas ça ne change rien... je peux affecter directement une adresse au pointeur sans problèmes..


Message édité par abaddon2002 le 09-11-2011 à 13:27:13

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [résolu] question bête sur un pointeur..

 

Sujets relatifs
question sur la description structurelle en vhdlQuestion : une personne dans plusieurs directions = liaison ?
mysql UTF8 questionQuestion Arborescence Unix !!
[Résolu] Question sur l'optimisation pour compter le nombre de lignequestion d'héritage et polymorphisme
Question Bases de données des banquesQuestion de modélisation
Problème core dumped sur pointeur de charErreur sur pointeur sur int
Plus de sujets relatifs à : [résolu] question bête sur un pointeur..


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR