분류 전체보기 270

임베디드 리눅스 개발 단체

임디드 리눅스 개발 단체   1.  리눅스 커뮤니티   우리가 보는 대부분 리눅스 커널 코드 출처는 리눅스 커널 커뮤니티입니다.  리눅스 커널 커뮤니티는 리눅스 커널 개발의 심장입니다. 리눅스 커널 자체 알고리즘과 논리적 오류와 문제점을 개선하는 패치를 논의하고 관리합니다.    - 버그 수정 패치     - 코드 리팩토링     - 신규 알고리즘    - Document ​보통 2주 간격으로 Greg Kroah-Hartman 개발자가 다음과 같은 메일로 전 세계 개발자들에게 패치 반영 사실을 통지합니다. ​리눅스 커널 버전과 코드 내역은 https://www.kernel.org/ 사이트에서 확인할 수 있습니다. ​위 그림에서 왼쪽 부분을 보면 ‘longterm’으로 표시된 부분이 보입니다. 이는 안정화..

UART / I2C / SPI

우선 동기화/비동기화란 ? 비동기화 통신 = 클럭 없음동기화 통신 = 클럭 있음 ​​UART(Universal Asynchronos Receiver/Transmitter) 통신이란 ?UART는 유선/디지털/전이중/직렬/비동기 통신방식 중 비동기 통신 방식을 사용한다. 최대 8bit가 기본 단위이다. 데이터 속성 구분 정보는 기본 규격에 정의되어 있지 않다. ​UART는 비동기 통신이므로 데이터를 원활이 송신/수신하기 위해 동기 신호(Clock)을 대체하는 방법을 사용해야한다.공유 클럭이 없으므로 데이터를 올바르게 디코딩하기 위해 동일한 Baud Rate(타이밍)를 구성하고 일치시켜야한다. ​이해가 어렵다면. 무궁화 꽃이 피었습니다를 생각해볼 수 있다. 술래(데이터를 받는 쪽)와 술래에게 다가가야하는 참가..

The Stack : 인터럽트 메커니즘(Interrupt Mechanism)

0. Intro TRAP 명령어를 활용하면 운영체제의 코드에 해당하는 서비스 루틴을, JSR/JSRR 명령어를 활용하면 프로그래머가 직접 작성한 서브 루틴을 실행한 뒤 원래 프로그램의 실행 흐름으로 돌아온다. 그리고 둘 다 돌아올 때는 RET(= JMP R7) 명령어를 사용한다. 인터럽트 메커니즘도 어찌 보면 비슷할 수 있다. 외부 장치에 의해 인터럽트가 발생하면 그 장치가 요청한 인터럽트 서비스 루틴을 실행하러 잠시 어디론가 갔다가 다시 돌아오기 때문이다. 하지만 인터럽트 메커니즘은 TRAP 서비스 루틴 호출이나 JSR/JSRR 서브 루틴 호출과 그 방식이 아예 다르다. 인터럽트 메커니즘의 중요한 핵심은 해당 인터럽트 서비스 루틴에 갔다가 돌아왔다는 사실을 프로세서가 전혀 알지 못해야 한다는 것이며, ..

Trap Routines and Subroutines - 시스템 함수와 사용자 함수

0. Intro 인간의 뇌가 감당할 수 있는 복잡성에는 한계가 있기에, 인간은 여러 추상화 기법들을 발전시켜 나갔다. 대표적으로 데이터 추상화(Data Abstraction)와 함수 추상화(Functional Abstraction)가 있다. 데이터 추상화(Data Abstraction)는 현실에 존재하는 특정 객체의 복잡한 속성을 딱 필요한 것으로만 단순화하여 표현하는 것을 말한다. 가령 '학생'이라는 객체는 이름, 키, 나이, 학번 등의 속성으로 정의할 수 있다. 반면 함수 추상화(Functional Abstraction)는 자주 수행되는 특정 동작의 코드들을 하나의 뭉치(Segments)로 만들고, 필요할 때마다 그것을 재활용하는 것을 말한다. 그 코드 뭉치(Code Segments)를 컴퓨터 용어로..

IO - 입출력장치

0. Intro 우리는 지금까지 메모리에 올라가 있는 프로그램의 명령어들을 해석하고 실행하는 것과 관련한 내용들을 다루었다. 그러면 이제 다음 물음을 던져야 할 때이다. "메모리의 데이터는 어디에서 온 것일까??", "메모리의 데이터는 어떤 과정을 거쳐서 인간이 볼 수 있는 형태로 출력이 되는 것일까?" 이 물음에 대한 답은 바로 입출력(I/O) 장치에서 찾을 수 있다. 프로그램을 실행하는 것도 결국은 하드디스크라는 외부 장치로부터 프로그램 코드를 입력받아 메모리에 올리는 것으로 해석할 수 있다. 이번 포스팅에서는 그러한 입출력 장치에 대해 조금 더 자세히 알아보도록 할 것이다. 1. 입출력 장치 (Input and Output Device) 1-1. 장치의 분류 I/O 장치는 다음과 같이 대략 두 가지..

어셈블리어, 어셈블러 (Assembly Language)

이전엔 ISA에 대해 공부했고, 그 규칙을 이해하여 기계어를 코딩하면 CPU에게 원하는 동작을 수행시킬 수 있음을 알게 되었다. 그러나 0과 1만으로 직접 코딩을 하는 건 너무 불편했다. (오래 전 전산학 전공하신 분께서 천공 뚫는게 지겨워 그만두셨다는걸 힘껏 이해할 수 있었다.) 그래서 인간에게 조금 더 친숙한 형태로 어셈블리어(Assembly Language)가 고안이 되었고, 그 결과 프로그램 개발 속도가 혁신적으로 향상되었다. 어셈블리어는 저급 언어(Low-level Language)라고 부르기도 한다. CPU가 저급 언어로 작성된 프로그램을 이해해서 실행하려면 변환 과정이 필요하다. 저급 언어로 작성된 코드는 어셈블러(Assembler)라는 프로그램에 의해 CPU의 ISA 체계에 맞게 기계어로 ..

Win32 SDK 윈도우 애플리케이션 기본구조

1.  GUI를 가진 프로그램의 작동 원리 안드로이도 똑.같.다.  1. Event: User가 H/W장치 (Human Input Device)를 구동하면 운영체제가 하나의 Event로 인식함. 2. Event를 대기하다가 수신하는 역할까지 OS가 해줌. 3. Event에 대응하는 Message로 변환(unsigned int값) 4. Message를 수신해야 하는 창에 함수가 있는지 OS가 Call back해주고, 함수를 만들어 등록. 5. 함수를 실행하여 메시지 치리.    2.  MFC workflow   Call Back 구조로, 흐름은 MFC Framework에 의해 정해져있음.흐름은 정해져 있으므로 코드를 추가하는 개념중요한 것은 언제 정보를 처리하냐, 왜 called 되느냐(원인), 어디에 코..

Sampling & Quantization

표본화(Sampling) 소리는 연속적인 데이터이다. 소리 데이터를 컴퓨터에 저장하기 위해서는 Sampling과 Quantization을 통해 discrete하게 표현해야 한다. 먼저, 실수형태인 시간을 저장하기 위해 sampling을 진행한다. □ Sampling이란 시간을 이산적인 구간으로 나누는 것이다. 즉, 샘플링 간격에 따라 amplitude를 측정하는 것이다. 1초의 연속적인 신호를 몇개의 숫자들의 sequence로 표현할 것인가를 sampling ratefs​이다. sampling rate가 클수록 즉, 자주 sampling할 수록 원본 데이터와 비슷할 것이다. 그러나 그만큼 저장해야 하는 데이터의 양이 늘어나게 된다. sampling rate가 작게 되면 아래와 같이 aliasing이 일어..