This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

使用ccs的问题 if(GPIOPinRead(GPIOA1_BASE,GPIO_PIN_2)==1) 和if(GPIOPinRead(GPIOA1_BASE,GPIO_PIN_2))的区别? 感谢

当我使用 if(GPIOPinRead(GPIOA1_BASE,GPIO_PIN_2))时可以执行if里面的语句,但是当我使用 if(GPIOPinRead(GPIOA1_BASE,GPIO_PIN_2)==1) 时却无法执行if里面的语句,在这个过程中其它地方都没有修改。

这两个语句在c语言中不是等价的吗?  请问是编译器的问题吗?  感谢

  • 在C语言也是不等价的,因为你是判断函数返回值是多少的。第一个带==1是判断是否为1,而如果返回的是其他不为0的值,依然是不成立。第二个是判断返回值是否为非0.。。明白了吧,你想看个到底是不是返回非0值了,或者判断某一个位,你可以查看那个韩硕原型。不知道你下载那个cc3200-sdk没有,里面有库函数的。请查看原型。确认你的目的是否一致。

    我还是帮你找到吧,免得你不知道去哪儿找

    extern long GPIOPinRead(unsigned long ulPort, unsigned char ucPins);

    long
    GPIOPinRead(unsigned long ulPort, unsigned char ucPins)
    {
    //
    // Check the arguments.
    //
    ASSERT(GPIOBaseValid(ulPort));

    //
    // Return the pin value(s).
    //
    return(HWREG(ulPort + (GPIO_O_GPIO_DATA + (ucPins << 2))));
    }

    看出来了吗,从.h里面的定义都可以看出来返回值的类型。

    你如果还是不明白,请在串口打印这个值,然后看看是多少,这样帮助你准确的理解库函数的用意

  • 嗯嗯  明白了  就是说返回值是一整个字节,只有你指定的那个位才是1或者0,其它位都作为0返回。

    谢谢指导

  • 对,就是这个意思。0和1那种纯粹的说是布尔类型,不为0就为1,而这里定义的不是这种类型。不是单位数值,是多位数值,因此可以是某一位为1或者多位为1.