C programming問題

本帖最後由 verystrong1991 於 2015-2-19 22:31 編輯

#define digitalToggle(GPIOx, Pin) {GPIOx->ODR ^= Pin;}
#define LED0_TOGGLE digitalToggle(GPIOA, GPIO_Pin_8)

其中GPIO_Pin_8係unsigned short int 0x0100
run完係個register係0000000100000000(binary)
同埋0000000000000000(binary)
點解唔係
0000000100000000
1111111011111111

初學C, stm32
thanks

提示: 作者被禁止或刪除 內容自動屏蔽

TOP

原先GPIO值   0000 0000 0000 0000
Pin_8值         0000 0001 0000 0000
每位元作 XOR 運算,
0 ^ 0 -> 0
1 ^ 0 -> 1
--------------
0 ^ 1 -> 1
1 ^ 1 -> 0
每位元以後者作Mask看的話, 當為0時, 取前者不變, 當為1時, 取前者反值, 亦即Toggle.
所以當僅有pin 8 mask 為1時, 只有 pin 8值取反.

TOP

本帖最後由 verystrong1991 於 2015-2-20 11:26 編輯

原來係xor
搞錯以為係invert
thanks

更新 又有問題
#define digitalLow(GPIOx, Pin) {GPIOx->BRR = Pin;}
#define LED0_OFF digitalLow(GPIOA, GPIO_Pin_8)
我試下先將register set做0000 0111 0000 0000
run完呢2句後 register係0000 0110 0000 0000
點解唔係0000 0000 0000 0000

final更新
睇返reference manual
BRR register係寫0無效 所以得8bit有變

thanks

TOP

提示: 作者被禁止或刪除 內容自動屏蔽

TOP