Skip to content
Snippets Groups Projects
Commit 4a002c52 authored by 이장원's avatar 이장원
Browse files

gprof

parent cb1503f4
No related branches found
No related tags found
No related merge requests found
SRCS := test.c fx_s1516_double.c fx_s1516_longlong.c
OBJS = $(SRCS:.c=.o)
CC = gcc
CFLAGS = -Wall
fx_test: $(OBJS)
$(CC) -o $@ $^ -lm
test.o: test.c
$(CC) $(CFLAGS) -c $^
fx_s1516_double.o: fx_s1516_double.c
$(CC) -c $^
fx_s1516_longlong.o: fx_s1516_longlong.c
$(CC) -c $^
clean:
rm $(OBJS) fx_test
\ No newline at end of file
# Battle C Team project - Team 3
## Team members
| Name | Student ID |
| :----: | :--------: |
| 남도현 | 201620921 |
| 이장원 | 201920756 |
| 이화진 | 201723268 |
| 황영준 | 201420989 |
## Fixed Point
### What is Fixed point?
- 흔히 사용되는 부동 소수점 방식과 다르게 소수점의 위치를 고정해 놓고 실수를 표현하는 방법이다.
- 구현이 간편하지만 표현가능한 수의 범위가 좁고 정밀도가 낮다는 단점이 존재한다.
## fx_s1516 - fixed point number
### fx_s1516
![image-20200809143100791](./images/image-20200809143100791.png)
- 총 32 Bit이며, 맨 앞의 1Bit는 부호를 나타내는 비트로 사용한다.
- 그 뒤의 15 Bit는 정수부, 16 Bit는 소수부를 표현한다.
### values - min, max, resolution
- minimum value: -32768 (= -2^15)
- maximum value: 32767.9999847 (= 2^15 - 1/2^16)
- resolution: 0.00001525878 (= 1/2^16)
## fx_s1516 Library
### macros
| Macro | Description |
| ------------------- | ----------------------------------------- |
| P2_16 | 고정소수점 표현을 위해 필요한 2^16을 정의 |
| e | math.h의 M_E를 활용하여 자연상수 e를 정의 |
| fx_s1516_PI | math.h의 M_PI를 활용하여 원주율 PI를 정의 |
| fx_s1516_INVERSE_PI | 앞서 정의한 PI의 역을 정의 |
### functions
| Name | Return type | Parameters | Description |
| ---------------- | ----------- | --------------------- | ------------------------------------------------- |
| double_to_fx | double | double a | double형 a값을 fx_s1516형으로 형 변환 |
| fx_to_double | double | fx_s1516 a | fx_s1516형 a값을 double형으로 형 변환 |
| fx_s1516_add | double | double a, double b | fx_s1516 연산으로 a + b값을 계산 |
| fx_s1516_sub | double | double a, double b | fx_s1516 연산으로 a - b값을 계산 |
| fx_s1516_mul | double | double a, double b | fx_s1516 연산으로 a * b값을 계산 |
| fx_s1516_div | double | double a, double b | fx_s1516 연산으로 a / b값을 계산 |
| degree_to_radian | double | fx_s1516 a | fx_s1516형 a값을 radian 값으로 변환 |
| fx_s1516_sin | double | double a | 라디안 값을 받아 fx_s1516 연산으로 sin값을 계산 |
| fx_s1516_sqrt | double | double a | fx_s1516 연산으로 a의 제곱근 계산 |
| fx_s1516_pow | double | double a, double b | fx_s1516 연산으로 a의 b거듭제곱을 계산 |
| fx_s1516_log | double | double a, double b | fx_s1516 연산으로 b를 밑으로 하는 a의 로그를 계산 |
| baselog | double | double a, double base | base를 밑으로 하는 a의 로그를 계산 |
## make
### descriptions
- 다수의 모듈로 구성된 프로그램을 효율적으로 유지하고, 관리할 수 있도록 도와주는 도구이다.
- 여러 파일들 간 의존성을 저장하고 수정된 파일에 연관된 것들만 재 컴파일할 수 있다.
- 자주 쓰는 명령어를 정의해 자동화할 수 있다.
### codes
- macro: 일반 코딩에서 변수 선언과 같이 단순한 매크로에 여러 파일 혹은 링크 명령어들을 지정할 수 있다.
```makefile
SRCS := test.c fx_s1516_double.c
OBJS = $(SRCS:.c=.o)
CC = gcc
CFLAGS = -c -Wall -g
```
- macro 선언에는 '='과 ':=' 표현 중 아무거나 한 개를 쓰면 된다.
- $(SRCS:.c=.o)는 SRCS 중에서 .c로 끝나느 파일을 .o로 바꾸어 할당한다는 뜻이다.
- Internal Macro: 기본적으로 내장되어 있는 매크로를 뜻하며 재정의 할 수 없다.
| name | description |
| ---- | ------------------------------------------------ |
| $@ | 현재 target명 |
| $? | 현재 target보다 더 최근에 갱신된 dependency 명단 |
| $< | dependency중 첫 번째 파일명 |
| $^ | 현재 모든 dependency 명단 |
- Pre-defined Macro: Internal Macro와 같이 내장되어 있으나 재정의할 수 있다.
```makefile
CC = gcc
```
- CC는 기본적으로 ```cc```로 선언되어 있지만 ```gcc```로 재정의하여 사용하였다.
- target과 dependency(pre-requirement): terminal에서 make 명령어 바로 뒤에 올 수 있는 것을 target, 해당 타겟이 실행되기 위해 필요한 것을 dependency라고 한다.
```makefile
fx_x1516_double: $(OBJS)
$(CC) -o $@ $^
```
- 매크로를 사용할 때 매크로 이름이 2글자 이상이면 괄호() 또는 중괄호{}로 감싸주어야 한다.
- target과 dependency 바로 밑에 해당 타겟이 호출되면 실행될 터미널 명령어를 정의할 수 있는데 앞에는 무조건 ```tab```을 넣어주어야 한다.
- dummy target: dependency 없이 정의된 target을 뜻한다.
```makefile
clean:
-rm $(OBJS)
rm fx_s1516_double
dep:
$(CC) -M $(SRCS)
```
- clean은 ```make```로 생성되었던 *.o 파일들과 fx_s1516_double 실행 파일을 삭제한다.
- 터미널 명령을 정의할 때 맨 앞에 ```-```를 삽입하면 해당 명령어가 정상 실행되지 않더라도 다음 줄의 명령어를 실행한다.
- dep는 컴파일 할 명령어에서 사용하고 있는 헤더를 자동으로 찾아서 매핑해주는 역할을 한다.
### commands
- ```make```: *.c 파일을 컴파일하여 *.o 파일을 만들고, fx_s1516_double 실행 파일을 생성한다.
- ```make clean```: *.o 파일과 fx_s1516_double 실행 파일을 제거한다.
###
## References
###### Randy Yates, Fixed-Point Arithmetic: An Introudction. pp6-pp11
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment