begin process at 2012 05 30 13:25:55
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

test RAM


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

test RAM

mardi 29 janvier 2008 à 11:31:04 | test RAM

parain74

Bonjour, j'ai trouvé un programme embarqué afin de tester une ram externe, précisémment une cypress de 128KO pouvez vous m'expliquer le programme silvouplait

/*********Ecriture à toutes les adresses***********************/
/*********Pour vérification de la RAM**************************/

void test_ram_lecture_ecriture(void)
{
 __far unsigned char *ram_ptr; //pointeur sur la RAM 128 Ko
 unsigned long adr;
 unsigned char i;
 unsigned int val_1;
 unsigned char erreur=0;

/***Ecriture dans la RAM*********************************/
/***à toutes les adresses********************************/

 for(adr=0;adr<0x20000;adr++)        // toute la RAM   0
 {
  ram_ptr= (__far unsigned char *) (DEBUT_EXT_RAM + adr);  
  *ram_ptr=0; 
 }
 
 i=0;
 for(adr=0;adr<0x20000;adr++)
 {
  ram_ptr=DEBUT_EXT_RAM + (__far unsigned char *)adr;  /*Modif LME ajout du (__far unsigned char *) Ecriture à toutes les adresses*/
  *ram_ptr=i; 
  i++;
 }

/***Relecture des valeurs ecrites***********************/
/********************************************************/

 i=0;

 for(adr=0;adr<0x20000;adr++)
 {
  ram_ptr=DEBUT_EXT_RAM + (__far unsigned char *)adr;  /*Modif LME ajout du (__far unsigned char *) Ecriture à toutes les adresses*/
  val_1=*ram_ptr;
  if(val_1 != i)
  {
   erreur=1;
   Envoie_chaine_uart1((const char *)"Probleme RAM : Addresse ");
   send_char_hexa_uart1( (char*) (adr>>8) );//adresse poid fort
   send_char_hexa_uart1( (char*) adr );     //adresse poid faible
   Envoie_chaine_uart1((const char *)"\n\r");
   Envoie_chaine_uart1((const char *)"Valeure ecrite : ");
   send_char_hexa_uart1( (char*) &i );  //adresse poid fort
   Envoie_chaine_uart1((const char *)"Valeure lue : ");
   send_char_hexa_uart1( (char*) &val_1 );     //valeur lue poid faible
   Envoie_chaine_uart1((const char *)"\n\r");
  }
  i++;  
 }

  // test pou détecter un CC ou CO sur une piste d'adresse
 for(adr=0;adr<0x20000;adr++)
 {
  ram_ptr=DEBUT_EXT_RAM + (__far unsigned char *)adr;   /*Modif LME ajout du (__far unsigned char *) Ecriture à toutes les adresses*/
  *ram_ptr=0;             // Toute la RAM à 0
 }

 adr =1;
 i=1;              // seules les adresses avec un seul 1 dans l'adresse sont ré-écrit
 while(adr<0x20000)
 {
  ram_ptr=DEBUT_EXT_RAM + (__far unsigned char *)adr;  /*Modif LME ajout du (__far unsigned char *) Ecriture à toutes les adresses*/
  *ram_ptr=i; 
  i++;
  adr = (adr<<1);
 }
 
 adr =1;
 i=1;
 while(adr<0x20000)
 {
  ram_ptr=DEBUT_EXT_RAM + (__far unsigned char *)adr;  /*Modif LME ajout du (__far unsigned char *) Ecriture à toutes les adresses*/
  val_1=*ram_ptr;
  if(val_1 != i)
  {
   erreur=1;
   Envoie_chaine_uart1((const char *)"Probleme RAM : Addresse ");
   send_char_hexa_uart1( (char*) (adr>>8) );//adresse poid fort
   send_char_hexa_uart1( (char*) adr );     //adresse poid faible
   Envoie_chaine_uart1((const char *)"\n\r");
   Envoie_chaine_uart1((const char *)"Valeure ecrite : ");
   send_char_hexa_uart1( (char*) &i );  //adresse poid fort
   Envoie_chaine_uart1((const char *)"Valeure lue : ");
   send_char_hexa_uart1( (char*) &val_1 );     //valeur lue poid faible
   Envoie_chaine_uart1((const char *)"\n\r");
  }
  i++;  
  adr = (adr<<1);
 }
 
 adr = 0;
 ram_ptr=DEBUT_EXT_RAM + (__far unsigned char *)adr;  /*Modif LME ajout du (__far unsigned char *) Ecriture à toutes les adresses*/
 val_1=*ram_ptr;
 if(val_1 != 0)           // on vérifie que l'adresse 0 est toujours à 0
 {
  erreur=1;
  Envoie_chaine_uart1((const char *)"Probleme RAM : Addresse ");
  send_char_hexa_uart1( (char*) (adr>>8) );//adresse poid fort
  send_char_hexa_uart1( (char*) adr );     //adresse poid faible
  Envoie_chaine_uart1((const char *)"\n\r");
  Envoie_chaine_uart1((const char *)"Valeure ecrite : ");
  send_char_hexa_uart1( (char*) &i );  //adresse poid fort
  Envoie_chaine_uart1((const char *)"Valeure lue : ");
  send_char_hexa_uart1( (char*) &val_1 );     //valeur lue poid faible
  Envoie_chaine_uart1((const char *)"\n\r");
 }

 // fin test CC ou CO sur une piste d'adresse

 if(erreur==0)
 {
  Envoie_chaine_uart1((const char *)"RAM OK");
  Envoie_chaine_uart1((const char *)"\n\r");
 } 
}


/********************************************************************/
/************FONCTION DE TEST DE LA RAM******************************/
/********************************************************************/

void Test_RAM(void)
{
 test_ram_lecture_ecriture();

mardi 29 janvier 2008 à 12:09:56 | Re : test RAM

DeAtHCrAsH

Salut,
C'est pas très compliqué en plus il y a des commentaires.

Ce programme écrit des données dans la RAM et essaye de les relire ensuite pour s'assurer qu'il n'y a pas eu d'erreur.
Toutes les boucles vont de 0 à 0x20000 ( soit 131072 en décimal car 137072 octets = 128Ko).

Dans la 1ère boucle il va initialiser tous les espaces mémoire a zéro.
Dans la 2ère boucle il va ecrire 1,2,3,4,5,.... dans tous les espaces mémoire de la RAM.
Dans la 3ième boucle il va lire chacun des emplacements mémoire pour voir si ce qui a été ecrit vaut bien 1,2,3,4,5,....

Et ainsi de suite, il va écrire différente donnée en se basant sur certains critères.

La constanteDEBUT_EXT_RAM correspond au premier emplacement mémoire lisible. 



Shell
mardi 29 janvier 2008 à 12:15:32 | Re : test RAM

parain74

pourquoi (__far unsigned char *)
mardi 29 janvier 2008 à 14:27:25 | Re : test RAM

DeAtHCrAsH

(__far unsigned char *) permet de caster l'itérateur de boucle "i" en pointeur de type char.
Dans ton exemple on souhaite parcourir chaque zone mémoire de 1 en 1 donc on choisies d'utiliser des char car la taille d'un char vaut 1 octet.
Pour ce qui est de far c'est une vieille convention pascale utilisée sur les systèmes 16bits. 

Shell
mardi 29 janvier 2008 à 17:37:26 | Re : test RAM

parain74

Il a donc mélanger du langage C avec du PASCAL?

mercredi 30 janvier 2008 à 15:37:25 | Re : test RAM

DeAtHCrAsH

Non le far est juste une convention pascale dont le language C s'est inspiré.

Shell


Cette discussion est classée dans : ram, char, unsigned, adr, uart1


Répondre à ce message

Sujets en rapport avec ce message

pb avec conio je cher cherche l'erreur( j'ai merde sur le mess precedent) [ par kin ] portpia.cpp#include"PortPiaPc.h"void main(){ PortPiaPc inst; inst(0x320,0x0f);}PortPiaPc.cpp#include "PortPiaPc.h"#include "conio.h"PortPiaPc::PortPia Pointeurs sur des tableaux de plusieurs dimensions [ par ProGamer ] J'ai besoin de faire des pointeurs sur ce genre de tableaux. Voici comment je m'y prends (et surtout, voici comment ça ne marche pas...):unsigned char char* to unsigned char* [ par rodrigos ] comment peut-on convertir un char* en unsigned char*?à quoi correspond un unsigned char*?Merci pour votre aide!! Comment concertir Ansistring en unsigned char*????? [ par asik38 ] Ansistring x;unsigned char str[100];str[100]=x;??????Merci!!! HELP je ne comprend pas pourquoi mon programme plante [ par surfeurnet ] j'ai developpper le programme suivant sous dev-cpp et lorsque je l'exécute il plante. Je pense que c'est un problème avec les constantes c ou adr mais pb avec variable [ par jeffise57 ] Please aidez moiJe reçoit comme arugument du fonction des variables unsigned char* et je doit passer dans une deuxième fonction les même arguments mai Sniffing - raw socket [ par krum ] J'ai essayé de coder un programme capable de me donner la description de l'en tete IP et TCP des packets que je reçois d'une certaine IP,mais lorsque Conversion de unsigned char en float (17.6E) [ par lemenager ] Bonjour,Je dois lire un fichier binaire dans lequel il y a des float en format (17.6E). J'ai l'impression que je suis oblige de les lires en unsigned struct [ par ready4 ] Je ne sais pas comment initialiser mes moteurs //intialisation moteursM1 = {2, 1, 1, 2, 0, 0, 120};M2 = {8, 4, 4, 8, 0, 0, 80};M3 = {32, 16, 16, 32, 0 transformer un tableau 2d en image bitmap [ par gyzmo1 ] Bonjour a tous, voilà mon problème, je suis en train de mettre en place une méthode de comparaison de signature manuscrites. Cette méthode s applique


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,279 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales