Lamda on AVR C/C++ 최신 표준과 임베디드의 접목.

Slides:



Advertisements
Similar presentations
문화컨텐츠의 현지화 무역학과 / 4조 이영화 장세은 조하영 한민구 국제마케팅(N) 강명수 교수님.
Advertisements

3 학년 문제가 남느냐, 내가 남느냐 1. ( 아씨방 일곱 동무 ) 아씨의 방에는 바느질을 위한 친구가 몇 명이 있었나요 ? 정답은 ? 일곱.
스마트폰을 이용한 파트너봇. 스마트폰을 이용한 파 트너봇, 혜윰 Ⅰ. 프로젝트 소개 Ⅱ. 프로젝트 목표 Ⅲ. 주요기능 설명 Ⅳ. 개발 도구 Ⅴ. 작업 분배 Ⅵ. 예상 결과물.
중등특수교육과 엄승현 이영재 이지수 속요에 대하여.
지도교수 : 박진식 교수님 조 원 : 홍승기, 이병용, 백승준, 조근용, 조동현, 한정협, 이상하.
1 ‘ 우리나라의 주요공업 ’ - 정도웅, 주민혁, 안수진, 백경민, 엄다운, 박경찬 -.
수유부의 약물복용 시 주의점 발표자 조기성. 모유 수유의 장점 모유 수유의 장점은 ? 위장관 질환 발생감소 영아 돌연사 발생감소 아토피 질환 발생감소 정서적 안정.
똘기 : 채 익지 않은 과일. 똘기 소개 일명 발표동아리. 똘기는 발표에 대한 두려움을 가지고 있는 학우들에게 ‘ 자신감 ’ 을 키워줄 수 있도록 하자는 취지에서 만들어졌다. 평소 강의 시간보다 편안하고 자유롭게 발표해 볼 수 있는 기회를 제공함으로써 발표력 향상에 기여하는.
일 시 : (목) 장 소 : 문산종합사회복지관장) 파주시문산종합사회복지관 기관안내.
미국의 미디어교육 신문방송학과 강진구 한인수 곽모란 이명현.
PRESENTATION 저온화상이란?
양성평등 리더만들기 조.
대한민국 교육제도 공익광고 영상기획안 Made in 주모 문화콘텐츠학과 여현모
안성시의 관광객 유치를 위한 바우덕이 활용 방안 관광경영학과 이윤지.
쯔쯔가무시 예방수칙을 실천하세요! 한국산업안전보건공단 광주지역본부.
변비 재활전문센터 재활 간호사 김은화.
교재:C언어로 쉽게 풀어 쓴 자료구조 (생능출판사, 천인국저)
공부할 내용 조상들이 살던 곳 자연과 잘 어울리는 한옥 지방에 따라 서로 다른 집의 모양 섬 지방의 집
사랑, 데이트와 성적 자율성 :데이트 성폭력!!! 성폭력예방교육 전문강사 / 여성학 전공 신 순 옥.
2016 ITA 1월 강의 C Programming -4일차- 포인터배열 및 이중포인터 정대진 ( )
C++ Espresso 제1장 기초 사항.
2012사회복지현장실습 고윤지.
퇴계와 율곡의 사회사상 비교 남 일 재 동서대학교 교수/ 정치학 박사 1. 퇴계 이황과 율곡 이이의 약전(略傳)
Q & A (사실상 혼인·이혼) Q. 사실상 혼인·이혼 관계를 어떻게 처리해야 하나요?   사실 혼인·이혼은 부부 모두 동의 여부를 확인하고, 자녀, 이·통·반장으로부터 「사실(이)혼 확인서」를 징구해야 합니다. 만약 어느 한쪽이 동의하지 않는 경우는.
베 어 스 타 운 동 계 시 즌 주소: 경기도 포천시 내촌면 소학리 295번지 문의 : (代)
501. 군인들의 세상 502. 민정 이양과 한일회담 이선용.
쌓지 말고 해소하자 이 주휘 이 진영 전 민석 전 혜림.
2015년 하반기 소방교육 자 유 전 공 학 부 (금) 안녕하십니까 자유전공학부 행정실 입니다.
강좌명 : C++프로그래밍 (C++ Programming)
질적연구방법의 유형 발표자 : 김성순, 천보경, 황희진(석사 2학기) 발표일 : (수)
8. 객체와 클래스 (기본).
주방 안전지킴이 강민준 강재성 이로운 최민성.
1. 화면 및 메뉴소개 ▣ 온라인사업지원시스템 소개 ▶ 온라인사업지원시스템이란
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
C ++ 프로그래밍 시작.
아두이노 기초 제 1 주 강의 소개, 환경 설정.
2017 어깨동무 멘토링 라이프 오리엔테이션 2017년 3월 22일(수) ~ 23일(목).
Presentation 정보통신과 6조.
행정학과 김수민 중국 춘절의 교통문제.
명품 C++ 프로그래밍 1장. C++ 시작.
제 11 장 전처리기.
1. 화면 및 메뉴소개 ▣ 온라인사업지원시스템 소개 ▶ 온라인사업지원시스템이란
OpenCV 설치 및 구성 OpenCV
객체 지향 프로그램(C++)을 위장한 절차식(C) 패러다임 자동 식별화 구축 (Constructing an Automatic system for identifying the facked Procedural-Oriented Paradigm(C) within Object-Oriented.
정치학원론 5주차 제 4장 정치체계론 행정학과 구경완, 김정은, 박하륜, 양민지, 이환규.
프로젝트 학습 -프로젝트의 운영- 초등교육학과B 정예은.
패시브하우스 신안산대학교 l 건축과 l 박효동, 박창준, 지예림.
정치개혁의 가능성 논의 권력구조 개편을 통하여 본 -개헌을 통한 정부형태의 변화를 중심으로 [한국정치론] 윤성이 교수님
1 [100인의 멘토] 학교로 찾아가는 진로교육 □ 목적 인천지역 자유학기제 대상 청소년에게 건설관련 전문분야에 대한 진로탐색을 통해 체계적인 진로교육을 실시 □ 개요 ○ 참가대상: 18개 학교(학교당 1학급 기준) *협의가능 ○ 활동장소 : 각 선정 학교.
유비쿼터스 계획보고서 Smart bicycle 1조 – 강성민 김수용 이승철 최병수 최소라.
속요 국어국문학과 김보민 국어국문학과 조나현 제목 창의적으로 바꿔야 함.
5. 논리적 자료표현 : 구조체.
치료 레크레이션 프로그램 (지적 장애 대상) 과 목: 학 과: 학 번: 이 름: 제 출 일 자 담 당 교 수:
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
3조 권기태 윤주영 은화령 이형찬 이송민 김동욱 한승묵
노년기 발달 장안대 행정법률과 세류반 정 오 손
03. 메모리 관리 C++ 프로그램에서 다룰 수 있는 메모리의 종류
1.비 사업용(자가용 및 관용) 차 종 적 용 상 의 구 분 승합 자동차 (버스) 1 종
LOGOTYPE 춤추는 풍선 팀장 : 이준호 팀원 : 장원진.
포인터와 배열 조 병 규 한 국 교 통 대 학 교 SQ Lab..
태국 문학 욜라다 왓짜니 싸란차나 팟차라와라이 끼따야펀 르앙다우 타니다.
10장 템플릿과 표준 템플릿 라이브러리(STL)
계피(CINNAMON) MADE By 김소연 안미소 조은비.
경영학의 상황학파에 대해서… 경제학과 3학년 최준용 회계학과 4학년 진현빈
워밍업 실뭉치 전달게임.
노인학대예방 교육 교육강사 시 설 장 송나겸 보성실버센터.
맞춤형 사법서비스 구축 4단계 주요 변경업무 전자공탁
음파성명학 최종욱.
발 표 자 : 7조 손 창 국 윤 오 성, 박 진 완 객체 지향 프로그래밍 C++
강사 및 비전임교원 공개채용시스템 메뉴얼 교 무 연 구 팀.
Presentation transcript:

Lamda on AVR C/C++ 최신 표준과 임베디드의 접목

목차 C99 C11 C++ on AVR Lambda on AVR (C++11)

C99

gcc의 –std= 옵션

gcc의 –std= 옵션 https://gcc.gnu.org/onlinedocs/gcc/C-Dialect-Options.html#C-Dialect-Options

ANSI C… 반복문 변수 i 를 다른 이름으로 바꿔야 한다면? 1. 만약 1번에 해당하는 처리 코드가 1000줄이 넘어간다면? 2. 3. 4.

ANSI C… 얼핏 봐서는 맞는 코드 같지만.. 표준 타입을 ANSI C로 하면?? !!!!!!!!!!

ANSI C… 왜 이런 일이 발생할까? C99 표준 PDF, ‘주석’ 부분에서:

C99 표준 int, char 등 변수 선언이 함수 또는 블록의 도 입부에서만 일어나지 않아도 된다. 대표적인 예시는 반복문 index 변수 C99 Before C99

C99 표준 인라인 함수 키워드 (inline) 은 C99부터 정식 표준이 됨. 그 전까지는 컴파일러 확장으로 구현됨. 강한 타입 검사 및 #define 매크로 함수의 () 처리 블록에 서 오는 혼동 제거 gcc에서는 최적화 옵션이 –O1 이상이어야 작동. Before C99 C99

C99 표준 인라인 함수 예시

C99 표준 가변 길이 배열은 C99에서부터 정식으로 포 함된 기능 배열 길이를 가변적으로 설정할 수 있음 malloc() 을 사용하지 않음으로 가독성 향상

C99 표준 가변 길이 배열 예시

C99 표준 가변 길이 배열 예시

C11

C11 C99 이후의 C언어 표준 개정 불안정한 gets() 함수를 제거하고 gets_s() 함수를 표준에 편입. <threads.h> 에서 스레드 지원. 그러나.. AVR은 8-bit 아키텍처이므로 C11의 혜택을 많이 받을 수는 없음.

C++ on AVR

C++ on AVR

C++ on AVR AVR Studio 5.0 ▲ avr-gcc v3.0 ▲ (WinAVR 버전 20100110에서 지원가능) AVR Studio 4.xx 에서는 관련 프로젝트를 만들 수 없도록 되어 있음. Arduino 프로젝트에서 객체 지원을 위해 C++을 사용

C++ on AVR 입출력 스트림 (iostream, fstream) 객체를 지원하지 않음 템플릿 지원 STL(Standard Template Library)를 지원하지 않음. C 프로그램에 비해 바이너리 크기가 커질 수 있음.

C++ on AVR new, delete 연산자가 없음. 따라서 직접 만들어서 사용해야 함. ※출처 : AVRFreaks

C++ on AVR C99 표준에 적용된 대부분의 내용은 C++에서 무 리 없이 적용가능 C99 표준이 C++98 (C++ 의 98년도 표준) 에서 변 경된 내용을 C에 흡수한 것이기에 가능한 것. … for 문에서 int 형 변수 선언하기 적용 예시

C++ on AVR 객체 동적 할당이 아닌, 객체 변수 선언 의 경우, 생성자는 정상적으로 동작함. main() 함수에서 LED 객체 변수를 선언하면 자동으로 생성자가 호출됨. LED 클래스 선언

C++ on AVR 인터럽트는 friend 함수로 해결하기 … 헤더 예시 소스 파일 예시 ※예시를 위해 간략화 한 것으로, 실제 적용시에는 알맞게 변형하여 적용

C++ on AVR namespace (이름 공간) 사용 가능 C언어에서의 함수 충돌 방지 방법보다 좀 더 편하 다!

C++ on AVR namespace (이름 공간) 사용 가능 C언어에서의 함수 충돌 방지 방법보다 좀 더 편하 다!

C++ on AVR 템플릿 사용 가능 typename 템플릿을 사용할 때, 템플릿의 가지 수에 따라 바이너리 크기가 커지니 주의해야 함. namespace 가 선언된 헤더

LAMBda on AVR

C++11 ( or C++0x) C++98 -> C++03 이후 8년만의 C++ 개 정 언어 자체의 최적화, 컴파일 성능 향상 및 새로운 기능들을 추가

C++11 ( or C++0x) C++98 -> C++03 이후 8년만의 C++ 개 정 언어 자체의 최적화, 컴파일 성능 향상 및 새로운 기능들을 추가

C++11 ( or C++0x) C++11 의 대표적 키워드, auto 원래 auto는 변수를 레지스터로 처리할 지, 메모리로 처리할지 컴파일러가 알 아서 결정하라는 의미로, C++03 에 이 미 유명무실했던 키워드. C++11 에서는 이를 자동 타입 추론으 로 새로 정의함.

C++11 ( or C++0x) auto 키워드 예시 출처: http://egloos.zum.com/frompt

람다식 (Lambda Expression) C++11 에서 도입된 새로운 함수 기술 방식. 그 자리에서 익명의 함수를 만들어내 기 때문에 작업 체인(task-chain) 을 직관 적으로 작성할 수 있음. C++11식 람다식은 C의 함수 포인터를 대체할 수 있음.

람다식 (Lambda Expression) 람다 식을 사용하려면, C++ 컴파일러 의 표준을 C++11 이상을 사용하도록 설정해야 함. -std=c++11 C++11 표준으로 컴파일 -std=gnu++11 C++11 표준에 GNU 확장을 적용하여 컴파일

람다식 (Lambda Expression) 람다 식 개요 ( [ <Refs> ] ( <Args> ) -> <Ret Type> { } ) <Refs> 외부 참조 변수. 클래스 내부에서 람다가 사용될 경우, 참조할 변수들을 지정할 수 있다. 함수 포인터를 대체하려면 여기에 아무것도 없어야 한다. <Args> 람다 함수의 매개 변수. <Ret Type> 반환형. 생략 가능. 생략 시 자동으로 맞는 형태로 고정. 컴파일러가 반환형을 추론할 수 없으면 컴파일 에러.

Lambda on AVR C 라이브러리 함수 qsort 의 람다식 예시 … 람다 식 적용 기존의 qsort 호출

편하다! Lambda on AVR qsort 에서 비교할 데이터 타입이 달라진 경우.. 기존의 qsort 호출 새로운 compare 함수를 작성하거나, 기존에 작성한 compare 함수의 정의를 찾아가면서 수정해야 함. 람다 식 qsort 의 람다 부분만 수정! 편하다!

결론

결론 C++ 은 언어 자체가 매우 방대하며, 제 대로 사용하기 위해서는 언어의 기능 을 약간 제한할 필요가 있다! AVR은 하드웨어 제어를 하기 때문에 C 언어 수준으로 제한하여 사용하자. 그 외에 C++의 최신 표준을 적용하여 코드의 가독성을 높이자.

Q&A Extra..

Thank you!

컴파일러 확장 컴파일러 확장! 잠깐! 우리는 지금까지 C 에서 // 키워드를 주석으로 배웠는데?? -std=gnu90? –std=gnu99?

컴파일러 확장 컴파일러가 자체적으로 만들어낸 확장 C언어 표준에는 없는 것이지만, 컴파일 러가 추가적으로 만들어낸 확장 -std=gnu90? –std=gnu99? 컴파일러가 자체적으로 만들어낸 확장 C언어 표준에는 없는 것이지만, 컴파일 러가 추가적으로 만들어낸 확장 컴파일러마다 구현된 확장이 다르다. 표준을 지키지 않은 C코드가 컴파일러 를 타는 결정적인 이유 중 하나

컴파일러 확장 GCC 컴파일러 확장 중 C++ 스타일 주석 부분에서: ※원래대로라면 // 키워드 주석은 사용 불가능하나 GNU 확장 때문에 사용 가능!

컴파일러 확장 확장 중 대표격인 #pragma once ※같은 gcc라도 버전에 따라 #pragma once가 사용가능하지 않은 버전도 있다!