본문 바로가기
코스웨어/15년 스마트컨트롤러

20150520_일일업무일지_14번_박서연 - 카운터/타이머, pcap, 도서관리프로그램

by 알 수 없는 사용자 2015. 5. 20.
728x90
반응형

2015-05-20


*AVR컨트롤러


# 타이머/카운터 및 PWM 출력

- Phase and Frequency Correct PWM (PFC PWM 모드) : 위상 및 주파수 교정 PWM 모드

TCCRnA 및 TCCRnB 레지스터에서 WGMn3~0 = 8,9로 설정하며, 보다 높은 분해능의 PWM출력 파형을 발생하는데 유용하다. 이 동작 모드에서 타이머/카운터 레지스터 TCNTn의 계수동작이 상향 카운터로서 0x0000~ TOP의 범위에서 증가하였다가 다시 하향 카운터로서 TOP ~ 0x0000으로 감소하는 동작을 반복적을 수행하는데, 여기서 PWM의 주기를 결정하는 TOPO의 값은 모드8에서는 ICRn레지스터 설정값이며 모드9에서는 OCRnA 레지스터 설정값이다.

이때 타이머/카운터 레지스터 TCNTn의 값은 항상 출력 비뵤 레지스터 OCRnx의 값과 비교되어, 상향 카운터로 동작할 때 그것이 일치하면 OCnx 출력신호가 0으로 클리어 되고, 하향 카운터로 동작할 때 그것이 일치하면 OCnx 출력신호가 1로 셋 된다. 

PFC PWM 모드가 PC PWM모드와 다른점은 TOP의 값을 ICRn과 OCRnA의 2가지만으로 지정할 수 있다는 점과, 이것을 새로운 값으로 갱신할 때 TCNTn의 값이 TOP의 값과 같아질 때 갱신되는 것이 아니라 TCNTn이 BOTTOM인 0x0000으로 될 때 갱신된다는 점이다. 이렇게 함으로써 TCNTn의 동작 주기를 0x0000으로 될 때 갱신된다는 점이다. 이렇게 함으로써 TCNTn의 동작주기를 0x0000에서 그 다음의 0x0000까지로 볼 때 PWM 파형이 완벽한 대칭 동작을 하게 된다. 그러나 PC PWM모드에서는 TOP값이 변하는 주기에서는 과도적으로 비대칭의 PWM 파형을 출력한다. 결과적으로는 PFC PWM 모드는 시스템의 동작중에 TOP값을 수시로 변화시킴으로써 주파수가 가변되는 PWM의 겨우에 하용하면 PC PWM 모드에 비해 적합하다.


*Network

pcap의 헤더파일 및 man 페이지 분석

# man에서 lookupdev 찾기

To obtain a list of devices that can be opened for a live capture, call pcap_findalldevs();  to  free  the list returned by pcap_findalldevs(),call pcap_freealldevs().  pcap_lookupdev() will return the first device on that list that is not a ``loopback`` network interface.

- 패킷을 가로채기위한 장치의 목록(랜카드)을 얻기위해서 pcap_findalldevs() 콜한다.

- pcap_findalldevs()로 얻은 목록을 지울때 pcap_freealldevs()을 콜한다.

- pcap_lookupdev()는 loopback을 제외한 첫번째 장치를 리턴한다.

기본원형

char *pcap_lookupdev(char *); -> 리턴형 char* 형, 인자 char* 형


소스

pcap_lookupdev(caErrMSG)를 통해서 현재 랜카드중 가장 처음에 있는것(loopback제외)를 찾아 cpNICName에 리턴을 해주고 출력하는 프로그램이다.

에러체크도 해주었다.


실행 결과

pcap의 함수를 이용한 프로그램을 컴파일 할 때에는 그냥 gcc -o main main.c와 같이 해주면 에러가 발생한다. 그 이유는 pcap라이브러리가 등록이 되지 않아서 인데, -lpcap를 해주면 pcap라이브러리가 컴파일시 등록이 되어서 에러가 발생하지 않고 컴파일 된다.

#pcap_open_live

원형

pcap_t *pcap_open_live(const char *, int, int, int, char *);

#pcap_close

원형

void pcap_close(pcap_t *);


#pcap_next

원형

const u_char* pcap_next(pcap_t *, struct pcap_pkthdr *);


최종 소스

Hexaview함수는 제외하였습니다.


- 소스 분석

lookup함수를 통해서 랜카드의 이름정보를 얻은후 open_live를 통해서 열어줍니다.

그리고 next함수를 통해서 패킷을 char형태로 저장하고 그 시작 주소를 ucpData로 넘겨 줍니다. 그 데이터를 Hexaview함수를 통해서 출력을 해주고 close를 실행하여 닫습니다.


결과

*C Programming

#도서관리 프로그램2

1. 설계 및 분석

- 데이터 파일 구조

BOOK DATA가 증가함에 따라서 BOOK.DBF의 용량이 증가한다.

'|' -> 이걸로 BOOK DATA를 구분한다.


int + char[30] = 4 + 30 = 34

char[30] + char[15] + char[15] + char[15] + char[15] + 포인터  = 30+15+15+15+15+4 = 94


분석 종료 - 분석한 자료를 바탕으로 코딩하면 되겠습니다.

728x90