SlideShare a Scribd company logo
1 of 21
序章(1/3)C++とは
• C++はC言語を拡張した言語です。(~後方互換)
• C++はいくつかのバージョンがあります。
EC++は黒歴史らしいので触れません。
年表 説明
C++98 1998 基本仕様の制定
C++03 2003 98年版の修正
C++11 2011 Auto, ラムダ式, 範囲For文,メモリー管理機能
C++14 2014 11年版の修正
C++17? 2017? 新機能の追加?
今回のテーマ
序章(2/3) どんな環境で使えるか?
• AVRやARM系(LPCやSTM)のマイコンで使える。
• もちろんWINDOWSやRASPBERRY PIでも使える。
• GCC,G++(GNU)が使えれば基本的に使える。
但し PIC, PSOCでは使えない。
• PIC32 (MIPS系)ではC++03相当まで。
• PSOC(ARM系)ではC++をサポートしていないが、魔改造すれば使える!?
序章 (3/3) 設定方法
LPCマイコンを例に上げると
PROJECT → PROPERTY
C++ BUILD → DIALECT
LANGUAGE STANDARD
で変更できる。
(ECLIPSE系なら基本的に同じ)
LPCマイコンはマイナーかな?
便利機能 (1/5) AUTO 文
• AUTO文は型を自動的に推測する機能です。
• 長々しい型を省略できる。
VECTOR<T>はT型の動的配列です。<VECTOR>にあるよ。
int a=10;
auto b=10; //同じ意味になります。
vector <int> vec(32);//32の大きさを持つ動的配列
vector<int>::iterator c=vec.begin();//長い…
auto d =vec.begin();//ね、楽でしょ。
便利機能(2/5) 範囲FOR文
• 範囲FOR文を使えば簡単にコレクションを一巡できる。
• 但し逆順で探索はできない。D言語ならあるらしいけど…
構文
• FOR (型 要素名: コレクション){…}
(SIZEOFで配列の個数を求めるテクニックはC言語でわりと便利です。)
便利機能(3/5) ラムダ式 (1/2)
• ラムダ式 … 関数の一種、関数オブジェクト
• 関数の中でも宣言できる。
• どんな型になるかはわからない。要 AUTO文
• 構文
[キャプチャ](引数)->戻り値{関数の実体}
キャプチャ…第二の引数のようなもの。最初のラムダ式を作るときに渡さされる
例文(省略あり)
auto random = []()->int{return rand()%256;}//乱数を返すラムダ式
int ans=random();
int index=10;
auto next=[&index]()->int{return ++index;}//indexを参照
int pos = next();//pos=11
便利機能(3/5) ラムダ式 (2/2) 一例
• 使い方
• SORTの条件を楽に指定できる。
• 並列処理関係のライブラリで使う。
例文 (省略あり)
list<int> lst(64);
sort(lst.begin(),lst.end(),[](int a,int b){return a<b;});
#include <ppl.h>
vector<double> vec(128);//何か代入したとする。
parallel_transform(vec.begin(), vec.end(), vec.begin(), [](double n)
{ return n*n; });//全部二乗
便利機能(4/5) スマートポインタ
• 普通のポインタの場合
• 生成と開放処理を明記しなくてはならない。(開放を忘れそうになる)
• スマートポインタの場合
• 開放処理を自動的に行わせることができる。
例文
#include <memory>
void func(){
int* cmn_ptr=new int(55);
std::unique_ptr<int> uni_ptr(new int(5));
~処理~
delete cmn_ptr;
}
便利機能(5/5) 整数型(C99)
• INTやFLOATでは環境依存のため実際の大きさがわからない。 SIZEOF(INT)=?
↑マイコンの場合、レジスタを直に叩くことが多いので困る。
・<STDINT.H>もしくは<CSTDINT>を使えば解決できる。
<STDINT.H>はC言語のライブラリなのでPICやPSOCでも利用できる。
例文(省略あり)
#include <stdint.h>
uint32_t a;//32bitの整数型 sizeof(a)=4
int64_t b;//64bitの自然数型 sizeof(b)=8
メモリ管理(1/4) MALLOCについて
• MALLOC…C言語で使われる動的にメモリーを配置する関数
しかし、動的に可変長のメモリーを確保すると断片化する。
安価なマイコンには実装されていないMMU(メモリー管理ユニット)及びGCはないと仮定してる。
メモリ管理(1/4) MALLOCについて
• MALLOC…C言語で使われる動的にメモリーを配置する関数
しかし、動的に可変長のメモリーを確保すると断片化する。
メモリ管理(1/5) MALLOCについて
• MALLOC…C言語で使われる動的にメモリーを配置する関数
しかし、動的に可変長のメモリーを確保すると断片化する。
• 固定的な大きさを確保する関数なら断片化を避けることでできる。※メモリ利用効率は落ちる。
メモリ管理(2/4) 自作しよう
• データ構造
• 配列+その要素での単方法リスト
• アルゴリズム
Template <size_t size , unsigned num> class MemPool {
union item { //共有体で強引にメモリー配置を設定
uint8_t dummy[size];
item* next;
} data[num];//配列
item *top; //使っていない要素の単方向リスト
…
}
メモリ管理(2/4) 自作しよう
• データ構造
• 配列+その要素での単方法リスト
• アルゴリズム
• 初期化
for (unsigned int i = 0; i < num; i++) {
//スタックにおけるPush動作と同じ
data[i].next=top;
top=&data[i];
}
メモリ管理(2/4) 自作しよう
• データ構造
• 配列+その要素での単方法リスト
• アルゴリズム。
• 初期化
• 確保
Void* CreatePointer(){
//スタックのPopと同じ
item* temp = top;
top = top->next;
temp->next = nullptr;/*バグ防止*/
return (void*)temp;
}
メモリ管理(2/4) 自作しよう
• データ構造
• 配列+その要素での単方法リスト
• アルゴリズム
• 初期化
• 確保
• 開放
Void ReleasePointer(void* ptr){
//スタックのPushと同じ
if (p!=nullptr){
item* p=(item*)ptr;
it->next = top;
top = it;
}
}
メモリ管理(3/4) C++に対応させよう
• C++は演算子を変更する機能がある。
• メモリーの管理に使うNEW とDELETEも同様に変更できる。
例文(省略あり)
class Object{
private: static MemPool pool(sizeof(Object),100);
public: Object()=default;//default文(C++11以降)を覚えると楽
virtual ~Object()=default;
void* operator new (size_t sz){
return pool.CreatePointer(sz);//自作関数をここに入れる。
}
void operator delete(void* ptr){
pool.ReleasePointer(ptr); //自作関数をここに入れる。
}
}
メモリー管理(4/4) まとめ
• メモリープールを使えば断片化は避けられる。
• 制約の多いマイコンでもC++11,14の機能を使えば(慣れれば)
安全且つ楽にメモリー管理を行うことができる。
メモリープールの実装をしたコードを配布してます。
質疑応答
第二回東海北陸ロボコン交流会 川上プレゼン

More Related Content

Similar to 第二回東海北陸ロボコン交流会 川上プレゼン

C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話Kinuko Yasuda
 
C++0xの概要(デブサミ2010)
C++0xの概要(デブサミ2010)C++0xの概要(デブサミ2010)
C++0xの概要(デブサミ2010)Akira Takahashi
 
C++ AMPを使ってみよう
C++ AMPを使ってみようC++ AMPを使ってみよう
C++ AMPを使ってみようOsamu Masutani
 
Boost勉強会 #10 ディスカッションまとめ
Boost勉強会 #10 ディスカッションまとめBoost勉強会 #10 ディスカッションまとめ
Boost勉強会 #10 ディスカッションまとめSigureya
 
第10回FA設備技術勉強会 C言語再学習
第10回FA設備技術勉強会 C言語再学習第10回FA設備技術勉強会 C言語再学習
第10回FA設備技術勉強会 C言語再学習insertpenis
 
Stellaris を使った組み込みアプリ開発ガイド
Stellaris を使った組み込みアプリ開発ガイドStellaris を使った組み込みアプリ開発ガイド
Stellaris を使った組み込みアプリ開発ガイドryos36
 
ROBOMECH2023 RTミドルウェア講習会 第1部
ROBOMECH2023 RTミドルウェア講習会 第1部ROBOMECH2023 RTミドルウェア講習会 第1部
ROBOMECH2023 RTミドルウェア講習会 第1部openrtm
 
Monomeeting 20081022
Monomeeting 20081022Monomeeting 20081022
Monomeeting 20081022Atsushi Eno
 

Similar to 第二回東海北陸ロボコン交流会 川上プレゼン (12)

C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話C++でCプリプロセッサを作ったり速くしたりしたお話
C++でCプリプロセッサを作ったり速くしたりしたお話
 
C++0xの概要(デブサミ2010)
C++0xの概要(デブサミ2010)C++0xの概要(デブサミ2010)
C++0xの概要(デブサミ2010)
 
C++ AMPを使ってみよう
C++ AMPを使ってみようC++ AMPを使ってみよう
C++ AMPを使ってみよう
 
Boost勉強会 #10 ディスカッションまとめ
Boost勉強会 #10 ディスカッションまとめBoost勉強会 #10 ディスカッションまとめ
Boost勉強会 #10 ディスカッションまとめ
 
第10回FA設備技術勉強会 C言語再学習
第10回FA設備技術勉強会 C言語再学習第10回FA設備技術勉強会 C言語再学習
第10回FA設備技術勉強会 C言語再学習
 
Gstreamer Basics
Gstreamer BasicsGstreamer Basics
Gstreamer Basics
 
Runtime c++editing
Runtime c++editingRuntime c++editing
Runtime c++editing
 
Stellaris を使った組み込みアプリ開発ガイド
Stellaris を使った組み込みアプリ開発ガイドStellaris を使った組み込みアプリ開発ガイド
Stellaris を使った組み込みアプリ開発ガイド
 
ROBOMECH2023 RTミドルウェア講習会 第1部
ROBOMECH2023 RTミドルウェア講習会 第1部ROBOMECH2023 RTミドルウェア講習会 第1部
ROBOMECH2023 RTミドルウェア講習会 第1部
 
Monomeeting 20081022
Monomeeting 20081022Monomeeting 20081022
Monomeeting 20081022
 
Implement tech
Implement techImplement tech
Implement tech
 
Golang tokyo #7 qtpm
Golang tokyo #7 qtpmGolang tokyo #7 qtpm
Golang tokyo #7 qtpm
 

More from 東海北陸ロボコン 交流会

第二回東海北陸ロボコン交流会 豊田高専プレゼン
第二回東海北陸ロボコン交流会 豊田高専プレゼン第二回東海北陸ロボコン交流会 豊田高専プレゼン
第二回東海北陸ロボコン交流会 豊田高専プレゼン東海北陸ロボコン 交流会
 
第二回東海北陸ロボコン交流会 鈴鹿高専プレゼン
第二回東海北陸ロボコン交流会 鈴鹿高専プレゼン第二回東海北陸ロボコン交流会 鈴鹿高専プレゼン
第二回東海北陸ロボコン交流会 鈴鹿高専プレゼン東海北陸ロボコン 交流会
 

More from 東海北陸ロボコン 交流会 (15)

富山高専射水キャンパス
富山高専射水キャンパス富山高専射水キャンパス
富山高専射水キャンパス
 
mbedのすゝめ(追加バージョン)
mbedのすゝめ(追加バージョン)mbedのすゝめ(追加バージョン)
mbedのすゝめ(追加バージョン)
 
岐阜Bノブちゃんズ
岐阜Bノブちゃんズ岐阜Bノブちゃんズ
岐阜Bノブちゃんズ
 
第二回東海北陸ロボコン交流会 豊田高専プレゼン
第二回東海北陸ロボコン交流会 豊田高専プレゼン第二回東海北陸ロボコン交流会 豊田高専プレゼン
第二回東海北陸ロボコン交流会 豊田高専プレゼン
 
第二回東海北陸ロボコン交流会 鈴鹿高専プレゼン
第二回東海北陸ロボコン交流会 鈴鹿高専プレゼン第二回東海北陸ロボコン交流会 鈴鹿高専プレゼン
第二回東海北陸ロボコン交流会 鈴鹿高専プレゼン
 
第二回東海北陸ロボコン交流会 井木プレゼン
第二回東海北陸ロボコン交流会 井木プレゼン第二回東海北陸ロボコン交流会 井木プレゼン
第二回東海北陸ロボコン交流会 井木プレゼン
 
第二回東海北陸ロボコン交流会 関口プレゼン
第二回東海北陸ロボコン交流会 関口プレゼン第二回東海北陸ロボコン交流会 関口プレゼン
第二回東海北陸ロボコン交流会 関口プレゼン
 
鈴鹿高専ロボコン 部活紹介と技術紹介
鈴鹿高専ロボコン 部活紹介と技術紹介鈴鹿高専ロボコン 部活紹介と技術紹介
鈴鹿高専ロボコン 部活紹介と技術紹介
 
沼津高専ロボコン部 部活動紹介
沼津高専ロボコン部 部活動紹介沼津高専ロボコン部 部活動紹介
沼津高専ロボコン部 部活動紹介
 
富山高専射水キャンパス ロボット紹介
富山高専射水キャンパス ロボット紹介富山高専射水キャンパス ロボット紹介
富山高専射水キャンパス ロボット紹介
 
岐阜高専B-ロボット紹介
岐阜高専B-ロボット紹介岐阜高専B-ロボット紹介
岐阜高専B-ロボット紹介
 
岐阜高専A-ロボット紹介
岐阜高専A-ロボット紹介岐阜高専A-ロボット紹介
岐阜高専A-ロボット紹介
 
富山本郷キャンパス-ロボット紹介
富山本郷キャンパス-ロボット紹介富山本郷キャンパス-ロボット紹介
富山本郷キャンパス-ロボット紹介
 
プログラムの高速化
プログラムの高速化プログラムの高速化
プログラムの高速化
 
MDの基本と応用について
MDの基本と応用についてMDの基本と応用について
MDの基本と応用について
 

Recently uploaded

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 

Recently uploaded (11)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

第二回東海北陸ロボコン交流会 川上プレゼン