74. 포인터 크기는얼마인가요 ?
34
33 câu hỏi đã được viết
메모리맵에서 code, data, txt는 각각 어떻게 분배되어 저장되나요 ? (ZI, ZW, RO/RW)
그리고 함수 포인터를 사용한다면 메모리상의 몇번지에 저장되어 있고, 그 크기가 얼마인지 어떻게 알수 있을까요 ? 만약 uint8_t라는 포인터 변수를 선언하면, *p+1은 주소 번지 1의 증가를 의미 하나요 ?
Câu trả lời 1
0
네, 이 부분은 메모리 구조를 같이 보면 이해하기 쉽습니다.
STM32 기준으로 일반적인 배치는 다음과 같습니다. 프로그램 코드인 .text와 상수 데이터인 .rodata는 보통 Flash 영역에 저장되며 RO(Read Only) 영역에 해당합니다. 초기값이 있는 전역/정적 변수인 .data는 초기값 자체는 Flash에 저장되어 있다가 부팅할 때 RAM으로 복사되어 RW(Read/Write) 영역에서 사용됩니다. 초기값이 없거나 0으로 초기화되는 전역/정적 변수는 .bss, 즉 ZI(Zero Initialized) 영역으로 RAM에 배치됩니다. Stack과 Heap 역시 RAM을 사용합니다. 정확한 주소와 크기는 Linker Script와 .map 파일을 보면 확인할 수 있습니다.
함수 포인터의 경우 void (*fp)(void)처럼 선언하면, fp에는 함수 자체가 저장되는 것이 아니라 함수의 주소가 저장됩니다. STM32F767처럼 32-bit Cortex-M MCU에서는 일반적으로 포인터 크기가 4Byte입니다. sizeof(fp)로 직접 확인할 수도 있습니다.
함수 코드는 보통 Flash의 .text 영역에 있고, 함수 포인터 변수 자체가 어디에 저장되는지는 선언 위치에 따라 달라집니다. 지역변수라면 주로 Stack, 전역/정적 변수라면 .data 또는 .bss에 위치합니다.
그리고 uint8_t *p에서 p + 1은 말씀하신 것처럼 주소가 1Byte 증가합니다. 포인터 연산은 가리키는 자료형의 크기만큼 이동하기 때문입니다. 따라서 uint32_t *p라면 p + 1 시 주소가 4Byte 증가합니다.
0
자세한 설명과 답변 감사합니다.
제가 이해하기에는 결국 메모리 설정과 레지스터 설정이 핵심인것으로 이해 됩니다.
포인터에 익숙해지도록 노력이 필요하겠네요 .
86, data bit순서가 바뀌어야 할것 같습니다.
0
21
1
85. pwm사용에 기본구조 이해가 같이 요구되네요
0
28
1
dc모터 회전원리
0
31
2
83. volatile로 선언한 이유가 이해 안됩니다.
0
26
1
82. 16:50초 설명에 대한 오해 및 adc mode비교 자료
0
42
2
81. 소프트웨어 작성 방법론에 조언 부탁 드립니다.
0
37
2
00. stm32cubeIDE를 회사에서도 사용하나요 ?
0
31
1
상전류 읽는 타이밍 관련 문의
0
44
2
uart, tera term 실습이 잘 안됩니다.
0
49
3
80. 인터럽스와 일반함수 차이
0
35
1
79. int main(void)선언 없이 어떻게 동작하나요 ?
0
35
1
79. int main(void)선언 없이 어떻게 동작하나요 ?
0
23
1
73. 왜 hex를 사용하나요 ?
0
41
2
71. 40초쯤에 소리가 안납니다.
0
27
1
70. 강의에 사용되는 보드는 어떤것인가요 ?
0
49
2
00. 인버터 회로만 보고 소비전력을 예측 가능하나요 ?
0
47
1
58강, 유니폴라, 바이폴라 방식중 바이폴라가 대세라고 보면 되나요 ?
0
47
2
57강. 모터인데 왜 전압제어를 하나요 ?
0
47
2
57강. PWM은 sine을 만들어 내는 걸로 이해 하면 되나요 ?
0
44
2
49강. 제어이론의 구체적 다이어그램 설명 요청드립니다.
0
39
2
55강. dead time을 고려하면, 원래의 original신호와는 달라지지 않나요 ?
0
34
2
스위칭 주파수 설정
0
47
2
P6KE47CA 이 부품에 대해서 궁금합니다.
0
53
2
교육용 보드 쓰로틀 질문입니다.
0
76
3

