Hallo,
auch wenn ich nicht mit AVR-Studio arbeite, vielleicht schon mal ein paar Hinweise.
Wenn Du schon mit einer Klasse arbeitest, kannst Du Dinge wie den Port als Membervariable der Klasse anlegen und diese im Konstruktor initialisieren. Die Init-Funktion kann dann eigentlich entfallen, diese Arbeit kann der Konstruktor übernehmen. Eine Write Funktion wäre dann eine Memberfunktion der Klasse und braucht gar nicht mehr so viele Parameter.
Bevor ich mir irgendwelche Beispiele aus den Fingern sauge, hier einfach Verweise auf ähnlichen Code für andere Controller:
Eine Klasse als Verpackung einer SPI-Schnittstelle
https://developer.mbed.org/handbook/SPI
Etwas effizienter sind Template-Parameter, wie hier bei einer Klasse für IOs
https://developer.mbed.org/users/Sis...7b2b3/FastIO.h
- - - Aktualisiert - - -
Hier als Ergänzung das Grundprinzip als Visual Studio Program
Code:
#include "stdafx.h"
class A
{
private:
volatile uint8_t* m_Port;
public:
A(uint8_t* p) : m_Port(p)
{}
void Write(uint8_t v)
{
*m_Port = v;
}
};
template<typename T, volatile T* port>
class B
{
public:
void Write(T v)
{
*port = v;
}
};
uint8_t x;
int _tmain(int argc, _TCHAR* argv[])
{
A a(&x);
B<uint8_t, &x> b;
a.Write(1);
b.Write(2);
return 0;
}
Lesezeichen