Hallo,
ich habe mich bei einem PIC-Projekt in deren Bit-Zugriff "verliebt" und
hätte den natürlich gerne auf andere Projekte übertragen. Wenn ich mich
nicht irre gehen die Xmegas z.B. auch in die Richtung, aber jetzt
überlege ich, ob ich ein bestehendes Projekt nicht von "grausam" nach
schön umziehen soll. Die PIC-Strukturen sehen so aus:
1 | extern volatile unsigned int IFS1 __attribute__((__sfr__));
|
2 | typedef struct tagIFS1BITS {
|
3 | unsigned SI2C1IF:1;
|
4 | unsigned MI2C1IF:1;
|
5 | unsigned CMIF:1;
|
6 | unsigned CNIF:1;
|
7 | unsigned INT1IF:1;
|
8 | unsigned :4;
|
9 | unsigned OC3IF:1;
|
10 | unsigned OC4IF:1;
|
11 | unsigned T4IF:1;
|
12 | unsigned T5IF:1;
|
13 | unsigned INT2IF:1;
|
14 | unsigned U2RXIF:1;
|
15 | unsigned U2TXIF:1;
|
16 | } IFS1BITS;
|
17 | extern volatile IFS1BITS IFS1bits __attribute__((__sfr__));
|
In der Renesas iodefine.h steht:
1 | typedef struct {
|
2 | unsigned char no0 :1;
|
3 | unsigned char no1 :1;
|
4 | unsigned char no2 :1;
|
5 | unsigned char no3 :1;
|
6 | unsigned char no4 :1;
|
7 | unsigned char no5 :1;
|
8 | unsigned char no6 :1;
|
9 | unsigned char no7 :1;
|
10 | } __BITS8;
|
11 |
|
12 | union un_p0 {
|
13 | unsigned char p0;
|
14 | __BITS8 BIT;
|
15 | };
|
16 |
|
17 | #define P0 (*(volatile union un_p0 *)0xFFF00).p0
|
18 | #define P0_bit (*(volatile union un_p0 *)0xFFF00).BIT
|
Jetzt würde ich gerne wissen, ob so eine Umstellung
- ein Kinderspiel
- was größeres
ist, oder überhaupt nicht geht, weil man dabei ein Fass nach dem anderen
aufmacht und man letztlich nach ein paar Versuchen eh nur frustriert das
Handtuch wirft.
Danke,
Thorsten