'분류 전체보기'에 해당되는 글 483건

  1. 2016.07.25 :: makefile
  2. 2016.07.25 :: gcc 컴파일러.
  3. 2016.07.07 :: 우분투에서 Git 시작하기
  4. 2016.06.30 :: 가상 머신 네트워크 설정.
  5. 2016.06.30 :: 소켓 통신
  6. 2016.06.30 :: 싸이로드 세미나(카메라)
  7. 2016.06.20 :: UML(Unified Modeling Language).
  8. 2016.06.16 :: 가변인자를 사용한 매크로 (개인용 printf)
  9. 2016.06.15 :: usleep함수 사용.
  10. 2016.06.15 :: pthread_create 함수 사용.
IT관련 지식들 2016. 7. 25. 15:55

기본적인 내용은 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
posted by 동글동글82
:
IT관련 지식들 2016. 7. 25. 15:04

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
posted by 동글동글82
:
IT관련 지식들 2016. 7. 7. 16:10

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


관련사이트

https://git-scm.com/book/ko/v2

https://rogerdudler.github.io/git-guide/index.ko.html

'IT관련 지식들' 카테고리의 다른 글

makefile  (0) 2016.07.25
gcc 컴파일러.  (0) 2016.07.25
가상 머신 네트워크 설정.  (0) 2016.06.30
소켓 통신  (0) 2016.06.30
싸이로드 세미나(카메라)  (0) 2016.06.30
posted by 동글동글82
:
IT관련 지식들 2016. 6. 30. 16:42

가상 머신의 네트워크 설정은 다음과 같다.


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
posted by 동글동글82
:
IT관련 지식들 2016. 6. 30. 15:15

c.c

defines.h

s.c



통신을 할 일이 생겨서 소켓통신을 찾아봤다.


서버는 다음의 흐름을 가진다.


socket() : 구조체 생성

bind() : IP addr등의 값 설정.

listen() : 대기

accept() : 연결

<<read(), write()>>

close()


클라이언트는 다음의 흐름을 가진다.


socket() : 구조체생성

connect() : 연결

<< read(), write() >>

close()


코드는 첨부파일 참조.

posted by 동글동글82
:
IT관련 지식들 2016. 6. 30. 11:56
싸이로드 세미나 보고.(6/29)

  1. 이미지 센서와 성능
    1. CCD와 CMOS의 차이점
    2. EMVA1228 비교 테이블
    3. 이미지 성능 관련 요소.
      1. Shot noise
      2. Pixel Size
      3. Quantum efficiency
        1. 양자 효율
      4. Temporal dark noise
      5. Saturation capacity
        1. Full Well depth
      6. Signal to noise ratio
      7. Dynamic range
      8. Absolute Sensitivity threshold
      9. Gain
    4. 사용 환경에 따른 고려가 필요.
      1. 빠른 이동 중이라면 fps가 늘어야 한다
      2. 셔터 속도가 빠르면 광량이 적기 때문에 픽셀사이즈, 양자효율들을 확인한다.
      3. 밤에 광량이 적은 상태에서 촬영을 해야하는 조건이 추가된다면 또 다른 조건들을 생각해봐야한다.
    5.   SDK - point grey
      1. Spinnaker - GenICam 표준을 따름
      2. FlayCapture2
  2. 열화상카메라 기초교육.
    1. 각 픽셀에 온도값을 받아서 온도 캘리브레이션 내용과 비교하여 열 영상을 출력.
    2. 적외선 카메라 선정시 고려사항
      1. 측정하는 온도범위
        1. 각 제품의 적정 온도 범위가 다름
      2. 데이터 수집 속도
        1. 노출 시간과 프레임 속도
      3. 목표물의 크기와 측정 거리
        1. 목표물의 한 픽셀안에 들어오지 않는 경우 온도가 다르게 표현될 수 있다.
        2. 측정거리가 멀먼 온도가 실제 온도보다 낮게 나올 수 있다.
      4. 적합한 디텍터와 필터.
        1. 가시광선, 적외선(NIR, MWIR & LWIR)
      5. 지원 SW, 개발툴
      6. 제조사의 지원 및 교육
      7. 추가 액세서리
  3. 3D 카메라의 측정 방법과 특성.
    1. Laser Triangulation
      1. 라인 레이저로 발사한 빛을 카메라가 받아서 거리를 연산
    2. Photogrammetry
      1. 다양한 각도에서 찍은 사진을 분석하여 하나의 3D이미지로 합성
    3. Stereometry
      1. 두개의 렌즈로 수집한 데이터를 분석하여 거리를 측정.
    4. TOF
      1. 레이더의 원리와 비슷.
      2. 동작 카메라의 특성을 가짐.
    5. Moire

각종 카메라와 그 원리에 대해서 알아볼 수 있는 좋은 세미나였습니다. 특히 첫번째 강의에서 카메라의 특성을 설명하면서 연구/개발에 적합한 제품의 선택 방법을 이야기한 부분은 많이 유용했습니다.


'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
posted by 동글동글82
:
IT관련 지식들 2016. 6. 20. 10:47


개인적으로 이해한 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
posted by 동글동글82
:
IT관련 지식들 2016. 6. 16. 15:03

디버깅을 위해서 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
posted by 동글동글82
:
IT관련 지식들 2016. 6. 15. 17:36


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
posted by 동글동글82
:
IT관련 지식들 2016. 6. 15. 17:34

*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 함수를 정리한 사이트 방문하여 좀 더 살펴볼 필요가 있음



posted by 동글동글82
: