我可以将IO端口作为参数传递给函数吗?

Hus*_*ein 0 c embedded

我尝试使函数使用IO寄存器参数(AVR 32 PORTA)进行操作。但是它不起作用。

/*my function */
U8_t set_bits( U8_t port, U8_t mask)
{
port |= mask;
return port ;
}


/*call of function*/
PORTA=set_bits(PORTA , 0xF0);
Run Code Online (Sandbox Code Playgroud)

Pau*_*vie 5

Welll ...有效,但您需要返回port。当前,它是一个参数(按值传递)。使用:

void set_bits(volatile uint8_t *port, uint8_t mask)
{
    *port |= mask;
}
Run Code Online (Sandbox Code Playgroud)

并致电:

    uint8_t port;
    set_bits( &port, mask);
Run Code Online (Sandbox Code Playgroud)

或者您可以返回端口:

uint8_t set_bits(uint8_t port, uint8_t mask)
{
    port |= mask;
    return port;
}
Run Code Online (Sandbox Code Playgroud)

并致电:

    uint8_t port;
    port= set_bits(port, mask);
Run Code Online (Sandbox Code Playgroud)

  • 最初的想法正确,但是实现起来却是一个不可行的错误-端口不是一个任意变量,它是一个非常特定的内存位置,因此您必须将其声明为指向给定地址的适当易失数据类型的指针。 (3认同)