C左移意外行为

C左移意外行为,c,microcontroller,bit-shift,sdcc,C,Microcontroller,Bit Shift,Sdcc,我有以下代码: void GPIO_InitPortPin(uint8* PortControl, uint8 Pin, uint8 PinDir){ *PortControl &= (~(1U << Pin)); *PortControl |= (PinDir << Pin); } 因此,我尝试将Pin转换为sint8:*PortControl&=(~(1U您可以尝试搜索这是一个有问题的代码,因为它可能会在短时间内两次更改pin方向。我建议不要

我有以下代码:

void GPIO_InitPortPin(uint8* PortControl, uint8 Pin, uint8 PinDir){
    *PortControl &= (~(1U << Pin));
    *PortControl |= (PinDir << Pin);
}

因此,我尝试将Pin转换为
sint8
*PortControl&=(~(1U您可以尝试搜索这是一个有问题的代码,因为它可能会在短时间内两次更改pin方向。我建议不要使用它。如果
*PortControl
是一个硬件寄存器,那么
volatile
在哪里?!@chux当然这可能是一个问题,如果编译r看到sow调用中的
Pin
的值是什么?为什么不展示一个完整且可验证的示例,而不是让100人不看代码就猜测代码中会发生什么?
#define GPIO_PIN_0    (0)
#define GPIO_PIN_1    (1)
...
#define GPIO_PIN_7    (7)

#define GPIO_OUT      (0)
#define GPIO_IN       (1)