|
챕터 1 임베디드 시스템과 소프트웨어의 범위
임베디드 시스템의 구성 요소 하드웨어와 소프트웨어의 역할 구분 펌웨어와 임베디드 소프트웨어의 차이 실시간 요구의 의미 자원 제약의 의미와 영향 일반 소프트웨어와의 개발 관점 차이 챕터 2 개발 환경과 빌드 흐름 이해 소스 코드와 프로젝트 구조 컴파일과 링킹의 개념 크로스 컴파일의 개념 바이너리 산출물의 종류 빌드 옵션이 동작에 미치는 영향 라이브러리와 의존성의 기본 재현 가능한 빌드의 조건 챕터 3 C 언어로 보는 임베디드 프로그래밍 핵심 정수형과 오버플로 관점 포인터와 메모리 접근 방식 구조체와 메모리 정렬 volatile의 의미와 사용 조건 비트 연산과 레지스터 표현 함수 호출과 스택의 기본 정적 변수와 전역 변수의 수명 챕터 4 메모리 구조와 실행 모델 플래시와 RAM의 역할 코드 영역과 데이터 영역 스택과 힙의 차이 초기화 데이터의 로딩 과정 링커 스크립트의 목적 메모리 맵의 해석 방법 리셋 이후 실행 흐름 챕터 5 하드웨어 접근의 기본 원리 메모리 맵드 I/O 개념 레지스터 읽기와 쓰기 흐름 비트 필드의 설정과 해제 주변장치 클럭과 리셋 개념 폴링 방식의 동작 구조 인터럽트 방식의 동작 구조 상태 플래그의 의미 챕터 6 인터럽트와 타이밍의 기초 인터럽트 발생과 처리 흐름 우선순위와 중첩 개념 ISR의 기본 제약 사항 공유 데이터 접근의 위험 원자적 연산의 필요 조건 타이머의 기본 동작 지연과 주기의 구분 챕터 7 통신 인터페이스의 기본 구조 UART의 프레이밍과 버퍼링 SPI의 클럭과 데이터 이동 I2C의 주소와 ACK 개념 전송 단위와 프로토콜 단위 송수신 큐의 기본 개념 에러 플래그의 의미 타임아웃의 필요성 챕터 8 RTOS 없이 만드는 프로그램 구조 메인 루프 기반 구조 상태 기계 기반 구조 이벤트 플래그 기반 구조 작업 분할과 실행 순서 주기 작업과 비주기 작업 공유 자원의 접근 규칙 응답성 확보의 기본 방법 챕터 9 오류 처리와 안정성 기본 오류의 분류와 경계 설정 리턴 코드와 상태 코드 설계 입력 값 검증의 원칙 예외 상황에서의 기본 동작 워치독의 목적과 개념 안전한 초기화 순서 로그와 진단 정보의 최소 구성 챕터 10 디버깅과 검증의 기본 절차 재현 가능한 문제 정의 가시화 가능한 관측 지점 브레이크포인트와 워치포인트 스텝 실행과 호출 흐름 확인 메모리와 레지스터 확인 간단한 테스트 구성 방법 빌드 설정과 결과 비교 |