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)