Forum: Compiler & IDEs "virtueller" Port?


von see4far (Gast)


Lesenswert?

Hallo zusammen!

Ich würde gerne virtuelle Ports erzeugen. Das heißt, die Bits einer
Variable entsprechen den Pinzuständen unterschiedlicher Ports.

Ich möchte z.B. die Pins PB1, PB2, PB3, PB5 von PORTB und die Pins PC0,
PC2, PC6, PC7 von PORTC zu einem neuen virtuellen PORT_1 zusammenfassen.
 Die Bits in PORT_1 entsprechen also den Bits aus den PORT-Registern.

Geht sowas? Wahrscheinlich nur ein bisschen Trickserei mit Pointern.
Aber wie? Würd mich freuen, wenn mir da jemand weiterhelfen könnte.

Viele Grüße
see4far

von see4far (Gast)


Lesenswert?

Hab mal gerade etwas im Forum rumgesucht. Hab ich mit unions eine
Chance?

mfg
see4far

von Sssssss (Gast)


Lesenswert?

Evtl kannst du sowas machen:

#define MYPORT ((PINB & 0x01)<<8 | (PINB & 0x04)<<7 | ....)

uint8_t bla;
bla = MYPORT;

von see4far (Gast)


Lesenswert?

ok... das wäre eine statische Lösung. Ideal wäre zwar eine dynamische,
aber es lässt sich erstmal damit leben.

Ist der Ansatz mit der union erfolgsversprechend oder eher nicht?
Soweit hab ich es mir schon überlegt:
1
union PIN {
2
  unsigned char *Byte;
3
  struct {
4
    unsigned char *P0:1;     
5
  unsigned char *P1:1;     
6
    unsigned char *P2:1;    
7
    unsigned char *P3:1;  
8
    unsigned char *P4:1;
9
    unsigned char *P5:1;
10
    unsigned char *P6:1;
11
    unsigned char *P7:1;
12
  } Bits;
13
};
14
15
union PIN PIN1;

Aber ich wüsste jetzt nicht, wie ich die Bits mit Pointer darein
kriege. Gibt's da einen Ansatz?

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

ich wüßte nicht wie du sowas realiseren könntest. Der Compiler müßte ja
wissen wie er den einen Zugriff auf die Variable in diverse
Hardwarezugriffe zerlegt. Das Beste wird sein wenn du dir zwei
Funktionen schreibst die den "verteilten" Zugriff abstrahieren.

Matthias

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

In C geht das definitiv nicht. In Ada sollte das Problem prinzipiell
lösbar sein (die Möglichkeiten zur Deklaration und bitgenauen
Adressierung lassen C uralt aussehen), allerdings handelt sich man
damit vermutlich eine Menge Overhead ein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.