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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    Novembre 2007
    Messages
    123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 123
    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 confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2014
    Messages : 51
    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 confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 771
    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 771
    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