ADS(arm develper suite)에서 C언어 문법
글쓴이: 이경한 / 작성시간: 일, 2006/07/09 - 10:56오후
여기서 눈팅만 3년째인데 눈치불구하고 질문하나 올립니다.
요즘엔 임베디드 소프트웨어를 개발하고 있는데 다음과 같은 코드를 봤습니다.
#define WHATS_THIS l12345 typedef WHATS_THIS struct st_test { ... } t_test;
여기서 WHATS_THIS가 typedef와 struct 키워드 사이에 들어가면 어떤 의미가 되는지 잘 모르겠습니다. 혹시 ARM용 컴파일러에만 사용하는 특이한 문법이 아닐런지요?
ps. 물론 컴파일은 잘 됩니다.(-_-)
Forums:
에러납니다.
적어주신 코드 대로 컴파일 하면 에러납니다.
ADS 1.2 [build 848] 입니다.
struct 앞에 붙는 키워드라면 아래와 같은 __packed 키워드가 아닌가요?
-----------------------------
Weblog:
분명히 다음 문장은 주석처리 되어있고
다음과 같이 바뀌어져 있습니다.
아무래도 아래 코드가 실마리가 될 것 같습니다.
근데 이 코드가 의미하는 것이 무엇인지 명확하지 않군요.
설명 부탁드릴 수 있을까요?
Weblog: http://www.annyung.net
Weblog: http://www.annyung.net
__packed 지시어는
__packed 지시어는 컴파일러에게 데이터들이 바이트 단위로 위치해 있다고 알려줍니다.
구조체 에서 __packed 지시자는 모든 패딩값을 제거하기 위해 사용됩니다.
위 코드의 경우 리틀엔디안 메모리 시스템에서 아래와 같이 패딩 비트가 들어가게 됩니다.
패딩비트가 들어가는 이유는 ARM 아키텍처의 로드-스토어 정렬 제한 때문이죠.
그러나 이런 패딩비트가 들어가면 안되는 경우가 있을 수 있습니다.
그럴때 사용하는것이 __packed 지시어 입니다.
__packed 지시어가 들어가면 아래와 같이 패딩비트가 사라집니다.
제가 보고 있는 소스를 보니 아래와 같은 코드가 보이는군요.
VC 에서는 패딩비트를 없에기 위해서 #pragma pack(1) 가 쓰이죠.
------------------------------
음.
질문하신 코드에 대해서 정확히는 모르겠지만
디바이스 드라이버 만들다보면 아래와 같은 코드는 나옵니다.
물론 arm, i386 모두 컴파일이 잘됩니다.
<- 이거면 안되는 게 없어~
정품 소프트웨어 사용 캠패인
<- 이거면 안 되는 게 없어~
정품 소프트웨어 사용 캠패인
__attribute__ ((__packed__))
gcc 에서는 __attribute__ ((__packed__))
armcc 에서는 __packed 를 사용합니다.
같은 의미 입니다. :)
------------------------------
댓글 달기