앞으로 자료구조에 대해서 포스팅할 것이다.

그럼 먼저 자료구조란 무엇인가에 대해서 얘기를 해야 할 것이다.

 

자료구조

우리가 프로그램을 만들 때 처리해야할 자료가 있을 수 있다.

예를 들면 음악프로그램에서의 재생목록이라던지

게임에 접속할 때 보이는 입장 대기열이라던지 하는 것 들이 있다.

단순히 이미 저장되 있는 회원목록이라던가 하는 것들 뿐만 아니라

모든 종류의 '자료'에 대해서 얘기하는 것이다.

 

우리가 앞으로 다룰 것은 그런 자료들을 어떻게 다룰것인가를 얘기하는 것이다.

스택, 큐, 리스트, 트리 등에 대해 알아보고 어떤 방향으로 활용되는 지에 대해서 알아보겠다.

Posted by gharlic

알고리즘을 짬에 있어서의 방법론이 2가지가 있다.

순차지향 프로그래밍과 객체지향 프로그래밍이다.

프로그래밍을 하다보면 이 두가지의 차이점에 대해서 자연스럽게 이해하게 된다.

하지만 정확히 말로 설명하기가 다소 애매하다.

여기서 이해가 안되도 그냥 넘어가도 상관없다.

 

순차(절차)지향 프로그래밍

 알고리즘의 프로세서가 일련의 절차에 의해 돌아가게 되는 프로그래밍이다.

우리가 c언어를 처음배울 때 예재로 흔히 나오던 알고리즘들이 전부 순차지향적인 프로그래밍이다.

우리가 코딩을 할 때 50줄짜리 코딩을 했다고 가정하자.

그럼 그 프로그램이 돌아가는 순서는 1번줄에서 50번줄까지 순서대로 쭈우욱 실행되게 되는 것이다.

 

 순차지향적 프로그래밍의 가장 큰 단점은 유지보수가 어렵다는 점이다.

프로그램 전체가 한 덩어리이기 때문에 무언가를 수정하려면 전체를 다 봐야할 필요가 있다.

프로그램의 규모가 커질 수록 우리가 놓치는 부분이 많아져 오류를 감당할 수 없게 된다.

 

객체지향 프로그래밍

 객체지향이란 데이터와 그 데이터를 처리하는 알고리즘을 포함한 모든것을 캡슐화 하는 것이다.

함수나 구조체 따위로 모든 기능을 독립적인 파일로 분리시켰다고 보면 된다.

각 기능의 입출력 포맷만 명확하다면 특정 부분만 수정하거나 따로 때어내서 사용하기가 용이하다.

 

 

둘 중 어느게 좋은 것인가?

 기능적인 부분만 보면 당연히 객체지향 프로그래밍이 좋다고 할 수 있다.

하지만 정답은 그때그때 다르다이다. 객치지향적일 필요가 없는 부분은 순차지향으로 처리하는 것이 옳다.

불필요한 자료구조를 갖추는데 노력을 들일 필요는 없다.

'프로그래밍 > 알고리즘' 카테고리의 다른 글

하노이의 탑  (0) 2015.07.11
순환(재귀)과 반복  (0) 2015.07.11
Posted by gharlic
임베디드/ARM Cortex-M42015. 7. 10. 20:47

 다른 센서들과 다르게 초음파센서는 ADC에 연결하고 값을 읽어오기만하면 되는 구조가 아니다.

보다 복잡한 제어가 필요하다.

 

초음파센서의 원리

 초음파 센서는 기본적으로 Trig핀과 Echo핀이 있는데

Trig핀에 10us 동안 High신호를 입력하면 초음파를 발사하기 시작한다.

이 때부터 Echo핀이 High상태를 유지하다가 초음파가 돌아오면 다시 Low상태가 된다.

 

초음파센서 사용법

 즉 1us주기로 동작하는 타이머를 사용하고

Trig에 10펄스 동안 High신호를 GPIO로 입력한 뒤

Echo핀이 High상태인 동안의 펄스를 카운트하고

그 카운트된 값을 58로 나누면 cm단위의 거리값이 나오게 된다.

 

주의할 점

 Echo가 Low상태가 됬을 때 카운트를 중지하고 다시 Trig로 신호를 줘야하는데

이것을 제어하는 부분을 다른 타이머로 따로 빼서 제어하지않으면 신호가 씹혀 정상적인 동작을 하지 않는다. 타이머를 2개 사용해야하는 부분이다.

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
int sigcount=0;
 
int t=0;
 
int sensor=0;
 
int state = 0;
 
void InsertSignal() {
 
          if(t ==0) {
 
                  GPIOD->BSRRL=GPIO_Pin_0;
 
                  t = 1;
 
          }
 
          if(t ==1) {
 
                  GPIOD->BSRRH=GPIO_Pin_0;
 
                  int readGPIO = GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_1);
 
                  if(readGPIO != 0){
 
                           sigcount++;
 
                           state=1;
 
                 }
 
                 else if(readGPIO == 0 && state == 1) {
 
                           sensor = sigcount;
 
                           state=0;
 
                           sigcount=0;
 
 
 
                }
 
         }
 
}
 
 
 
 
 
 
 
 
 
 --------------------------------------------------------------------------
 
 
 
 
 
 
 
 
 
void TIM2_IRQHandler(void)
 
{
 
        if (TIM_GetITStatus(TIM2, TIM_IT_Update) == SET) {
 
          TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
 
          InsertSignal();
 
        }
 
}
 
 
 
void TIM3_IRQHandler(void)
 
{
 
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) == SET) {
 
               TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
 
               if(state == 0 && sigcount==0) t = 0;
 
               if(state2 == 0 && sigcount2==0) t2 = 0;
 
               if(state3 == 0 && sigcount3==0) t3 = 0;
 
        }
 
}
 
cs

 

 

초음파센서...

절때 여러개의 초음파센서를 사용하지말라.

초음파센서의 측정각은 15도 정도이지만

센서A에서 발사한 초음파가 벽에 반사되어 센서B로 들어가는 경우가 허다하다

원래부터 측정값의 신뢰도가 높지못한데 여러개를 사용할 경우

필터링을 해도 감당이 안되는 측정값을 보여줄 것이다.

'임베디드 > ARM Cortex-M4' 카테고리의 다른 글

스태핑모터 상 제어  (0) 2015.07.10
UART - PC, 블루투스 통신  (0) 2015.07.10
Sink방식과 Source방식  (0) 2015.07.10
DAC(Digital-Analog Converter)  (0) 2015.07.10
ADC(Analog-Digital Converter)  (0) 2015.07.10
Posted by gharlic