임베디드 시스템을 위한 SW 구조설계 6
2023. 4. 18. 12:55ㆍ[Harman] 세미콘(semiconductor) 아카데미-반도체설계/임베디드 시스템을 위한 SW 구조설계
728x90
기초 CS 및 구조체, 포인터 특징 공부하였다.
- 메모리 구조
- 코드(Code) 영역
- 코드 영역은 실행할 프로그램의 코드가 저장되는 영역
- CPU는 코드 영역에 저장된 명령어를 하나씩 가져가 처리하게 된다.
- 데이터(Data) 영역
- 프로그램의 전역변수, 정적(Static)변수가 저장되는 영역
- 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸
- 스택영역의 지역변수에 메모리가 부족하여 스택 오버플로우가 발생할 때, 해당 지역변수를 데이터영역(전역변수로)으로 선언하여 컴파일 시 오버플로우해결할 수 있다.(데이터영역이 스택영역보다 크기 때문)
- 힙(Heap) 영역
- 사용자가 malloc등의 함수로 메모리를 동적으로 할당한 영역
- 스택, 데이터 영역은 프로그램이 실행되는 동안 메모리 공간이 지정되어 있지만, 힙 영역은 프로그램이 실행되는 동안 유동적으로 할당 및 해제가 가능하다.
- 할당해야 할 메모리의 크기를 프로그램이 실행되는 동안 결정해야 하는 경우(런타임일때) 사용되는 공간
- 스택(Stack) 영역
- 함수내에 사용되는 지역변수와 매개변수가 저장되는 영역
- main함수에 선언되는 변수 또한 전부 스택 영역에 저장된다.
- 스택 영역은 함수 선언과 함께 할당되며, 함수를 벗어나면 소멸한다.
- 스택영역은 높은 주소에서 낮은 주소의 방향으로 할당된다.
- LIFO(Last In First Out)의 후입선출 개념으로 데이터가 저장된다.
- 스택영역에 할당될 메모리의 크기는 컴파일타임(컴파일 하는 동안)에 결정된다.
코드 영역 | 사용자가 작성한 코드 |
데이터 영역 | 전역변수, 정적(Static)변수 |
힙 영역 | malloc, calloc등의 동적으로 할당 받은 변수 |
스택 영역 | main함수 내부 변수, 함수 내의 지역변수 |
- 변수의 종류
- 지역변수
- 선언된 함수 내에서만 사용 가능한 변수
- 함수가 시작될 때 스택영역에 메모리가 할당되고 함수가 끝날 때 스택에서 빠져나와 메모리가 해제된다.
- 전역변수
- 함수 밖에 선언되어 프로그램 내에 어디서든 사용 가능한 변수
- 프로그램의 어디에서나 접근할 수 있으며, 프로그램이 종료되어야만 메모리에서 사라진다.
- 메모리의 데이터(Data)영역에 저장되며, 초기화하지 않아도 0으로 자동 초기화된다.
- 정적(Static)변수
C언어에서 기본적으로 변수는 동적(Dynamic)변수로써 변수 선언과 동시에 메모리가 할당되고, 변수가 선언된 함수를 벗어날 시 메모리가 해제된다. 그러나 정적변수는
- static변수(정적변수)는 함수 내부에도 사용가능하고, 함수를 벗어나서도 사용가능한 변수이다.
- 처음에 초기화해주지 않아도 자동으로 0으로 초기화 된다.
- 전역변수와 동일하게 프로그램이 시작될 때 할당되며, 프로그램이 종료하면 해제된다.
- 구조체
여러 자료형을 가진 변수들을 하나로 묶어 자료형으로 사용할 수 있도록 정의한 것
struct newtype_t{
char cx;
int iy;
float fz;
};
newtype_t abc;
test라는 구조체를 만들어, test구조체 변수 abc를 만들 수 있다.
//main.h
int sum_ab(int , int); // sum_ab함수 선언
int sum_abG(void); // sum_abG함수 선언
struct newtype_t{
char cx;
int iy;
float fz;
};
int sum_abSp(struct newtype_t *); // sum_abSp함수 선언
//mian.c
#include "main.h"
int val_a = 100;
int val_b = 200;
int result;
newtype_t data;
int main(){
result = sum_ab(val_a,val_b);
result = sum_abG();
result = sum_abS(data);
return 0;
}
int sum_ab(int val_a, int val_b)
{
int sum;
sum = val_a + val_b;
return sum;
}
int sum_abG(void)
{
return va+vb;
}
int sum_abS(struct newtype_t test)
{
test.cx ='0';
return test.cx;
}
함수의 매개변수는 초기 선언 시, 함수명(자료형)의 형태로 쓰일 수 있다.
현재
'[Harman] 세미콘(semiconductor) 아카데미-반도체설계 > 임베디드 시스템을 위한 SW 구조설계' 카테고리의 다른 글
임베디드 시스템을 위한 SW 구조설계 5 (1) | 2023.04.16 |
---|---|
임베디드 시스템을 위한 SW 구조설계 4 (0) | 2023.04.15 |
임베디드 시스템을 위한 SW 구조설계 3 (0) | 2023.04.12 |
임베디드 시스템을 위한 SW 구조설계 2 (0) | 2023.04.08 |
임베디드 시스템을 위한 SW 구조설계 1.2 (0) | 2023.04.08 |