CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] problème de variable (incrémentation

sd460
sd460
Niveau 10
11 novembre 2008 à 22:12:58

bonjour, j'ai un problème avec une variable dans un programme qui refuse de s'incrémenter.... Je joins le code juste après.
Pour info c'est de la programmation d'un microcontroleur.
Bon le code est pourtant tout bete, mais je ne sais pas pourquoi cela n'incrémente pas. Dans le fichier include, la variable PORTB est définie avec un type "externe" donc normalement ca devrait incrémenter correctement, non :question:
Du coup portb refuse de s'incrémenter, et je ne vois pas pourquoi.

si vous avez une petite idée cela m'aidera beaucoup.

  1. include <p18f4620.h>

void wait(int cnt)

{

for (;cnt>0; cnt--);

}

void main(void)

{

int x;

char c=0;

TRISB = 0;

PORTB=0b00000001;

while(1)

{

if (PORTB==8) c++;

if (PORTB==1) c--;

if (!c) PORTB>>=1;

else PORTB<<=1;

if (PORTA&0x10) x= 20000;

else x=5000;

wait(x);

}

}

dnob700
dnob700
Niveau 10
11 novembre 2008 à 22:46:15

tu n'incrémente nulle part ta variable. Tu ne fait que la shifter avec un test de condition des plus étranges ... (elle va osciller entre 1, 2, 4 et 8 et repartir je dirais, si tu ne te trompe pas de sens).

Mais pour que ça marche, il faut que PORTB soit définit quelque part. Si tu n'a pas d'erreur à la compilation, je ne vois pas ce qui ne vas pas. Mais sinon, déclarer une variable extern en sufit pas, il faut qu'elle soit déclarer réellement quelque part. Par exemple, dans une bibliothèque que tu lie avec ton programme.

sd460
sd460
Niveau 10
12 novembre 2008 à 18:42:11

oui en fait je voulais dire que ma variable gardait toujours la meme valeur (qui est nulle).
Le fait que PORTB soit définie dans le header, n'est pas suffisant :question:
Il n'y a aucune erreur de compilation.

Iliah
Iliah
Niveau 10
14 novembre 2008 à 22:02:33

J'imagine que c'est du microcontrôlleur ou assimilé et que PORTB désigne le port idoine ? PORTB, c'est quoi dans les faits ? Une macro, un offset d'adresse ? Tu peux nous donner la ligne du header de la définition de PORTB ?

sd460
sd460
Niveau 10
15 novembre 2008 à 21:16:45

j'aurais dû commencer par là en effet...
PORTB désigne effectivement le portB du microcontroleur. Il est défini comme ceci dans le header :
extern volatile near unsigned char PORTB;

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment