일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 데커
- 워치독 타이머
- Dekker
- 2019년 회고
- 임베디드
- 무래함의 비용
- peterson 알고리즘
- 임베디드 개발자
- up-casting
- AVR기초
- 코딩
- 데커 알고리즘
- 임계 영역
- 리눅스 setvbuf
- down-casting
- 업캐스팅
- 데커 알고리듬
- 아두이노
- 리눅스 기초
- 임베디드 입문
- 임베디드 초급
- 외부인터럽트
- 다운캐스팅
- 대구소프트웨어고등학교
- 피터슨 알고리즘
- 임베디드시스템프로그래밍
- 임베디드 시스템 프로그래밍
- setvbuf
- c언어 setvbuf
- AVR
- Today
- Total
목록IT공부 (8)
인성 좋은 인성이

ARM은 모든 것이 address로 접근하여서 값을 설정해 주어야 한다. 따라서 ARM을 다루기 위해서는 CPU 아키텍쳐와 address구성에 대해서 이해하여야 한다. Cortex-M3를 포함한 STM32의 구조 구조를 좀 자세하게 살펴보면 Bus matrix라는것이 구성원(?)들을 이어주는 모습이 보인다. Bus는 CPU에서 중요한 부분을 차지하며 크게 두가지로 나눠볼 수 있는데 data bus와 address bus가 있다. bus matrix가 다 묶여있다보니 bus를 통해서 데이타가 움직일 때 다른 데이타가 움직일 수 없다. 그래서 CPU는 일에 우선순위를 측정하여서 일을 진행한다. STM32 CPU에서 BUS가 한 클럭당 전달하는 데이터의 비트 수는 32bit이다. Cortex-M3는 연산을 위..

와치독 타이머는 프로세서가 안정적으로 동작하는가를 감시하는 친구이다. 와치독 타이머는 타이머가 일정 값에 도달했을 때 워치독 타이머가 리셋된다. 하지만 어떤 이유에서라도 워치독 타이머가 리셋되지 않는 경우 프로세서에 이상이 생겼다는 판단을 하고 시스템을 리셋시킨다. WDTCR 레지스터 WDCE - WDE가 0으로 세트 되어있을 때 1로 세트 되어야 한다. 아니면, 와치독 타이머가 작동하지 않을 것이다. 1로 세트 되면 하드웨어는 4클럭 사이클 이후에 클리어 될 것이다. safety level 1과 2에서 프리스케일러 비트를 바꾸는 경우 1로 세트 되어야 한다. WDE - 1이면 와치독 타이머가 작동하고 0으로 클리어되면 작동하지 않을 것이다. WDE는 WDCE비트가 1일 경우에만 클리어가 가능하다. WD..

본 글은 ATmega128을 기준으로 작성되었으며, 8bit 기준으로 설명되었음을 알립니다. ATmega128은 타이머가 4개(0~3)가 존재한다. 타이머는 인터럽트를 사용하고 PWM 파형을 만들고자 할 때 주로 사용된다. 이 중 타이머 0, 2는 8bit이고 1, 3은 16bit이다. 인터럽트는 카운트의 값이 오버플로우 되었을 때 발생하는 OVF, 카운트 값과 비교 레지스터 값이 일치할 때 발생하는 인터럽트 등이 존재한고, 입력 캡처 인터럽트도 존재한다. 사실 타이머를 사용하는 목적은 인터럽트 사용도 있지만, 내가 원하는 파형을 만들기 위해서(적어도 글쓴이는 그렇다) 많이 사용한다. 원하는 파형을 만들기 위해서는 ATmega128에서 제공하는 register를 적절하게 사용하면 된다. 그렇다면 ATme..

이 글의 내용은 ATmega328을 베이스로 합니다. 인터럽트란 무엇인가? 우선 인터럽트가 돌아가는 간단한 이해를 하고 있어야 인터럽트를 다룰 수 있다. 물론 인터럽트에 대한 이해가 없다고 인터럽트를 다루지 못한다는 것은 아니다. 하지만 인터럽트를 효율적으로 사용하기 위해서는 그 메커니즘을 이해할 필요가 있다. 인터럽트라는 개념은 기회가 된다면 자세하게 다루어 볼 생각이 있다. 다만 당장은 간단하게만 설명을 할 것이다. 인터럽트라는 것은 어떠한 특별한 이벤트가 발생했을때 발생하는 동작이라고 생각하면 된다. 즉 인터럽트는 평소에 동작하는 것이 아니라 일정한 조건이 충족될 때 동작하는 것이다. 그럼 언제 인터럽트를 활용해야 하는가? 사실 인터럽트는 사용하기 나름이다. 센서의 값을 받아올 때도 사용하고, 특정..

DBMS(database management system) : 데이터 베이스 관리 소프트웨어 DB 시스템의 발전 산업혁명 등으로 풍요로워진 인간은 기술의 진보를 이루면 이룰수록 데이터의 양도 늘어났다. 더 이상 인간이 관리할 수 없는 수준까지 와버린 데이터들을 처리하기 위해서 많은 이들이 고민을 했고 그렇게 고안된 것이 db이다. 그리고 그 db를 관리하는 소프트웨어도 등장하였는데 그것이 DBMS이다. DBMS를 사용하는 이유 사실 데이터를 관리하는 방법들은 여러가지가 있다. 그중에 DBMS가 있는 것이다. DBMS가 등장하기 전에는 대표적으로 파일 시스템으로 데이터를 관리하였는데 관리해 주어야 하는 것이 많았기에 개발하는데 효율이 낮았다. 그것을 보완하기 위해서 나온 것이 DBMS인 것이다. 하지만 이..

fputc(), putchar() 위 코드를 실행시키면, 실행결과는 2,3,4,5 newline 6,7,8,9,0 (으)로 나올 것이라 생각할 수도 있다. 하지만 실제로 실행을 시키면 2,4,3,5 newline 6,8,0,7,9 (으)로 나온다. 왜 일까? 이미 눈치를 챘을 수도 있지만 코드를 보면 출력하는 함수가 두 종류이다. putchar와 fputc를 사용한다. 그렇다면 이 친구들의 역할이 어떻기에 이런 결과가 나올까? putchar와 fputc는 표준 출력 함수이다. 이 둘의 차이점은 fputc는 파일로 출력한다는 것이고, putchar는 화면으로 출력한다. 자세히 살펴보면 putchar의 인자 값은 int c가 들어가고 fputc의 인자 값은 int ch, FILE *fp로 두 가지가 들어간다..

업 캐스팅(up-casting) - 업 캐스팅이란 파생 클래스 포인터가 기본 클래스 포인터에 치환되는 것이다. ex) 사람을 인간이라는 개념이 아닌 상위 개념이라고 할 수 있는 동물로 보는 것이다. int main() { B b; B *pDer = &b; A* pBase = pDer; // 업 캐스팅 } 기본클래스의기본 클래스의 주소를 가지고 있을 pDer을 선언하여 기본 클래스의 주소를 대입한다. A 타입의 포인터 pBase를 선언한 후 pDer을 대입(치환)한다. 따라서 pBase는 B의 상위 클래스인 A에 접근할 수 있다. 하위 클래스인 B의 포인터가 상위 클래스인 A의 포인터에 치환했다. 이를 아래 개념에서 위 개념을 치환한 것이니 업 캐스팅이라고 한다. pDer -> 모든 public 멤버에 접..
데커 알고리즘데커 알고리즘이란?- 데커 알고리즘은 네덜란드 수학자 Dekker가 상호 베제를 위해서 설계한 상호 베제 알고리즘이다. 데커 알고리즘. bloolean flag[2];int turn;void P0(){while (true){flag[0] = true;while (flag[1]) {if (turn == 1) {flag[0] = false;while (turn == 1) /* do nothing */;flag[0] = true;}}/* critical section */;turn = 1;flag[0] = false'/* remainder */}} void P2(){while (true){flag[1] = true;while (flag[0]) {if (turn == 0) {flag[1] = fal..