신뢰성을 위한
고급 임베디드 C 최적화

line
  • 과정번호1546487096
  • 교육일정3월 11일 ~ 3월 15일
  • 교육시간5일 / 35시간
  • 수강료950,000원

교육모집정보

교육기간(시작일~종료일) 수업시간 환급여부 수강료 환급금액우선대상(대기업) 신청하기
2019-03-11 ~ 2019-03-15 09:30 ~ 17:30 \950,000

SA바우처 : 일

교육쿠폰 : 9일

\
(\)
수업 신청하기
2019-06-17 ~ 2019-06-21 09:30 ~ 17:30 \950,000

SA바우처 : 일

교육쿠폰 : 9일

\
(\)
수업 신청하기
line

교육개요

최근 사물인터넷이 등장하면서 임베디드 시스템에 대한 안정성과 신뢰성 문제가 점점 중요해지고 있습니다.

임베디드 시스템은 밧데리로 동작하고 저성능의 CPU, 저용량의 메모리를 사용하며 높은 동작 신뢰성을 요구하고 있습니다.

기존의 문법이나 알고리즘을 기반으로하는 C 언어 교육 방법은 코드의 최적화나 신뢰성에 포커스가 맞춰져 있지 않기 때문에

임베디드를 위한 코딩 능력이 보다 필요하게 됩니다.

과정에서는 임베디드 환경에 맞도록 C 언어의 문법과 MISRA-C 함께 신뢰성을 위해 어떤 식으로 코드를 작성해야 하는지

살펴보고 C 언어에서 중요한 포인터를 제대로 활용하는 방법 및 ARM 기반의 C 코드 최적화와 GNU 도구들을 이용해서 코드의

신뢰성을 제고하는 코딩 스킬을 학습할 있습니다.


line

교육대상

임베디드 시스템 프로그래머

임베디드 시스템 펌웨어 개발자

임베디드 리눅스 디바이스 드라이버 설계자

코드 품질 평가 신뢰성 평가 담당자

• SW 개발 프로젝트 관리자


line

특이사항

커리큘럼

  • 1

    Day

  • Time 1  · 사물인터넷과 임베디드

               · 임베디드 시스템의 구성​

               · 오픈 소스 하드웨어와 라즈베리 파이

    Time 2  · 라즈베리 파이를 위한 준비

               · 라즈베리 파이를 위한 환경 설정

               · 디스크 이미지의 준비

    Time 3  · 리눅스의 구조

               · 리눅스의 기본 명령어

               · vi 에디터

    Time 4  · C와 main( ) 함수

               · 코드 최적화 기법의 개요

               · 클린 코드와 MISRA-C

    Time 5  · C언어의 기초

               · C언어의 자료형과 주의점

               · 데이터의 형변화 규칙과 변수의 최적화

    Time 6  · Const와 리터럴 상수, 열거형

               · 표기법과 수식

               · 연산자와 문제점

    Time 7  · 표준 입출력 라이브러리

               · 고급 printf( )와 scanf( ) 함수

               · GCC 컴파일러와 도구

    Time 8  · main( ) 함수의 호출

               · ELF 포맷과 파일 구조

               · nm 명령어와 메모리 구조​ 

  • 2

    Day

  • Time 1  · .text, .data, .bss, 스택과 힙

               · 스트링 테이블과 od 명령어

               · C언어의 메모리 구조

    Time 2  · 지역변수와 동적할당의 문제

               · 프로세스의 스택과 메모리

               · 모듈화 프로그래밍과 make

    Time 3  · 디버깅을 위한 기술

               · gdb와 objdump 명령어의 사용

               · objcopy 명령어의 사용    

    Time 4  · 메모리 관리를 위한 도구

               · Electric Fence와 메모리 테스트

               · Valgrind와 오류 찾기

    Time 5  · 리눅스의 라이브러리

               · ar 명령어와 정적 라이브러리

               · 심볼 출동의 문제점

    Time 6  · Weak 심볼

               · 공유라이브러리와 의존 관계

               · 동적 라이브러리

    ​Time 7  · 프로파일링을 위한 도구

               · time 명령어

               · gprof 유틸리티

    Time 8  · 절차적 프로그래밍과 구조화

               · 순서도와 의사 코드의 표현

               · C의 조건문과 바이너리 나누기    

  • 3

    Day

  • Time 1  · 배열 인덱스와 Lookup Table

               · if ~ else 문과 switch문 문제

               · C언어의 goto문 문제

    Time 2  · 순환문과 루프 종료, 빠른 순환 종료

               · break 문과 countinue문 문제

               · 순환문의 최적화

    Time 3  · 배열과 포인트의 초기화

               · 문자열의 처리와 문제

               · 2차월 배열의 1차원 사상​

    Time 4  · 포인터를 이용한 변수 접근

               · 포인터의 사용 접근 문제

               · 포인터 체인과 void*형

    Time 5  · 증감 연산자와 포인터 문제

               · 포인터의 사칙연산 문제

               · 다차원 포인터

    Time 6  · 함수와 인자 문제

               · Call by value와 Call by Reference

               · 정적(static) 함수

    Time 7  · 함수의 가변 인자

               · 재귀 함수의 문제점

               · 함수 포인터와 함수 디자인

    Time 8  · 변수의 범위와 전역 변수 문제

               · 지역변수와 static 변수

               · 구조체와 공용체

  • 4

    Day

  • Time 1  · 배열과 Tic Tac Toe 게임

               · 인라인(inline) 함수

               · 비트 조작과 메모리 최적화

    Time 2  · 비트 연산과 쉬프트 연산자

               · 2의 보수와 비트 복합 연산자

               · 쉬프트 연산과 경계 처리 문제

    Time 3  · 프레임버퍼 프로그래밍

               · 색상의 종류와 비트의 합성

               · 저수준 파일 함수와 mmap( )

    Time 4  · 라즈베리 파이와 GPIO

               · C언어를 이용한 GPIO의 제어

               · 컴파일러 최적화와 volatile 변수

    Time 5  · wirlingPi 와 GPIO 프로그래밍

               · 스위치와 센서의 사용

               · 풀업 저항과 풀다운 저항

    Time 6  · 피에조 부저와 조도 센서

               · 모터와 트랜지스터의 사용

               · 트랜지스터와 스위치 증폭

    Time 7  · 라즈베리 파이의 통신 방식

               · SPI 통신 방식

               · 아날로그의 디지털 변환

    Time 8  · I2C 통신 방식과 CAN 통신

               · UART 통신과 시리얼 통신

               · 로그 출력을 위한 UART 프로그래밍  

  • 5

    Day

  • Time 1  · ARM 프로세서와 레지스터

               · ARM의 동작모드와 APCS

               · 예외 처리 과정과 파이프라인

    Time 2  · ARM 어셈블러와 명령어 형식

               · Hello, World! 프로그래밍

               · 산술연산과 데이터 이동

    Time 3  · 비교 연산과 논리 연산

               · 쉬프트와 곱셈 연산

               · Condition의 사용

    Time 4  · 조건문과 ARM 어셈블리

               · 어셈블러를 이용한 최적화

               · load/store 명령어 그리고 스택

    Time 5  · C파일과 어셈블러 파일의 사용

               · 인라인 에셈블리 구문

               · 어셈블리에서 C함수의 호출

    Time 6  · C코드 최적화

               · 지역 최적화와 루프 최적화

               · 루프의 융합과 루프 언롤링

    Time 7  · 루프 불변 코드 이동

               · 연감 강도 경감과 0으로 카운트

               · 전역 최적화와 레지스터 할당

    Time 8  · 소프트웨어 파이프라인

               · 프리프로세서와 조건부 컴파일

               · 매크로 정의의 문제점​