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 :

boucle apparemment partielle


Sujet :

C

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 46
    Points
    46
    Par défaut boucle apparemment partielle
    Bonjour,
    je lis des octets dans une mémoire et je veux tester un seul bit. On m'a conseillé une méthode et voilà mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #include <stdio.h>
    #include "system.h"
     
    int main()
    {
      int *pmem;
      int i, k;
      k=0;
      for (i=0; i<600;i++)
      {
    	  pmem=0x80000000|ONCHIP_MEMORY2_0_BASE+i;
    	  if ((*pmem>>1)&1==1)
    	    k++;
      }
      printf("k = %u; i = %u\n", k, i);
      return 0;
    }
    J'ai essayé aussi de modifier la condition de test avec
    et je m'attendais à ce que la somme des résultats des deux programmes fasse 600 or ce n'est pas le cas : j'ai 26+0 !
    C'est où que je me trompe ?
    Merci.

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 51
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    Tu veux faire quoi exactement? faire des tests bit à bit dans ta zone mémoire? (et non "tester un seul bit" )

    et je m'attendais à ce que la somme des résultats des deux programmes fasse 600 or ce n'est pas le cas : j'ai 26+0 !
    C'est où que je me trompe ?
    La somme des variables tu veux dire?
    Je ne comprends pas complètement ton algo faute de connaître ONCHIP_MEMORY2_0_BASE.
    Mais pour moi ton i est forcément à 600 après ton for et pour ton k ça dépend du contenu de ta mémoire.

    D'ailleurs c'est peut-être une méconnaissance du C de ma part mais c'est possible d'accéder à un emplacement en mémoire de cette manière sans allocation? Je me serais attendu à ce que ça segfaulte personnellement, mais si ce n'est pas le cas alors c'est juste quelque-chose que je ne connais pas.

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 630
    Points : 10 556
    Points
    10 556
    Par défaut
    Citation Envoyé par vmonteco Voir le message
    D'ailleurs c'est peut-être une méconnaissance du C de ma part mais c'est possible d'accéder à un emplacement en mémoire de cette manière sans allocation? Je me serais attendu à ce que ça segfaulte personnellement, mais si ce n'est pas le cas alors c'est juste quelque-chose que je ne connais pas.
    Peut-être que ce n'est plus le cas, mais le C alloue de façon contiguë les variables d'un bloc

    Donc, en prenant l'adresse de la première variable et une simple incrémentation "binaire" (et peut-être avoir une sentinelle pour t'arrêter), tu peux parcourir "ta mémoire".

    Édit: Avec gcc, il faut tenir compte de l'ordre des déclarations des variables qui semblent être de droite à gauche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    int main() {
        short tab[] = {25, 39, 56, 71, 182, 91, 2, 43, 111, 45};
        short i = 0, j = 25, k = 12;
     
        short* cur = &tab[0];
     
        for(; (*cur) != 0; ++cur) {
            printf("%d\n", (*cur));
        }
     
        return 0;
    }

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  2. boucle partielle pour insertion virgule
    Par olivier80 dans le forum Langage
    Réponses: 3
    Dernier message: 10/09/2006, 19h55
  3. [directsound] boucle de traitement de son
    Par gargle dans le forum DirectX
    Réponses: 5
    Dernier message: 24/03/2003, 10h47
  4. Sortir d'un progamme qui boucle ou qui refresh
    Par mikevador02 dans le forum C
    Réponses: 12
    Dernier message: 14/12/2002, 09h38
  5. Réponses: 2
    Dernier message: 29/05/2002, 20h43

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