我正在使用xMega AVR微控制器,並且無法將硬件寄存器作爲指針傳遞。很確定這是指針魔術,但經過漫長的一天不能理解錯誤。傳遞硬件寄存器指針
PORTA
定義(在GCC-AVR工具鏈)如下:
#define PORTA (*(PORT_t *) 0x0600)
這工作:
int main(void)
{
// This will set GPIO high
PORTA.DIRSET = 1 << 1;
PORTA.OUTSET = 1 << 1;
while(1) {};
}
,這將無法工作:
void gpio_output_set(PORT_t * port, unsigned char pin)
{
// This will *NOT* set GPIO high
port->DIRSET = 1 << pin;
port->OUTSET = 1 << pin;
}
int main(void)
{
gpio_output_set(&PORTA, 1);
while(1) {};
}
爲什麼?
請解釋您的確切意思是「這不起作用」,所以**再次編輯您的問題**。 –
謝謝,更新。 –
但是你的編輯還不夠。什麼不工作?你是如何編譯你的代碼的?您是否看過生成的彙編代碼('gcc -S -fverbose-asm -O') –