링크 스크립트를 이용하여 데이터 일치
① 링크 스크립트 파일을 준비할 때 ld --verbose > link를 사용할 수 있습니다.lds 명령 생성.
② 링크 편집lds 파일,.데이터 섹션에 사용자 정의 데이터 섹션을 만들기 위해 다음과 같은 내용을 추가합니다.
.data :
{
*(.data .data.* .gnu.linkonce.d.*)
SORT(CONSTRUCTORS)
}
. = ALIGN(4);
.MyData :
{
KEEP(*(SORT(.MyDataSection_*)))
}
③ 세 개의 원본 파일,main.c:
1 #include
2 #include <string.h>
3 #include "person.h"
4
5 #define MyDataStart(_TYPE) \
6 ({\
7 static char start[0] \
8 __attribute__((unused, section(".MyDataSection_1"))); \
9 (_TYPE*)start;\
10 })
11
12 #define MyDataEnd(_TYPE) \
13 ({\
14 static char end[0] \
15 __attribute__((unused, section(".MyDataSection_3"))); \
16 (_TYPE*)end;\
17 })
18
19 int main()
20 {
21 PERSON *person = NULL;
22
23 for(person = MyDataStart(PERSON);
24 person < MyDataEnd(PERSON);
25 person++)
26 {
27 if(0 == strcmp(person->name, "lance"))
28 printf("Lance's age is: %d.
", person->age);
29 }
30
31 return 0;
32 }
④ person.h는 다음과 같습니다.
1 #ifndef _PERSON_H_
2 #define _PERSON_H_
3
4 #pragma pack(4)
5 typedef struct {
6 unsigned char *name;
7 unsigned int age;
8 }PERSON;
9 #pragma pack()
10
11 #define MyDataListTail(_NAME) \
12 static PERSON _NAME \
13 __attribute__((unused, aligned(4), section(".MyDataSection_2"))) \
14 = {
15
16 #define MyDataListTailEnd() \
17 }
18
19 #endif
⑤ person.c:
1 #include
2 #include "person.h"
3
4 MyDataListTail(john)
5 .name = "john",
6 .age = 14,
7 MyDataListTailEnd();
8
9 MyDataListTail(siri)
10 .name = "siri",
11 .age = 15,
12 MyDataListTailEnd();
13
14 MyDataListTail(lance)
15 .name = "lance",
16 .age = 16,
17 MyDataListTailEnd();
2. 컴파일 명령(링크 스크립트 지정)
gcc -Tlink.lds main.c person.c
3. 실행 결과:
Lance's age is: 16.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.