Bonjour,
je vous écris suite à un problème que j'ai concernant un programme que j'ecris en C pour un microcontrolleur PIC.
Le problème ne concerne pas forcement le programme en lui même pour lequel je pense être ok mais plutôt pour pouvoir accéder a une structure définie dans un header relatif au microcontrolleur.
Sur ce microcontrolleur sont definis plusieurs ports (de sortie ou entree peu importe) par des champs de bits. On peut y accéder par un unsigned char (8bits) ou alors bit a bit par les noms associés.
Mon probleme etait que je voulais pouvoir avoir un tableau de pointeurs vers ces bits (pas forcement du meme port, pas forcement tous les bits)... j'ai vite compris que c'etait impossible et je me suis tourné vers la solution du pointeur vers le port (le champ entier, unsigned) puis un chiffre qui designait le bit pour pouvoir faire mes decalages et comparaisons en consequence...
Cette solution fonctionne mais coute cher en instructions et memoire.
Quelqu'un d'autre sur un forum m'a proposé une solution a base de macros dans le style :
dans lesquels LATCbits et LATBbits representent les champs de bits (mes ports) et LATC0 LATC1 LATB0 representent les bits (un seul pin du port) qui m'interressent dans ces champs respectifs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #define PWM_PIN0 LATCbits.LATC0 #define PWM_PIN1 LATCbits.LATC1 #define PWM_PIN2 LATBbits.LATB0 #define PWM_PIN_VAL(x) PWM_PIN#x
Pour y acceder j'utiliserais la macro PWM_PIN_VAL(x) qui alors me redirigerait vers PWM_PIN0 1 ou 2 selon la valeur de x...
La solution parait ideale mais j'avoue ne pas arriver a la mettre en place et surtout je doute qu'elle soit possible du point de vue de la conception et de comment le compilateur va gerer ca... J'avoue j'ai toujours néglige l'apprentissage des macros mais maintenant qu'elles pourraient m'etre utile je le regrette
Je ne trouve pas non plus d'exemple (avec mon pote google) qui utilise une macro a parametre pour en appeler une autre...
Si quelqu'un pouvait me venir en aide sur ce point je vous serait tres reconnaissant... merci de votre aide![]()
Partager