使用适用于 MSP430 的 GCC 的位操作内在函数
Bit manipulation intrinsics using GCC for MSP430
MSP430 系列微控制器提供快速位设置/位清除机器指令。
这些位操作命令对于某些具有副作用或需要原子访问以防止故障或竞争条件的寄存器或 I/O 操作很有用。
但是,除了 MSP430 内核的几乎所有其他特殊功能的许多内部函数外,GCC 不提供位操作指令的内部函数。
这是为什么? GCC 是否仍然发出这些指令,发出它们需要哪些 C 代码?
C语言已经允许表达位操作:
$ cat bits.c
#include <msp430.h>
void main(void)
{
P1IFG &= ~BIT1;
P1IE |= BIT1;
}
$ msp430-gcc -mmcu=msp430f2013 -Os -S bits.c
$ cat bits.s
...
; end of prologue
BIC.B #2, &0x0023
BIS.B #2, &0x0025
; start of epilogue
...
MSP430 系列微控制器提供快速位设置/位清除机器指令。
这些位操作命令对于某些具有副作用或需要原子访问以防止故障或竞争条件的寄存器或 I/O 操作很有用。
但是,除了 MSP430 内核的几乎所有其他特殊功能的许多内部函数外,GCC 不提供位操作指令的内部函数。
这是为什么? GCC 是否仍然发出这些指令,发出它们需要哪些 C 代码?
C语言已经允许表达位操作:
$ cat bits.c #include <msp430.h> void main(void) { P1IFG &= ~BIT1; P1IE |= BIT1; } $ msp430-gcc -mmcu=msp430f2013 -Os -S bits.c $ cat bits.s ... ; end of prologue BIC.B #2, &0x0023 BIS.B #2, &0x0025 ; start of epilogue ...