ungültige Konvertierung von volatile uint8_t* zu uint8_t*

Ich versuche eine Bibliothek in C++ für den AVR. Die Idee ist, eine einfache Möglichkeit zu konfigurieren, welche pins du nutzen, auf jedem Gerät.
Dies ist die Bibliothek:

class PINS{
public:
//ATTRIBUTES
uint8_t* DDRaddr;
uint8_t* PORTaddr;
uint8_t* PINaddr;
int pinnum;
//METHODS
void usepin(volatile uint8_t *pin, int num);};

void PINS::usepin(volatile uint8_t *pin, int num){
this->pinnum=num;
if(pin==&PORTB){
    this->DDRaddr=&DDRB;
    this->PINaddr=&PINB;
    this->PORTaddr=&PORTB;}
if(pin==&PORTC){
    this->DDRaddr=&DDRC;
    this->PINaddr=&PINC;
    this->PORTaddr=&PORTC;}
if(pin==&PORTD){
    this->DDRaddr=&DDRD;
    this->PINaddr=&PIND;
    this->PORTaddr=&PORTD;} 
return;}

Und das ist, was es fordert:

PINS RS;
RS.usepin(&PORTC, 0);

Nun, das ist, wie ich dachte, dass es funktionieren würde:

  1. Schreiben z.B. "PINS RS;" erstellen Sie eine Instanz der Klasse STIFTEN; eine neue pin mit der Bezeichnung RS.
  2. Schreiben "RS.usepin(PORTB,0);" konfigurieren der RS-pin auf PORTB0 der MCU.
  3. Mit RS.DDRaddr für die DDR, RS.PINaddr für PIN und RS.PORTaddr für PORT-register
  4. Mit RS.pinnum für die pin-Nummer; z.B.: RS.DDRaddr|=(1<

Wenn ich versuche, es zu bauen, im Atmel Studio habe ich die folgende Fehlermeldung für jede Zeile wie diese: "this->DDRaddr=&DDRB;" Die Fehlermeldung lautet:

Fehler 1 ungültige Konvertierung von volatile uint8_t* zu uint8_t*

Es verwendet, um zu arbeiten, bevor ich aus uint8_t* DDRaddr eine Klasse Mitglied. Ich kann nicht verstehen, was das problem ist, ich konnte nicht eine Aussage von ähnlich - aber nicht ganz das gleiche - Fragen.
Gibt es jemanden, wer könnte eine Idee haben, was ist falsch an diesem code?

  • Warum kannst du nicht erklären die Mitglieder volatile wie gut?
  • Genau wie du kann nicht implizit entfernen constness, das gleiche gilt für die Volatilität.
  • Nicht zu vergessen sind "Schnappschüsse" der flüchtige pins. Der Begriff volatile H. die Werte ändern sich mit der Mittel außerhalb der Programmsteuerung.
  • Durch die Art und Weise, können Sie einige text-Raum und die Eingabe mit dem Zugriff auf die Elemente direkt anstatt mit den this-> syntax.
  • Ich verstehe nicht, was Ihr Ziel! Ich finde DDRn, PINn-und PORTn sehr klar. Was ist ein Beispiel für die Funktionalität Ihrer Klasse bieten? Ich denke, dass AVRs sind micros und jede Funktion wird eingeführt in eine FW verwendet Speicher, die verwendet werden könnten, zu verwalten, die Funktionalität, die wir wollen, zu entwickeln. Die Einführung von Funktionen, die die Verwendung von Sequenzen, wenn und Zweig, neben der Verschwendung von Speicher, kann zu Verzögerungen führen. AVRs sind nicht 64-bit-CPU mit 4 Gb Arbeitsspeicher!!! 🙂
  • Sie können direkt über die Speicher-Abfälle Sergio, es wird sich zeigen, in progress... Alles, was ich tun sollte, ist eine elegante Möglichkeit der Einrichtung die AVR pins man verwenden für ein externes Gerät. Ich konnte einfach #define RSport PORTB, #define RSpin PINB und so weiter... Einfach Experimentieren, wenn es gibt ein einfacher Weg...
  • vielen Dank für all die Hinweise. Ja das problem war die Volatilität. Ich erklärte den Mitgliedern, wie volatil es jetzt funktioniert.
  • Matthews: habe ich gemacht, danke.

Schreibe einen Kommentar