본문 바로가기

전체 글269

Volataile 지정자를 쓰는 이유 약 60여개의 C++ 키워드 중에 가장 사용 빈도가 낮은 키워드는 무엇일까? 정답은 volatile이다. 대부분의 C/C++ 참고 서적은 1-2줄 정도로 volatile이 컴파일러의 최적화(optimization) 막아준다고만 설명하고 있다. 또한 Java5 이후로 명확한 메모리 모델이 확립된 자바와는 달리 C/C++의 경우 volatile에 대한 명확한 표준이 없고 컴파일러마다 구현에 차이가 있다는 점도 volatile 키워드의 사용을 어렵게 하고 있다. 하지만 임베디드 시스템이나 멀티쓰레드 프로그래밍이 보편화된 만큼, 이 글에서는 volatile 키워드의 기초부터 다시 살펴보고자 한다. volatile 소개volatile로 선언된 변수는 외부적인 요인으로 그 값이 언제든지 바뀔 수 있음을 뜻한다. 따.. 2012. 4. 3.
Firmware Register를 효율적으로 사용하기 위한 Bit Operator 활용법 특정 Register의 특정 Bit만 Set하거나 Clear 하고 싶다면,& (AND) 연산자와 | (OR) 연산자를 잘 활용 하면 된다. & (AND) 연산자 활용법다른 Bit에 영향을 주지 않으면서, 특정 Bit만 Clear 하고 싶다.ex)TIMSK Register가 현재 0010 1100 인 상태이다.이때, 다른 Bit는 건드리지 않고 2,3번 Bit만 Clear 하고 싶다. TIMSK & 0b11110011; 위의 연산 결과 TIMSK 는 2,3번 Bit만 Clear된다. | (OR) 연산자 활용법다른 Bit에 영향을 주지 않으면서, 특정 Bit만 Set 하고 싶다.ex)TIMSK Register가 현재 0010 1100 인 상태이다.이때, 다른 Bit는 건드리지 않고 6,7번 Bit만 Set .. 2012. 3. 27.
디지털 필터(이동평균필터, Low-Pass Filter) 저주파 통과 필터(Low-Pass Filter) : 기준주파수 이하의 데이터만 통과하게함. ts : 데이터 입력 주기 int Lowpass_Filter(int input) { int tau=5.4; //정하는 기준을 아직 잘 모르겠음. return tau/(tau+ts)*pre_y+ts/(tau+ts)*input; //원리 : 필터결과 = 이전 데이터의 (80%)? + 입력데이터의 (20%)? } 고주파 통과 필터(High-Pass Filter) : 기준 주파수 이상의 데이터만 통과 하게 됨. ts : 데이터 입력 주기 int Highpass_Filter(int input) int tau=5.4; //정하는 기준을 아직 잘 모르겠음. return tau/(tau+ts)*pre_y+ts/(tau+ts)*(.. 2012. 3. 4.
버퍼[Buffer] - 큐 구조 1) UART 통신일 경우 인터럽트 서비스 루틴에서 바로 EnQueue함. interrupt [USART0_RXC] void usart0_rxc(void) { Uart0_EnQueue(UDR0); } 2) Main 함수 또는 Timer/Counter 핸들러 내부에서 DeQueue함. if(Uart0_Is_Empty() == FALSE) Order = Uart0_DeQueue(); //UART #define BUFFER_SIZE 1024 #define TRUE 1 #define FALSE 0 //USART 전역 변수 char u0_rx_buffer[BUFFER_SIZE]; int u0_rx_point_head = 0; int u0_rx_point_tail = 0; /* 큐에 관한 함수들-----------.. 2012. 3. 4.