是否可以將AVR端口用作可以傳遞的變量?將端口作爲變量傳遞 - AVR
例如
LED myLed(PORTA,7); //myLED hooked to PORTA, Pin 7
我想使LED能夠採取任何端口/引腳的組合,所以我會英寸
注意,而不是硬編碼的端口被定義爲:
#define PINA _SFR_IO8(0x00)
#define DDRA _SFR_IO8(0x01)
#define PORTA _SFR_IO8(0x02)
PORTA符號解析爲(*(揮發性uint8_t *)((0×02)+ 0×20))
我相信這會讓我像做以下,但我不確定我是否需要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?
你也可以使用一點結構... – neagoegab
你會介意擴展嗎?我不確定你的意思是什麼struct – DanChianucci
'struct port {UINT8 _port_1_0:1; UINT8 _port_1_2:1; ...};' - 這在C中更好/更好。但是如果你有C++和模板,avakar例子會更好。 – neagoegab