이미 소장하고 있다면 판매해 보세요.
|
1장 소개
1.1 임베디드 시스템이란 무엇인가? 1.2 임베디드 소프트웨어에만 특징적인 디자인 목표는 무엇인가? 1.3 "실시간"이 의미하는 바는 무엇인가? 1.4 "멀티태스킹"이 의미하는 바는 무엇인가? 1.5 임베디드 프로세서는 얼마나 강력한가? 1.6 어떤 프로그래밍 언어를 사용하는가? 1.7 "실시간 커널"이란 무엇인가? 1.8 임베디드 애플리케이션 제작은 왜 특별한가? 1.9 보통 임베디드 프로그램의 크기는 얼마나 되는가? 1.10 이 책에서 사용하는 소프트웨어 2장 데이터 표현 2.1 고정 정밀도 이진수 2.1.1 자릿수 체제 2.1.2 2진수를 10진수로 바꾸는 법 2.1.3 10진수를 2진수로 바꾸는 법 2.1.4 카운팅 2.1.5 고정 정밀도와 오버플로우 2.1.6 16진수 표현 2.2 정수의 2진 표현 2.2.1 부호 있는 정수 2.2.2 같은 크기 정수의 양수와 음수 표현 2.2.3 2의 보수 숫자의 해석 2.2.4 범위와 오버플로우에 대해서 한 번 더 2.2.5 2의 보수와 하드웨어 복잡도 2.3 실수의 2진 표현 2.3.1 고정 소수점 표현 2.3.2 범용 16.16 포맷의 고정 소수점 2.3.3 범용 32.32 포맷의 고정 소수점 2.3.4 부동 소수점 표현 2.4 텍스트의 ASCII 표현 2.5 BCD 3장 C 최대한 활용하기 3.1 정수 데이터 타입 3.2데이터 타입 섞어 쓰기 3.3 유용한 TYPEDEF와 #DEFINE 3.4 메모리에서의 비트 조작 3.4.1 비트 검사 3.4.2 비트 설정, 클리어, 그리고 반전 3.4.3비트 추출 3.4.4 비트 삽입 3.5 I/O 포트에서의 비트 조작 3.5.1 쓰기 전용 I/O 포트 3.5.2 읽기와 쓰기로 구별하는 포트 3.5.3 쓰는 순서로 구별하는 포트 3.5.4 쓰는 데이터 비트의 값으로 구별하는 포트 3.6 메모리-맵드 I/O 장치의 액세스 3.6.1 포인터를 통한 데이터 액세스 3.6.2 배열, 포인터, 그리고 "주소" 연산자 3.7 구조체 3.7.1 팩드 구조체 3.7.2 비트 필드 3.8 가변 액세스 3.8.1 객체의 주소를 캐스팅 3.8.2 유니온 4장 프로그래머 관점에서의 컴퓨터 구조 4.1 메모리 4.2 CPU 4.2.1 ALU 4.2.2 기타 레지스터 4.2.3 제어 유닛 4.3 입출력 (I/O) 4.4 인텔 아키텍처 개요 4.4.1 명령어 포맷 4.4.2 명령어 오퍼랜드 4.4.3오퍼랜드 제약사항 4.4.4 레지스터 4.4.5 스택 4.5 인텔 리얼 모드 아키텍처 4.5.1 세그먼티드 어드레싱 4.5.2 주소 지정 방식 4.6 인텔 보호 모드 아키텍처 4.6.1 세그먼트 레지스터와 GDT 4.6.2 플랫 메모리 모델 4.6.3 주소 지정 방식 4.7 오퍼랜드와 주소 크기 오버라이드 프리픽스 4.8 인텔 데이터 조작 명령어 4.8.1 데이터 이동, 스택, 그리고 I/O 명령 4.8.2 산술 연산 명령어 4.8.3 비트 연산 명령어 4.8.4 시프트 명령어 5장 C와 어셈블리 섞어 쓰기 5.1 어셈블리 프로그래밍 5.2 레지스터 사용 관례 5.3 전형적인 주소 지정 방식 5.3.1 상수 주소 데이터 액세스 5.3.2 변수 주소 데이터 액세스 5.4 명령어 실행 순서 5.4.1 복합 조건식 5.4.2 If?Then?Else 문 5.4.3 루프 5.4.4 문자열 명령어를 이용한 더 빠른 루프 5.5 프로시저 호출과 복귀 5.6 파라미터 전달 5.7 파라미터 읽기 5.8 모든 것을 값으로 전달 5.9 임시변수 6장 I/O 프로그래밍 6.1 인텔 I/O 명령어 6.2 동기화, 전송 속도, 그리고 대기 시간 6.3 폴링 대기 루프 6.4 인터럽트-드리븐 I/O 6.4.1 하드웨어 응답 6.4.2 ISR 6.4.3 PIC 6.4.4 버퍼와 큐 6.4.5 어셈블리로 인터럽트 서비스 루틴 작성하기 6.4.6 C로 인터럽트 서비스 루틴 작성하기 6.4.7 NMI 6.4.8 소프트웨어 인터럽트 6.4.9 예외 6.5 DMA 6.5.1이중 버퍼링 6.6 비교 7장 병행 소프트웨어 7.1 포그라운드/백그라운드 시스템 7.1.1 스레드 상태와 직렬화 7.1.2 지연시간 관리 7.1.3 인터럽트 초과 실행 방지 7.1.4 작업을 백그라운드로 이동 7.2 멀티스레드 프로그래밍 7.2.1 독립된 스레드의 병행 실행 7.2.2 문맥 전환 7.2.3 비선점형 (협조적) 멀티태스킹 7.2.4 선점형 멀티태스킹 7.3 공유 자원과 크리티컬 섹션 7.3.1 인터럽트 금지 7.3.2 태스크 전환 금지 7.3.3 스핀 락 7.3.4 뮤텍스 7.3.5 세마포어 8장 스케줄링 8.1 스레드 상태 8.2 대기 스레드 8.3 문맥 전환 8.4 라운드 로빈 스케줄링 8.5 우선순위 기반 스케줄링 8.5.1 우선순위 반전 8.5.2 우선순위 상속 프로토콜 8.5.3 우선순위 상한 프로토콜 8.6 우선순위 할당 8.6.1 데드라인-드리븐 스케줄링 8.6.2 주기 단조 스케줄링 8.7 데드락 8.8 와치독 타이머 9장 메모리 관리 9.1 C에서의 객체 9.2 스코프 9.2.1 지역 스코프 9.2.2 전역 스코프 9.3 수명 9.4 자동 할당 9.4.1 저장 클래스 "레지스터" 9.5 정적 할당 9.6 정적 할당과 자동 할당을 구별하기 위한 세 가지 프로그램 9.6.1 객체 생성 9.6.2 객체 초기화 9.6.3 객체 파괴 9.7 동적 할당 9.7.1 단편화 9.7.2 메모리 할당 풀 9.8 가변 크기 자동 할당 9.8.1 가변 크기 배열 9.9 재귀 함수와 메모리 할당 10장 공유 메모리 10.1 공유 객체 인식 10.1.1 공유 전역 데이터 10.1.2 공유 사적 데이터 10.1.3 공유 함수 10.2 재진입 가능 함수 10.3 읽기 전용 데이터 10.3.1 Type Qualifier "const" 10.4 피해야 할 코딩 습관 10.4.1 내부 상태를 지역 정적 객체에 보관하는 함수 10.4.2 지역 정적 객체의 주소를 리턴하는 함수 10.5 공유 메모리 액세스 10.5.1 프로세서 워드 크기의 영향 10.5.2 읽기 전용과 쓰기 전용 액세스 10.5.3 타입 수식어 "Volatile" 11장 시스템 초기화 11.1 메모리 레이아웃 11.2 CPU 11.2.1 플랫 메모리 모델 설정 11.2.2 보호 모드로 전환 11.3 C 런타임 환경 11.3.1 롬에서 램으로 복사 11.3.2 초기값 없는 정적 변수를 0으로 초기화 11.3.3 힙 설정 11.4 시스템 타이머 11.4.1 타이머 0: 타이머 틱 11.4.2 타이머 1: 메모리 리프레쉬 11.4.3 타이머 2: 스피커 주파수 11.5 인터럽트 시스템 11.5.1 IDT 초기화 11.5.2 8259 PIC 초기화 11.5.3 새로운 ISR의 설치 부록 A CD-Rom의 내용 부록 B DJGPP 컴파일러 부록 C NASM 어셈블러 부록 D 프로젝트 프로그래밍 부록 E libepc 라이브러리 부록 F 부트로더 |
|
컴퓨터 공학을 전공하는 학생들은 데스크탑이나 서버에서의 프로그래밍에는 익숙하지만 임베디드 시스템에서의 프로그래밍이라고 하면 무엇을 어떻게 해야 하는지 몰라 당황하는 경우가 많다. 『임베디드 프로그래밍 입문-C와 어셈블리로 확실히 배우는』은 주변에서 흔히 볼 수 있는 PC를 이용해 임베디드 프로그래밍에 대한 감을 잡을 수 있도록 길을 열어주는 책이다.
이 책에서 주로 다루는 어셈블리 언어를. 배우는 목적 가운데 하나는 컴퓨터를 좀 더 잘 이해하는 것이다. 데스크탑 소프트웨어도 마찬가지지만 임베디드 시스템 프로그래밍에서는 대상 장치(타겟이라고도 한다)에 대한 이해가 중요하다. 어셈블리 언어를 익힘으로써 장치를 더욱 잘 이해하고, 장치를 이해함으로써 C와 같은 고급언어로 프로그래밍할 때도 좀더 효율적으로 작업할 수 있게 된다. 이 책이 다루지 않는 부분, 즉 작성한 프로그램을 타겟 보드에 다운로드한다든지, 타겟 보드와 PC를 네트워크로 연결해서 원격 디버깅한다든지 하는 방법은 타겟 보드에 따라 내용이 많이 다르므로 타겟 보드에 딸려오는 설명서를 참고하기 바란다. 이 책의 7장부터 10장까지는 임베디드 소프트웨어 프로그래밍에서 중요한 멀티스레드와 메모리 관리에 대해 다루고 있으므로 이 내용을 잘 익혀두면 큰 도움이 될 것이다. 간혹 어려운 부분이 있다면 운영 체제(Operating System) 관련 책을 참고하기 바란다. 이 책은 컴퓨터 공학을 전공하는 1,2학년 학생이 컴퓨터 구조에 대해 공부하고자 하거나 임베디드 시스템 프로그래밍에 입문하고자 할 때 좋은 길잡이가 될 것이다. 이 책을 번역하면서 용어 선택에 고민을 많이 했는데, 번역이 어색한 용어는 차라리 소리나는 대로 적고 영문을 병기했다. 모쪼록 임베디드에 관심이 많았던 초심자들에게 많은 도움이 되길 바란다. --- 역자 서문 |
|
★ 이 책에서 다루는 내용 ★
- 간과하기 쉬운 바이너리 표현의 영향과 한계 - 부동 소수점 대신 고정 소수점 실수를 이용한 빠른 실수 연산 - 스코프, 파라미터 전달, 재귀호출, 메모리 할당 - 비트 조작과 가변 액세스 등 임베디드 시스템에서 흔히 쓰이는 용어의 특성 - C에서 호출할 수 있는 인텔 x86 보호 모드 어셈블리 함수 작성법 - 다양한 스타일의 I/O 프로그래밍의 최대 데이터 속도와 대기 시간 추정 - 여러 스레드와 공유 자원, 크리티컬 섹션의 관리법 - 우선순위 역전, 데드락, 공유 메모리 문제를 피하는 프로그래밍 방법 |