看IAR:
#ifdef __IAR_SYSTEMS_ICC__ #define GET_IO_BITFIELD(addr) (*(( __io volatile bitfield *)(addr))) #define __GET_IO_BIT(addr,b) GET_IO_BITFIELD(addr).bit##b #define GET_IO_BIT(addr,b) __GET_IO_BIT(addr,b)
#else #define GET_IO_BITFIELD(addr) GET_BITFIELD(addr) #define GET_IO_BIT(addr,b) GET_BIT(addr,b) #endif
#define TEST_IO GET_IO_BIT(&PORTB,PB0)
看编译出来的汇编代码: TEST_IO =1; SBI 0x05, 0x00
TEST_IO =0; CBI 0x05, 0x00
TEST_IO =!TEST_IO; IN R16, 0x05 SBRS R16, 0 SBI 0x05, 0x00 SBRC R16, 0 CBI 0x05, 0x00
TEST_IO =~TEST_IO; IN R16, 0x05 SBRS R16, 0 SBI 0x05, 0x00 SBRC R16, 0 CBI 0x05, 0x00 |