'분류 전체보기'에 해당되는 글 483건
- 2016.07.25 :: makefile
- 2016.07.25 :: gcc 컴파일러.
- 2016.07.07 :: 우분투에서 Git 시작하기
- 2016.06.30 :: 가상 머신 네트워크 설정.
- 2016.06.30 :: 소켓 통신
- 2016.06.30 :: 싸이로드 세미나(카메라)
- 2016.06.20 :: UML(Unified Modeling Language).
- 2016.06.16 :: 가변인자를 사용한 매크로 (개인용 printf)
- 2016.06.15 :: usleep함수 사용.
- 2016.06.15 :: pthread_create 함수 사용.
기본적인 내용은 KLDP wiki를 참고했음.
1. makefile의 사용목적
- 편리하게 컴파일
2. 구조.
- <target> <depend> <command><macro>로 구성
<Target> : <Depend> ?... [[;] Command ]
/탭문자/ <Command>
<Target> 생성하려고 하는 목적물.
<Depend> Target을 만드는데 필요한 요소.
<Command> 일반 쉘 명령어. 앞에 /탭문자/를 입력하여 구분.
===== 예제 =====
test: test.o
ld -lc -m elf_i386 -dynamic-linker /lib/ld-linux.so.2 \
-o test \
/usr/lib/crt1.o \
/usr/lib/crti.o \
/usr/lib/crtn.o \
test.o
test.o: test.c
cc -O2 -Wall -Werror -fomit-frame-pointer -c -o test.o test.c
3. 매크로 활용.
<Macro> 특정한 단어, 경로 등등을 미리 저장.
선언 : <Macro name> = <Macro 내용>
사용 : $(macro name)
위 내용을 다음과 같이 변환 가능
CC = cc
LD = ld
CFLAGS = -O2 -Wall -Werror -fomit-frame-pointer -c
LDFLAGS = -lc -m elf_i386 -dynamic-linker /lib/ld-linux.so.2
STARTUP = /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o
test: test.o
$(LD) $(LDFLAGS) -o test $(STARTUP) test.o
test.o: test.c
$(CC) $(CFLAGS) -o test.o test.c
4. 기본 확장자 규칙
.c.o:
- .c파일을 .o파일로 만들기
$@
- target
$<
- 열거된 depend중 최 좌측 항목
$^
- depend 전체
위 내용을 다음과 같이 변환 가능
CC = cc
LD = ld
CFLAGS = -O2 -Wall -Werror -fomit-frame-pointer -c
LDFLAGS = -lc -m elf_i386 -dynamic-linker /lib/ld-linux.so.2
STARTUP = /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o
test: test.o
$(LD) $(LDFLAGS) -o $@ $(STARTUP) $^
.c.o:
$(CC) $(CFLAGS) -o $@ $<
응용 & 확장
CC = cc
LD = ld
RM = rm -f
CFLAGS = -O2 -Wall -Werror -fomit-frame-pointer -v -c
LDFLAGS = -lc -m elf_i386 -dynamic-linker /lib/ld-linux.so.2
STARTUP = /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtn.o
BUILD = test
OBJS = test.o hello.o
.PHONY: all clean
all: $(BUILD)
clean: ; $(RM) *.o $(BUILD)
test: $(OBJS) ; $(LD) $(LDFLAGS) -o $@ $(STARTUP) $^
# 의존관계 성립
$(OBJS): $($@:.o=.c) hello.h Makefile
# test.o hello.o: $($@:.o=.c) hello.h Makefile
# 확장자 규칙 (컴파일 공통 규칙)
.c.o: ; $(CC) $(CFLAGS) -o $@ $<
$($@:.o=.c) : 타겟의 확장자 .o를 .c로 변경
'IT관련 지식들' 카테고리의 다른 글
DateX-ASN.1 (0) | 2016.08.12 |
---|---|
gdb 디버거 사용하기. (0) | 2016.07.26 |
gcc 컴파일러. (0) | 2016.07.25 |
우분투에서 Git 시작하기 (0) | 2016.07.07 |
가상 머신 네트워크 설정. (0) | 2016.06.30 |
makefile을 분석하기 위해서는 먼저 gcc 컴파일에 대한 이해가 필요하다.
1. 기본동작
execute파일을 생성한다.
==== 소스코드 ====
#include <stdio.h>
int main(int argc, char** argv)
{
printf("Hellow World\n");
return 0;
}
==== 실행 예제 ====
$ gcc test.c
$./a.out
Hellow World
==== 이론 ====
1. 전처리 단계 - 전처리기 (cpp)
: #include, #define 등 #으로 시작하는 문법 사항이 적절히 전처리된 C 언어 소스파일 생성
2. 컴파일 단계 - 컴파일러 (cc1)
: C 언어 소스파일은 컴파일 과정을 거쳐 어셈블리 소스 파일이 됨
3. 어셈블 단계 - 어셈블러 (as)
:어셈블리 소스 파일은 어셈블 과정을 거쳐 목적 파일이 됨
4. 링크 단계 - 링커 (ld)
: 목적 코드는 라이브러리와 링크되어 실행 가능한 파일이 됨
2. 옵션
2.1. 실행파일명 입력 [-o outfile]
$ gcc test.c -o test
$./test
Hellow World
2.2. 오브젝트파일 생성까지만 진행 [-c]
- 위 이론에서 3번까지만 진행. *.o파일을 생성.
- 각각의 오브젝트파일을 만들어 추후에 링크를 걸 경우 유용함.
ㄱ) 한번에 컴파일하는경우
$gcc -o main main.c fun1.c fun2.c
ㄴ) 나눠서 컴파일 하는 경우.
$gcc -c main.c
$gcc -c fun1.c
$gcc -c fun2.c
$gcc -o main main.o fun1.o fun2.o
- ㄴ)의 경우 파일 하나를 고쳐서 다시 컴파일하는 경우 유리하다. 파일 하나가 아니라 모듈 단위로 컴파일 하는 경우라면 더욱 더 ㄴ)의 형태로 가는 것이 좋다.
2.3 어셈블리까지 진행 [-s]
2.4 최적화 수준 지정(-Olevel]
- 숫자가 클수록 높은 최적화
2.5 디버깅 옵션 [-g]
2.6 추가 디파인 [-Dmacro[=defn]...]
2.7 라이브러리 디렉토리 지정[-Ldir...]
2.8 모든 에러 출력 [-Wwarn...] [-Wpedantic]
2.9 추가 헤더파일 디렉토리 지정 [-Idir...]
'IT관련 지식들' 카테고리의 다른 글
gdb 디버거 사용하기. (0) | 2016.07.26 |
---|---|
makefile (0) | 2016.07.25 |
우분투에서 Git 시작하기 (0) | 2016.07.07 |
가상 머신 네트워크 설정. (0) | 2016.06.30 |
소켓 통신 (0) | 2016.06.30 |
ubuntu 14.04에서 git 시작하기
1. 프로그램 다운로드
~/$ sudo apt-get install git qgit gitk git-svn
2. 사용자 등록
~/$ git config --global user.name "kangmin"
~/$ git config --global user.email "kangmini82@gmail.com"
3. 초기화
~/$mkdir gitrepository
~/gitrepository$ git init
4. 사용하는 프로그램 등록 및 동기화
~/project$mkdir gitrepository
~/project/gitrepository$git clone ~/gitrepository/
~/project/gitrepository$git add *
~/project/gitrepository$git commit -m "Working all thread"
* GUI 환경
~/project/gitrepository$gitk
관련사이트
'IT관련 지식들' 카테고리의 다른 글
makefile (0) | 2016.07.25 |
---|---|
gcc 컴파일러. (0) | 2016.07.25 |
가상 머신 네트워크 설정. (0) | 2016.06.30 |
소켓 통신 (0) | 2016.06.30 |
싸이로드 세미나(카메라) (0) | 2016.06.30 |
가상 머신의 네트워크 설정은 다음과 같다.
1. NAT(Network Address Translation)
- PC가 IP공유기 역할을 수행한다.
- 가상머신은 내부 네트워크를 사용하며 PC와는 다른 대역의 IP를 부여한다.
ex) PC : 192.168.0.2 , 가상머신 ; 10.0.0.2
2. 브릿지
- 가상머신은 PC와 동등한 PC로 인식한다.
- PC와 같은 대역의 IP를 부여받는다.
ex) PC : 192.168.0.2 , 가상머신 : 192.168.0.3
3. Host only.
- 가상머신은 인터넷을 할 수 없다.
ex) PC : 192.168.0.2 , 가상머신 : IP 없음.
버추얼 머신 5.0.20을 설치하면 이외에 NAT 네트워크, 내부네크워크, 일반 드라이버 3가지 메뉴가 더 있다. 이에 대해서는 실험을 해 본 후 추가한다.
'IT관련 지식들' 카테고리의 다른 글
gcc 컴파일러. (0) | 2016.07.25 |
---|---|
우분투에서 Git 시작하기 (0) | 2016.07.07 |
소켓 통신 (0) | 2016.06.30 |
싸이로드 세미나(카메라) (0) | 2016.06.30 |
UML(Unified Modeling Language). (0) | 2016.06.20 |
통신을 할 일이 생겨서 소켓통신을 찾아봤다.
서버는 다음의 흐름을 가진다.
socket() : 구조체 생성
bind() : IP addr등의 값 설정.
listen() : 대기
accept() : 연결
<<read(), write()>>
close()
클라이언트는 다음의 흐름을 가진다.
socket() : 구조체생성
connect() : 연결
<< read(), write() >>
close()
코드는 첨부파일 참조.
'IT관련 지식들' 카테고리의 다른 글
우분투에서 Git 시작하기 (0) | 2016.07.07 |
---|---|
가상 머신 네트워크 설정. (0) | 2016.06.30 |
싸이로드 세미나(카메라) (0) | 2016.06.30 |
UML(Unified Modeling Language). (0) | 2016.06.20 |
가변인자를 사용한 매크로 (개인용 printf) (0) | 2016.06.16 |
- 이미지 센서와 성능
- CCD와 CMOS의 차이점
- EMVA1228 비교 테이블
- 이미지 성능 관련 요소.
- Shot noise
- Pixel Size
- Quantum efficiency
- 양자 효율
- Temporal dark noise
- Saturation capacity
- Full Well depth
- Signal to noise ratio
- Dynamic range
- Absolute Sensitivity threshold
- Gain
- 사용 환경에 따른 고려가 필요.
- 빠른 이동 중이라면 fps가 늘어야 한다
- 셔터 속도가 빠르면 광량이 적기 때문에 픽셀사이즈, 양자효율들을 확인한다.
- 밤에 광량이 적은 상태에서 촬영을 해야하는 조건이 추가된다면 또 다른 조건들을 생각해봐야한다.
- SDK - point grey
- Spinnaker - GenICam 표준을 따름
- FlayCapture2
- 열화상카메라 기초교육.
- 각 픽셀에 온도값을 받아서 온도 캘리브레이션 내용과 비교하여 열 영상을 출력.
- 적외선 카메라 선정시 고려사항
- 측정하는 온도범위
- 각 제품의 적정 온도 범위가 다름
- 데이터 수집 속도
- 노출 시간과 프레임 속도
- 목표물의 크기와 측정 거리
- 목표물의 한 픽셀안에 들어오지 않는 경우 온도가 다르게 표현될 수 있다.
- 측정거리가 멀먼 온도가 실제 온도보다 낮게 나올 수 있다.
- 적합한 디텍터와 필터.
- 가시광선, 적외선(NIR, MWIR & LWIR)
- 지원 SW, 개발툴
- 제조사의 지원 및 교육
- 추가 액세서리
- 측정하는 온도범위
- 3D 카메라의 측정 방법과 특성.
- Laser Triangulation
- 라인 레이저로 발사한 빛을 카메라가 받아서 거리를 연산
- Photogrammetry
- 다양한 각도에서 찍은 사진을 분석하여 하나의 3D이미지로 합성
- Stereometry
- 두개의 렌즈로 수집한 데이터를 분석하여 거리를 측정.
- TOF
- 레이더의 원리와 비슷.
- 동작 카메라의 특성을 가짐.
- Moire
- Laser Triangulation
'IT관련 지식들' 카테고리의 다른 글
가상 머신 네트워크 설정. (0) | 2016.06.30 |
---|---|
소켓 통신 (0) | 2016.06.30 |
UML(Unified Modeling Language). (0) | 2016.06.20 |
가변인자를 사용한 매크로 (개인용 printf) (0) | 2016.06.16 |
usleep함수 사용. (0) | 2016.06.15 |
개인적으로 이해한 UML에 대해 정리를 해 본다.
1. UML이란
- Unified Modeling Language. 통합 모델링 언어.
- 프로그램을 만들기 전에 그리는 프로그램에 대한 청사진, 설계도
- 개인 혹은 집단의 공통된 생각을 정리한다.
2. UML을 꼭 사용해야 하는지 물어본다면 다음의 사항을 고려해보자.
- 그림으로 그려서 표현하는 것보다 코드를 보는 것이 간단할 경우 UML을 사용할 필요가 없다.
3. 어떤 UML을 저장해야 하는가?
- 대부분의 UML은 수명이 길지 않다. 칠판, 노트 등 수명이 짧은 저장매체에 그리고 지우기를 반복한다.
- 작은 동작(행위)들에서 시작해서 그림을 그리고 필요한 동작을 하나씩 추가한다.
많은 토론 끝에 저장할 만한 가치가 있는 UML이 남으면 팀원 모두가 공유할 수 있는 공간에 자료를 저장한다.
- UML의 목적은 팀원들 간에 같은 설계를 이해하게 하는데 있다. UML이 목적이 되어서 그림을 잘 그리게 하는 것 보다, 같은 내용을 이해하고 빠르게 코딩에 들어가게 하는 것이 중요하다.
4. UML의 다이아그램 종류와 각 특징
use case diagram
class diagram
behavior diagrams:
statechart diagram
activity diagram
interaction diagrams:
sequence diagram
collaboration diagram
implementation diagrams:
component diagram
deployment diagram
'IT관련 지식들' 카테고리의 다른 글
소켓 통신 (0) | 2016.06.30 |
---|---|
싸이로드 세미나(카메라) (0) | 2016.06.30 |
가변인자를 사용한 매크로 (개인용 printf) (0) | 2016.06.16 |
usleep함수 사용. (0) | 2016.06.15 |
pthread_create 함수 사용. (0) | 2016.06.15 |
디버깅을 위해서 printf를 사용하고 나면 추후 소프트웨어 출하에서도 디버그 메세지가 나오는 경우가 생긴다.
매크로를 사용하면 문제를 없앨 수 있다.
추가로 가변인자를 잘 활용하여 원하는 출력을 가지는 디버그 로그를 확인할 수 있다.
#if defined(DEBUG)
#define TePrint(fmt,args...) printf( "[%s %d]" fmt, __FILE__,__LINE__, ## args )
#else
#define TePrint
#endif
'IT관련 지식들' 카테고리의 다른 글
싸이로드 세미나(카메라) (0) | 2016.06.30 |
---|---|
UML(Unified Modeling Language). (0) | 2016.06.20 |
usleep함수 사용. (0) | 2016.06.15 |
pthread_create 함수 사용. (0) | 2016.06.15 |
VIM 설정 저장 (0) | 2016.06.14 |
1. 헤더 추가
#include <unistd.h>
2. 함수 사용
- 마이크로 sec이기 때문에 1초를 하려면 다음과 같이 한다.
#define ONESEC (1000*1000)
usleep(ONESEC);
'IT관련 지식들' 카테고리의 다른 글
UML(Unified Modeling Language). (0) | 2016.06.20 |
---|---|
가변인자를 사용한 매크로 (개인용 printf) (0) | 2016.06.16 |
pthread_create 함수 사용. (0) | 2016.06.15 |
VIM 설정 저장 (0) | 2016.06.14 |
버추얼박스 해상도 문제 (0) | 2016.06.10 |
*pthread_create 함수 사용
- 목적 : 쓰레드를 추가로 생성해서 각 쓰레드에 업무를 분산하여 동작.
- 방법
1. 헤더파일 추가
#include <pthread.h>
2. 파일에 함수 추가.
int pthread_create( pthread_t *th_id, const pthread_attr_t *attr, void* 함수명, void *arg );
ex)
pthread_t thread;
void *thread_Picture(void *arg);
pthread_create(&thread, NULL, &thread_Picture, NULL)
함수 인자값의 의미는 다음과 같다.
pthread_t thread; <- thread 번호를 저장할 변수공간이라고 하는데, 출력하기가 어렵다.
NULL : attributes. 정확히 몰라서 NULL을 입력했다.
void *thread_Picture(void *arg); <- 스레드가 생성되면서 동작할 함수.
NULL : argument. 정확히 몰라서 NULL을 입력했다.
성공적으로 스레드를 생성하면 0을 return한다.
3. 컴파일
이후 빌드를 할 때 -D_REENTRANT -lpthread 옵션을 추가로 써서 컴파일을 진행한다.
ex)
${CC} ${OBJ} -o ${NAME} ${LIBS}
==> ${CC} ${OBJ} -o ${NAME} ${LIBS} -D_REENTRANT -lpthread
참고사항
- ps -ax 명령어를 사용해도 PID는 같은 값이 나온다. 그렇다 하더라도 서로 다른 상황에서 돌아가고 있으므로 헷갈리지 말자.
- pthread 함수를 정리한 사이트 방문하여 좀 더 살펴볼 필요가 있음
'IT관련 지식들' 카테고리의 다른 글
가변인자를 사용한 매크로 (개인용 printf) (0) | 2016.06.16 |
---|---|
usleep함수 사용. (0) | 2016.06.15 |
VIM 설정 저장 (0) | 2016.06.14 |
버추얼박스 해상도 문제 (0) | 2016.06.10 |
우분투 64bit에서 32bit 패킷이 동작하지 않을 때. (0) | 2016.06.10 |