|
给你一个最简捷的位实现:
Dev_GetBit_BB(((u32)&(sel_ABC_port->ODR)),Abit)=Var_GetBit_BB(ABC_Bit, 0);
Dev_GetBit_BB(((u32)&(sel_ABC_port->ODR)),Bbit)=Var_GetBit_BB(ABC_Bit, 1);
用到两个宏函数是stm32的位操作,定义为
#define Var_GetBit_BB(VarAddr, BitNumber) (*(vu32 *)(RAM_BB_BASE|((VarAddr - RAM_BASE)<<5)|((BitNumber)<<2)))
#define Dev_GetBit_BB(DevAddr, BitNumber) (*(vu32 *)(DEV_BB_BASE|((DevAddr - DEV_BASE)<<5)|((BitNumber)<<2)))
看着很多很麻烦,但编译后只有两条汇编指令效率极高.
sel_ABC_port是对应的ioport,GPIOAGPIOBGPIOC...
Abit是对应的位最低位依次取0,1,2....
ABC_Bit是变量ABC的地址,ABC_Bit=(u32)&ABC; |
|