2016-07-14 8 views
2

MSP430 시리즈 마이크로 컨트롤러는 고속 비트 세트/비트 지우기 기계 명령어를 제공합니다.MSP430 용 GCC를 사용하는 비트 조작 내장 함수

이러한 비트 조작 컴 맨드는 글리치 또는 경쟁 조건을 방지하기 위해 부작용이 있거나 원자 접근이 필요한 일부 레지스터 또는 I/O 조작에 유용합니다.

그러나 MSP430 코어의 거의 모든 다른 특수 기능에 대한 많은 내장 함수 외에도 GCC는 비트 조작 명령에 intrinsic을 제공하지 않습니다.

왜 그럴까요? GCC는 여전히 이러한 지침을 발행합니까? 그리고 C 코드를 발행해야합니까?

답변

2

C 언어는 이미 비트 조작 표현할 수 : 비트 연산자를 통해 비트 조작의 "가장 가능성 스타일"과 1 비트 마스크가 apropriate 하드웨어 명령에 최적화되어 있으므로,

 
$ 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 
... 
+0

좋아 멋진 . 이거 당연한거야? 비트 마스크가 변수 일 경우 어떻게해야합니까? – dronus

+1

그것은 다른 질문 일 것입니다. 그러나 세 번째 질문 인 "gcc가 생성하는 기계 명령어를 어떻게 확인할 수 있습니까?"라고 묻는 것이 좋습니다. –

+0

글쎄, 비트 세트 대신에 C를 쓰고, 매번 맞는다면 빌드 결과를 확인하는 것이 더 낫다. – dronus