[왕초보 임베디드-C 공부 일기] 1. 변수 선언과 할당
1. 변수의 선언
C언어에서 변수의 선언은 컴파일러(컴퓨터)에게 다음 세 가지 정보를 알려주는 행위이다.
1)데이터의 크기(자료형, Type) : "얼마나 큰 공간이 필요한가?" (정수, 문자, 실수)
2)데이터의 이름(변수명, Name) : "그 공간에 붙일 라벨의 이름은 무엇인가?" (name, speed, a...)
3)데이터의 할당(Allocation) : "RAM의 특정 주소를 이 변수 전용으로 할당해라."
-선언 공식 [자료형] [변수이름] ;
1)데이터의 크기(자료형, Type) : "얼마나 큰 공간이 필요한가?" (정수, 문자, 실수)
2)데이터의 이름(변수명, Name) : "그 공간에 붙일 라벨의 이름은 무엇인가?" (name, speed, a...)
3)데이터의 할당(Allocation) : "RAM의 특정 주소를 이 변수 전용으로 할당해라."
-선언 공식 [자료형] [변수이름] ;
int a;
2. 메모리(RAM) 내부에서 일어나는 일
1단계(컴퓨터에서 컴파일러 gcc가 하는 일) -> 컴파일(complie)
- - 상황 : 사용자가 파일에 int motor_speed; 라고 적고 build 버튼을 누름
- - gcc(컴파일러)가 하는 일
- : 'int(정수)니까 공간은 4byte필요, 0x2000번지를 이 데이터 전용으로 할당' 이라고 실행 파일(.elf) 내의 작업 지시서(Startup Code)에 작성
- -상태 : 아직 실행보드인 STM32F446RE(실제로 본인이 쓰는 보드입니다.)에는 전기 신호도 들어가지 않음. gcc가 작업 지시서에 작성만 해놓은 상태.
2단계(실행보드 STM32F446RE가 하는 일) -> 런/작동(Run)
- -상황 : 사용자가 런(Run) 버튼을 누름
- -진행 과정
- 실행보드 내 업로더/디버거(ST-LINK GDB Server)가 실행 파일의 작업 지시서 부분을 추출해서 실행보드의 플래시메모리에 저장
- -> 실행보드 내 CPU가 플래시메모리에 저장된 작업지시서를 가장 먼저 읽음
- -> CPU가 작업지시서대로 움직여 RAM으로 달려가서 해당 데이터 전용으로 할당된 주소(BSS 구역)를 모두 0으로 작성해놓음
- -> 실행파일의 main함수를 호출함.
변수에 값이 할당되어있지 않고, 선언만 된 경우에는 여기에서 종료된다.
3. 변수의 할당
변수에 값이 할당된 경우에는 실행 파일 내에서 초기값에 해당하는 섹션에 값이 저장되고, 이 깂을 디버거가 작업 지시서와 함께 플래시 메모리에 저장한 뒤에 CPU가 값을 꺼내서 RAM의 지정된 주소에 복사한다.
+위 내용은 main함수 바깥에 있는 전역 변수나 static변수에만 해당된다.
++main함수 내 지역 변수는 실행 파일 내 작업 지시서에 해당하는 섹션에 같이 저장되어 플래시 메모리에 있는 상태 그대로 CPU가 읽어 실행한다.
(RAM으로 복사되지 않음)
참고한 강의 :
Coursera - Introductory C Programming - Course 1(Duke University)
Udemy - Microcontroller Embedded C Programming: Absolute Beginners(FastBit Embedded Brain Academy)
이외에 공부 중 궁금했거나 찾아봐야 했던 정보는 Gemini질문으로 해결하였습니다. 혹시 틀리거나 부족한 부분은 댓글로 말씀하시면 수정하겠습니다.