mikrocontroller.net

Forum: Compiler & IDEs "virtueller" Port?


Autor: see4far (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: see4far (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab mal gerade etwas im Forum rumgesucht. Hab ich mit unions eine
Chance?

mfg
see4far

Autor: Sssssss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Evtl kannst du sowas machen:

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

uint8_t bla;
bla = MYPORT;

Autor: see4far (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
union PIN {
  unsigned char *Byte;
  struct {
    unsigned char *P0:1;     
  unsigned char *P1:1;     
    unsigned char *P2:1;    
    unsigned char *P3:1;  
    unsigned char *P4:1;
    unsigned char *P5:1;
    unsigned char *P6:1;
    unsigned char *P7:1;
  } Bits;
};

union PIN PIN1;

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

Autor: Μαtthias W. (matthias) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.