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 :
- volatile int * mem = (int *) malloc(1);
- printf("start mem = %p\n\n",mem); // j'ai en général qqch qui vaut à peu près 0x0f00
- // je suppose, mais j'en sais rien du tout, que les adresses au dessous sont réservées..
- while ((unsigned int)mem < 0x08000000) {
- *mem = 0x55555555;
- if(*mem != 0x55555555) {
- printf("problem 5 at address %p\n", mem);
- }
- *mem = 0xaaaaaaaa;
- if(*mem != 0xaaaaaaaa) {
- printf("problem a at address %p\n", mem);
- }
- mem++;
- }
- free((int *)mem);
- 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