Datentyp OCRx (AVR)?

OP #1786005
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
OP #1786882
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
#1787425
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren