En raison de limitations de conception, j'ai une ligne d'adresse pour un contrôleur de mémoire réparti sur 3 ports différents d'un PIC 18F4550. Cartographie:PIC18 Lecture/écriture de données lors de la division entre les ports
#define A0 PORTBbits.RB2
#define A1 PORTBbits.RB3
#define A2 PORTBbits.RB4
#define A3 PORTBbits.RB5
#define A4 PORTAbits.RA0
#define A5 PORTAbits.RÄ1
#define A6 PORTAbits.RÄ2
#define A7 PORTAbits.RÄ3
#define A8 PORTAbits.RÄ4
#define A9 PORTAbits.RÄ5
#define A10 PORTEbits.RE0
#define A11 PORTEbits.RE1
#define A12 PORTEbits.RE2
Je voudrais accéder à ce que une variable seule adresse, et ont essayé d'utiliser un syndicat pour le faire, mais simplement obtenir une « erreur de syntaxe » avec:
union
{
struct
{
A0 :1;
A1 :1;
A2 :1;
A3 :1;
A4 :1;
A5 :1;
A6 :1;
A7 :1;
A8 :1;
A9 :1;
A10 :1;
A11 :1;
A12 :1;
};
} ADDRESS;
Comment est-ce que je vais faire ça?
Non, cela ne va pas fonctionner - vous ne pouvez pas utiliser un syndicat pour le faire. Quelle que soit la solution que vous avez trouvée, j'ai peur que ça devienne laid. Vous aurez probablement besoin d'une ou plusieurs macros ou fonctions pour convertir entre les adresses et les différents bits de port. –
Ok, comme je le soupçonnais, un peu de décalage et de masquage seront nécessaires. Je vais y aller demain et poster une réponse. –