我用atmega16做一个简单的例子

void uartrecieve(unsigned char * data1)
{
    data1="on";

}


int main(void)
{
    unsigned char *z;
    DDRC=0xFF;
    uartinit();
    while(1)
    {
        uartrecieve(z);

        if(strcmp(z,"on")==0)
        {
            PORTC =0xff;
            _delay_ms(6000);
        }
        else
        {
            PORTC=0x03;
        _delay_ms(6000);
        }
   }

}

我的问题是。。。为什么总是打印0x03。。。这两个值不应该相等吗?因此应该在PORTC上打印0xFF!???

最佳答案

您没有更新实际的字符串指针。
以下代码将按您的要求执行:

void uartrecieve(unsigned char ** data1)
{
    *data1 = "on";
}


int main(void)
{
    unsigned char *z;
    DDRC=0xFF;
    uartinit();
    while(1)
    {
        uartrecieve(&z);

        if(strcmp(z,"on")==0)
        {
            PORTC =0xff;
            _delay_ms(6000);
        }
        else
        {
            PORTC=0x03;
            _delay_ms(6000);
        }
   }
}

10-08 08:20