渡すことができる変数として AVR ポートを使用することは可能ですか?
例えば
LED myLed(PORTA,7); //myLED hooked to PORTA, Pin 7
LED を任意の PORT / ピンの組み合わせにできるようにしたいので、ハードコーディングはしたくありません。
PORT は次のように定義されていることに注意してください。
#define PINA _SFR_IO8(0x00)
#define DDRA _SFR_IO8(0x01)
#define PORTA _SFR_IO8(0x02)
PORTA シンボルは (*(volatile uint8_t *)((0x02) + 0x20)) に解決されます
これにより、次のようなことができると思いますが、 volatile キーワードが必要かどうか、実際に期待どおりに機能するかどうかはわかりません
class LED{
public:
LED(volatile uint8_t* port, uint8_t pin);
{
Port=port;
Pin=pin;
}
void write(bool val)
{
if(val) (*Port) |= 1 << Pin;
else (*Port) &= ~(1 << Pin);
}
private:
uint8_t Pin
volatile uint8_t* Port;
}
最後に、ポート/ピンを LED コンストラクターからの出力として設定する方法はありますか? これには、指定された PORT# の相対 DDR# レジスタを見つけることが含まれます。&DDR# は常に &PORT#-1 であると想定できますか?