2011-07-18 4 views
8

구조의 패킹을위한 비트 순서를 결정할 수있는 GCC C 컴파일러 지시문이 있는지 궁금합니다.GCC 컴파일러에서 struct 비트 순서를 적용하는 방법은 무엇입니까?

#pragma bit_order left 
이러한 필요성에 대한 이론적 근거는 나는 다음과 같은 구조를 가지고있다

:의 좋아하는 뭔가이 구성에

struct { 
     union { 
      unsigned char BYTE; 
      struct { 
       unsigned char B0: 1; 
       unsigned char B1: 1; 
       unsigned char B2: 1; 
       unsigned char B3: 1; 
       unsigned char B4: 4; 
      }BIT; 
     }ITEM; 
} myStruct; 

, 나는 컴파일러 싶습니다은이 방법을 포장하기 :

Bit order: | 7 6 5 4 3 2 1 0 | 
Label:  |B7 B6 B5 B4 B3 B2 B1 B0 | 
0,123,516을 : GCC는 그것을 수행하는 방법보다는
Bit order: | 7 6 5 4 3 2 1 0 | 
Label:  |B0 B1 B2 B3 B4 B5 B6 B7 | 

규정 된 하드웨어 주소에 따라 비트 오프셋을 계산하는 구조를 가진 거대한 헤더 파일을 가진 MCU를 다루고 있습니다. GCC C 컴파일러에서 컴파일러 지시문을 사용하여 제조업체가 제공 한 모든 필드를 뒤집기 전에 비트 순서 스왑을 수행하기를 기대합니다.

+0

크기와 순서 및 컴파일러 상위 https://stackoverflow.com/questions/1490092/cc-force-bit-field-order-and-alignment'packed' 작업 일부를 수행합니다 https://stackoverflow.com/questions/1756811/does-gccs-attribute-packed-retain-the-original-ordering –

답변

12

사용중인 GCC 버전과 플랫폼은 무엇입니까? 프라그 마를 그 트릭을 할 수있는,하지만에서 GCC와 4

#pragma reverse_bitfields on 

자세한 내용을 시작 x86에서 작동하지 않습니다 당신은 GCC를 다시 괜찮다면

http://groups.google.com/group/gnu.gcc.help/browse_thread/thread/747918655affa5c0?pli=1

모든 관련 빌드 설정 (bitfield 검색) 현재 위치 :

http://gcc.gnu.org/onlinedocs/gccint/Storage-Layout.html

일부 세부 사항에 대한 비트 필드는 나쁜 것 :

C/C++: Force Bit Field Order and Alignment

+1

고마워요! 그것은 정말로 유익했다! GCC를 해제 한 지점은 4.3.0 버전입니다. 그 타겟 MCU에 대한 GCC C 컴파일러의 문서는 매우 드문 드문 드문 드문 분명한데, 나는 그것을 최대한 활용하려고 노력하고있다. 구조체를 직접 재정렬하는 것이 유일한 방법 인 것 같습니다. 실현 가능한 솔루션에 도달하는 프로세스를 신속하게 도와 주신 데 대해 다시 한번 감사드립니다. – Vern

+1

+1 포스 비트 필드 순서 및 정렬 링크 +1 –