Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
POINTEUR (C) sur plusieurs structures
Envoyé par: swatz

Bonjour
je voulais essayer de réussir tout seul , ..mais mes yeux clignotent confused smiley
Alors je me met a vos pieds lol
je programme un tachymetre en C avec SDCC des dels allument

je veux que le programme puisse etre modifiable par des gars qui programmes pas trop [comme moi]et qui veulent changer les plages de couleurs.
j'ai donc placer les bits utilisés dans une "matrice" .
(ce choix est aussi parce que je compte utilisé d'autres pic ,et je devrais sauter des pattes comme Rx,Tx ...)

typedef union {
// 1 , 2 , 3 , 4
union tach_GREEN = { PD2 ; PD3 ; PD4 ; PD5 }; //
union tach_ORANGE = { PD6 ; PD7 ; PB1 ; PB2 }; //
union tach_YELLOW = { PB3 ; PB4 ; PB5 ; PB6 }; //
union tach_RED = { PB7 ; PD1 ; PD0 ; PC_3 }; //
} TACH_BARGRAPH; // MBR-LSB

#############################################################
Pour info le header de mon pic16f877 est
// ----- PORTC bits --------------------
typedef union {
struct {
unsigned char RC0:1;
unsigned char RC1:1;
unsigned char RC2:1;
unsigned char RC3:1;
unsigned char RC4:1;
unsigned char RC5:1;
unsigned char RC6:1;
unsigned char RC7:1;
};
} __PORTC_bits_t;
extern volatile __PORTC_bits_t __at(PORTC_ADDR) PORTC_bits;

#ifndef NO_BIT_DEFINES
#define RC0 PORTC_bits.RC0
#define RC1 PORTC_bits.RC1
#define RC2 PORTC_bits.RC2
#define RC3 PORTC_bits.RC3
#define RC4 PORTC_bits.RC4
#define RC5 PORTC_bits.RC5
#define RC6 PORTC_bits.RC6
#define RC7 PORTC_bits.RC7
#endif /* NO_BIT_DEFINES */
##################################################
J'ai une certaine valeur de fréquence capté exemple :0x0FFF (GREEN ORANGE YELLOW)
je veux envoyé cette valeur aux différents bit présent dans ma matrice.
TACH_BARGRAPH = 0x0FFF puis chaque BIT des ports se redirigent;
Je voulais m'essayé avec des pointeurs ,mais je n'y arrive pas
Merci de m'aider.

Poste le Saturday 11 October 2008 05:20:07
Répondre     Citer    
Re: POINTEUR (C) sur plusieurs structures

A mon avis il te convient de passer plusieurs jours à lire :
* un bon livre sur les architectures de processeurs
* un bon livre sur la programmation en C.

Tes difficultés semblent conceptuelles, Il te manque des bases (qui ne sont pas liées à ton problème spécifique).

----

Basile STARYNKEVITCH

Membre de l'APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!

Projet logiciel libre: RefPerSys

Poste le Saturday 11 October 2008 09:01:18
Répondre     Citer    
Re: POINTEUR (C) sur plusieurs structures
Envoyé par: swatz2

Bon
je n'arrive pas a pointer vers le aaaa.bb ca bloque a . selon moi c'est que l'on ne peut pointer que sur un registre et pas sur le bit d'un registre .
Je continu néanmoins ma rechercher .
Je veux juste savoir si de 1 c'est possible sinon je fais de la maniere recursive

Rc5 = TACHBARGRAPH[1]
Rc6 = TACHBARGRAPH[2]

qui ne me parait pas tres beau , lol

@+

Poste le Saturday 1 November 2008 23:28:32
Répondre     Citer    
Re: POINTEUR (C) sur plusieurs structures
Envoyé par: abgech

Comme te le dis si bien Basile, il te manque des notions fondamentales en programmation C pour aborder ton problème. Par exemple, dans ce cas particulier, tu devrais maitriser les opérateurs de bit et de décalage (|, &, ^, ~, <<, >>) avant de t'intéresser aux pointeurs.

Comme j'imagine que tu es un étudiant (ton problème est assez typiquement un problème d'école), je pense que se serait te rendre un très mauvais service que de te rendre une solution toute prête d'un problème somme toute simple.
Cela te sera bien plus profitable si l'on te guide, par petites touches successives, vers une solution que tu trouveras toi-même.

Poste le Sunday 2 November 2008 06:56:25
Répondre     Citer    
Re: POINTEUR (C) sur plusieurs structures
Envoyé par: swatz3

ok abgech

c'est pas pour l'école, je suis dans un groupe de BAJA et je suis le seul gars de Genie Electrique les autres sont en mécanique . Hier des gars de 5eme session avait le meme probleme que moi . Dans mes cours j'ai déja utiliser ces opération de bit de décalage , mais je voulais pas avoir a les utilisés du gendre
RC2 =TACHBARGRAPH & 0x02
RE5 =TACHBARGRAPH & 0x04
(comme les exos que je faisait avec le port // )

si je peux savoir comprendre comment mettre tout les RC2 ,RC5 dans une tableau sans que ca me marque une faute , je réussi la manière que je veux

comme je dis je peux le faire comme ca

Rc5 = TACHBARGRAPH[1]
Rc6 = TACHBARGRAPH[2]
mais c'est vraiment pas comme ca que j'ai envi de le faire ,mes autres codes sont toujours de cette maniere et je vois que d'autres sont plus esthéquique avec des pointeurs , alors moi aussi je voudrais réussir a en utiliser , lol

Mais la question que je me pose depuis le debut = Peut-on pointer sur un bit d'une structure en utilisant la definition ??
#define RC0 PORTC_bits.RC0

Merci beaucoup

Poste le Sunday 2 November 2008 13:21:48
Répondre     Citer    
Re: POINTEUR (C) sur plusieurs structures
Envoyé par: abgech

Citation
swatz3
...
Mais la question que je me pose depuis le debut = Peut-on pointer sur un bit d'une structure en utilisant la definition ??
#define RC0 PORTC_bits.RC0...
La réponse est non. Parce que les adresses d'un processeur ne sont pas par rapport à un bit, mais par rapport à un mot.
Mot de 8 bits dans le cas des PC et ordinateurs d'usage généraux, mots de 32, 64, 128 voire 256 bits pour les ordinateurs à usage scientifique.

Poste le Sunday 2 November 2008 14:40:39
Répondre     Citer    
Re: POINTEUR (C) sur plusieurs structures
Envoyé par: swatz4

huhumm , MERCIi , je travaillais sur ca depuis que j'ai poster le message , et je me disais que p'tre c'était pas possible
bon bein je vais faire comme dab avec des & ,
comme quoi faut pas essayer de réduire plus ce qu,on sait deja faire.
chiao et merci pour la reponse rapide


Poste le Sunday 2 November 2008 15:02:02
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
POINTEUR (C) sur plusieurs structures
Pour poser vos questions sur les scripts shell, le Perl, le C, etc... Attention : nous ne sommes pas des spécialistes du dev, ce forum est juste pour de petites aides ponctuelles concernant le développement et les outils de développement.

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons