struct und pointer

Gast #263944
Lesenswert?
• ▲
▼
Hallo zusammen,

habe wieder mal ein schwieriges Problem, ein Wissender schüttelt
darüber  wahrscheinlich den Kopf ...

Ich möchte ein struct über den Addressbereich von Port B eines ATmega
32 legen und habe mir dazu folgendes zusammengebastelt:

#include "Time.h"

 struct Io{
  volatile char port;
  volatile char ddr;
  volatile char pin;
 };

int main()
{
  Io *PortB = (Io*)(0x16);
  PortB->ddr = 16+32+64+128;    // upper bits output: LEDs

  init_wait();

  while (true)
  {
    PortB->port = 0;
  time_s(1);
  PortB->port = 16+32+64+128;
  time_s(1);
  }
}

Kompiliert wird alles, nur die probeweise angeschlossene LED bleibt
aus. (Die time_s() hat an anderer Stelle schon ihre Funktionsfähigkeit
bewiesen.)

Ideen?
Vielen Dank
Gast #263945
Lesenswert?
• ▲
▼
Schau mal die Aufteilung des Dataspce an. Wenn Du auf die Register als
memory zugreifst, dann ist die Adresse von PORTB nit 16hex, sondern
36hex.
Die unteren 32 Bytes sind die Memory-Space-Adresse der CPU-Register
0-31.

Viele Grüße, Stefan
Gast #263947
Lesenswert?
• ▲
▼
Vom Prinzip her stimmt das, was Du getan hast. Praktisch bedeutet das:

Port->port liegt auf 0x16
Port->ddr  liegt auf 0x17
Port->pin  liegt auf 0x18

Das stimmt aber nicht mit den definitionen für den Chip überein (Auszug
aus (iom32.h, GCC)
/* Port B */
#define PINB    _SFR_IO8(0x16)
#define DDRB    _SFR_IO8(0x17)
#define PORTB   _SFR_IO8(0x18)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.