목차 일부
지은이ㆍ옮긴이 소개 ... 4
옮긴이의 말 ... 5
지은이의 말 ... 6
이 책에 대해 ... 7
요약 소개 ... 8
용어 사용 ... 10
감사의 말 ... 11
표지 설명 ... 12
CHAPTER 1 소개
1.1 컴파일러, 언어, 객체지향 프로그래밍 ... 22
1.2 임베디드 시스템 개발 ... 23
1.2.1 디버깅 .....
더보기
목차 전체
지은이ㆍ옮긴이 소개 ... 4
옮긴이의 말 ... 5
지은이의 말 ... 6
이 책에 대해 ... 7
요약 소개 ... 8
용어 사용 ... 10
감사의 말 ... 11
표지 설명 ... 12
CHAPTER 1 소개
1.1 컴파일러, 언어, 객체지향 프로그래밍 ... 22
1.2 임베디드 시스템 개발 ... 23
1.2.1 디버깅 ... 23
1.2.2 그 밖의 문제 ... 25
1.2.3 이들 도전을 직면하는 데 도움이 되는 원칙 ... 27
1.3 추가 자료 ... 29
CHAPTER 2 시스템 아키텍처 만들기
2.1 시스템 다이어그램 만들기 ... 32
2.1.1 블록 다이어그램 ... 32
2.1.2 제어 계층 ... 35
2.1.3 레이어드 뷰 ... 37
2.2 다이어그램에서 아키텍처까지 ... 39
2.2.1 모듈 캡슐화 ... 39
2.2.2 태스크 위임 ... 40
2.2.3 드라이버 인터페이스 : Open, Close, Read, Write, IOCTL ... 41
2.2.4 어댑터 패턴 ... 43
2.2.5 다른 인터페이스 시작하기 ... 45
2.2.6 예제 : 로깅 인터페이스 ... 45
2.3 샌드박스 활용 ... 53
2.4 추가 자료 ... 58
CHAPTER 3 하드웨어에 익숙해지기
3.1 하드웨어와 소프트웨어 통합 ... 61
3.1.1 이상적인 프로젝트 흐름 ... 62
3.1.2 보드 구동 ... 63
3.2 데이터시트 읽기 ... 65
3.2.1 문제가 발생했을 때 살펴봐야 할 데이터시트 위치 ... 67
3.2.2 소프트웨어 개발자가 봐야 할 중요 텍스트 ... 69
3.2.3 데이터시트를 이용한 컴포넌트 평가 ... 72
3.3 프로세서는 언어다 ... 76
3.4 회로도 읽기 ... 78
3.5 디버깅 도구상자와 소화기 갖추기 ... 82
3.5.1 보드를 안전하게 관리하기 ... 82
3.5.2 도구상자 ... 83
3.5.3 디지털 멀티미터 ... 84
3.5.4 오실로스코프와 논리 분석기 ... 85
3.6 하드웨어와 소프트웨어 테스팅 ... 89
3.6.1 빌딩 테스트 ... 90
3.6.2 플래시 테스트 예제 ... 91
3.6.3 명령과 응답 ... 95
3.6.4 명령 패턴 ... 100
3.7 에러 처리 ... 102
3.7.1 전통적인 방법 ... 102
3.7.2 에러 처리 라이브러리 ... 103
3.7.3 타이밍 에러 디버깅 ... 104
3.8 추가 자료 ... 105
CHAPTER 4 출력, 입력, 타이머
4.1 출력 토글링 ... 107
4.1.1 레지스터 살펴보기 ... 108
4.1.2 핀 출력 설정하기 ... 110
4.1.3 LED 켜기 ... 112
4.1.4 LED 깜박이기 ... 113
4.1.5 문제 해결 ... 114
4.2 하드웨어와 작동 분리하기 ... 115
4.2.1 보드 전용 헤더 파일 ... 115
4.2.2 I/O 처리 코드 ... 117
4.2.3 메인 루프 ... 119
4.2.4 파사드 패턴 ... 120
4.3 I/O 입력 ... 121
4.3.1 간단한 버튼 인터페이스 ... 122
4.4 순간적인 버튼 누름 ... 124
4.4.1 버튼을 눌렀을 때 인터럽트 ... 125
4.4.1 인터럽트 설정 ... 126
4.4.3 스위치 디바운싱 ... 126
4.5 정해지지 않은 런타임 ... 129
4.5.1 의존성 주입 ... 131
4.6 타이머 사용 ... 132
4.6.1 타이머 부품 ... 132
4.6.2 수학 계산 ... 136
4.6.3 타이머 틱 간의 긴 기다림 ... 141
4.6.4 타이머 사용 ... 141
4.7 펄스 너비 변조 사용 ... 141
4.8 제품 출하 ... 144
4.9 추가 자료 ... 146
CHAPTER 5 실행 흐름 관리
5.1 스케줄링과 운영체제 기본 ... 147
5.1.1 태스크 ... 147
5.1.2 태스크 간의 통신 ... 148
5.1.3 레이스 컨디션 회피하기 ... 149
5.1.4 우선순위 역전 ... 151
5.2 상태 머신 ... 152
5.2.1 상태 머신 예제 : 신호등 제어기 ... 153
5.2.2 상태 중심의 상태 머신 ... 154
5.2.3 변화를 숨긴 상태 중심의 상태 머신 ... 155
5.2.4 이벤트 중심 상태 머신 ... 159
5.2.7 상태 머신 구현 선택 ... 161
5.3 인터럽트 ... 162
5.3.1 IRQ 발생 ... 163
5.3.2 컨텍스트 저장 ... 171
5.3.3 벡터 테이블에서 ISR 얻기 ... 173
5.3.4 ISR 호출 ... 176
5.3.5 컨텍스트 복원 ... 179
5.3.6 언제 인터럽트를 사용하는가 ... 180
5.4 추천하지 않는 인터럽트 사용법 ... 181
5.4.1 폴링 ... 182
5.4.2 시스템 틱 ... 182
5.4.3 시간 기반 이벤트 ... 185
5.4.4 매우 작은 스케줄러 ... 185
5.5 와치독 ... 188
5.6 추가 자료 ... 190
CHAPTER 6 주변장치와 통신하기
6.1 광범위하게 사용되는 주변장치 ... 193
6.1.1 외부 메모리 ... 194
6.1.2 버튼과 키 매트릭스 ... 195
6.1.3 센서 ... 196
6.1.4 액추에이터 ... 200
6.1.5 디스플레이 ... 206
6.2 다양한 통신 방식 ... 212
6.2.1 시리얼 ... 213
6.2.2 병렬 통신 ... 224
6.2.3 이더넷과 와이파이 ... 225
6.3 주변장치의 통신 기능 ... 226
6.3.1 데이터 처리 ... 227
6.3.2 신뢰성 높게 통신하기 ... 239
6.3.3 데이터 바꾸기 ... 244
6.3.4 알고리즘 바꾸기 ... 246
6.4 추가 자료 ... 248
CHAPTER 7 코드 업데이트하기
7.1 온보드 부트로더 ... 253
7.2 자신만의 업데이터 만들기 ... 254
7.2.1 상주 업데이터 고치기 ... 255
7.3 브릭 로더 ... 256
7.3.1 램으로 로더를 복사하기 ... 258
7.3.2 로더 실행 ... 259
7.3.3 새 코드를 스크래치로 복사 ... 260
7.3.4 위험한 시간 : 코드를 삭제한 이후 새 코드를 프로그램하는 동안에 생긴 일 ... 260
7.3.5 새 코드로 재설정 ... 261
7.4 보안 ... 262
7.5 링커 스크립트 ... 263
7.6 요약 ... 266
CHAPTER 8 추가 작업
8.1 코드 공간 ... 270
8.1.1 맵 파일 읽기(파트 1) ... 270
8.1.2 제거 과정 ... 275
8.1.3 라이브러리 ... 276
8.1.4 함수와 매크로 ... 276
8.1.5 상수와 문자열 ... 278
8.2 램 ... 279
8.2.1 malloc 제거 ... 280
8.2.2 맵 파일 읽기(파트 2) ... 281
8.2.3 레지스터와 지역 변수 ... 283
8.2.4 연쇄 함수 호출(함수 체인) ... 286
8.2.5 전역의 장단점 ... 287
8.2.6 메모리 공유 ... 288
8.3 속도 ... 289
8.3.1 프로파일링 ... 290
8.3.2 최적화 ... 295
8.4 요약 ... 307
8.5 추가 자료 ... 308
CHAPTER 9 수학
9.1 빠른 작동과 느린 작동 확인 ... 312
9.1.1 평균값 이용 ... 314
9.2 기존 알고리즘 사용 ... 316
9.3 알고리즘 설계와 수정 ... 320
9.3.1 다항식 요소 ... 320
9.3.2 테일러 급수 ... 321
9.3.3 상수로 나누기 ... 323
9.3.4 입력 크기 조절 ... 324
9.3.5 룩업 테이블 ... 326
9.4 가짜 소수점수 ... 333
9.5 추가 자료 ... 344
CHAPTER 10 소비 전력 줄이기
10.1 전력 소비 이해 ... 348
10.2 방에서 나갈 땐 등을 끄자 ... 351
10.2.1 주변장치 끄기 ... 351
10.2.2 사용하지 않는 I/O 기기 끄기 ... 351
10.2.3 프로세서 하위시스템 끄기 ... 352
10.2.4 낮은 클럭 사용하기 ... 352
10.3 프로세서를 슬립 상태로 ... 354
10.3.1 인터럽트 기반 코드 흐름 모델 ... 355
10.3.2 메인 루프 자세히 분석하기 ... 358
10.3.3 와치독 처리 ... 359
10.3.4 자주 깨우지 않기 ... 360
10.3.5 프로세서 체인 ... 360
10.4 추가 자료 ... 360
찾아보기 ... 363
더보기 닫기