www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Datentyp OCRx (AVR)?


Autor: Thomas K. (thkusch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Welchen Datentyp haben die OCRxx-Register eines 16-bit Timers bei einem 
ATMega?

Hier kriege ich die Warnung "initialization from incompatible pointer 
type":

volatile unsigned short *pusPWMReg;
pusPWMReg=&OCR1A;

Das hier funktioniert:
volatile unsigned char *pucPort;
pucPort=&PORTA;

Danke im Vorraus,

Gruss
Thomas

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#define pusPWMReg OCR1A

Falls Du wissen willst, wie so ein OCR1A genau aussieht, dann schau in 
die IO-Header vom betreffenden Chip :-)

HTH

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas K. schrieb:

> Hier kriege ich die Warnung "initialization from incompatible pointer
> type":
>
> volatile unsigned short *pusPWMReg;
> pusPWMReg=&OCR1A;
volatile uint16_t * pusPWMreg;

Autor: Chris L. (kingkernel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn es sich um einen 16bit Register handelt dann sind die Register auch 
16 bit breit. Sowas steht aber auch immer im Datenblatt!

Autor: Thomas K. (thkusch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

@g457: define ist nicht das was ich will. Der Variablen soll ein OCR zur 
Laufzeit zugewiesen werden. Wie der OCR1A aussieht, weiss ich. Die Frage 
war (genauer ausformuliert), welchen Datentyp, wenn nicht "volatile 
unsigned short*" haben unter WinAVR die 16-bit OCRs. Jede Zuweisung 
eines OCRs möchte ich nicht explizit casten.

@Johann: uint16_t ist die Abbildung von unsigned short. Das macht keinen 
Unterschied. "volatile unsigned char *pucPort;" funktioniert ja auch 
(ohne Compilerwarnung), obwohl es streng genommen "volatile uint8_t 
*pucPort;" heissen müsste.

@Christian: ich kann mit Deiner Aussage nicht wirklich was anfangen..

Der Code, der die Warnung bringt, sieht so aus:

typedef struct
{
  volatile unsigned char *pucPort;
  unsigned char ucPin;
  volatile unsigned short *pusPWMReg;
  unsigned char ucSPWMID;
} LIGHTIO;

static const LIGHTIO lightIO[25]={
  {&PORTB,_BV(PB5),&OCR1A, 0},
  {&PORTB,_BV(PB6),&OCR1B, 0},
  {&PORTB,_BV(PB7),&OCR3C, 0},
        ......};

Jedes OCR generiert die Warnung "initialization from incompatible 
pointer type".

Gruss
Thomas

Autor: Floh (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OCR ist doch definiert als sfr(adresse).
Theoretisch musst du die Adresse übergeben, und den Zugriff der Variable 
als special function deklarieren.

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> uint16_t ist die Abbildung von unsigned short. Das macht keinen
> Unterschied.

Doch, es macht einen Unterschied. Warum probierst du es nicht einfach 
erst mal, bevor du dagegen argumentierst?

Ein uint16_t geht auf ein unsigned int zurück. Und auch wenn es die 
gleiche Größe wie ein unsigned short hat, ist es aus Sicht des Compilers 
eben doch ein anderer Typ.

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.