Mruby基本研修

Size: px
Start display at page:

Download "Mruby基本研修"

Transcription

1 2018 年 3 月 23 日 特定非営利活動法人軽量 Ruby フォーラム SCSK 九州株式会社

2 目的軽量 Ruby mruby をマイコンボードにポーティングし機能拡張することで mruby による組込みソフトウェア開発技術の基礎を習得する 目標 mruby の概要 特徴の理解 mruby ライブラリ開発技術の習得 mruby ポーティング技術の習得 2

3 1. mrubyの概要 特徴 2. mruby 開発環境の構築 3. mrubyの実行 4. mrubyの機能拡張 5. mrubyのポーティングの概要 6. ターゲット開発環境の構築 7. mrubyのポーティング 8. mrubyの機能拡張 ( その2) 3

4

5 Ruby の良さを組込み開発に... 高い生産性で人気の言語 Ruby の軽量版 mruby RAM200KB 程度で動作 経済産業省 地域イノベーション創出研究開発事業 の 研究成果として 2012 年 4 月に mruby を公開 商用利用しやすい MIT ライセンスの OSS にてソース公開 5

6 高い生産性 ( 例 : ソケット通信処理 ) #include <stdio.h> #include <sys/socket.h> #include <arpa/inet.h> #include <string.h> int main(void) { int sock; int i; struct sockaddr_in svaddr; const char msg[] = "Hello!!"; } if ((sock = socket(pf_inet, SOCK_STREAM, IPPROTO_TCP)) < 0) { puts("socket() failed."); return 1; } memset(&svaddr, 0, sizeof(svaddr)); svaddr.sin_family = AF_INET; svaddr.sin_addr.s_addr = inet_addr(" "); svaddr.sin_port = htons(30000); if (connect(sock, (struct sockaddr*)&svaddr, sizeof(svaddr)) < 0) { puts("connect() failed."); exit(2); } for (i=0; i<10; i++) { if (send(sock, msg, strlen(msg), 0)!= strlen(msg)) { puts("send() failed."); exit(3); } } close(sock); return 0; C 言語 (35 行 ) require 'socket' begin sock = TCPSocket.open(" ", 30000) 10.times { sock.write("hello!!") } sock.close rescue => e p e end コードが長くなりがち 処理が複雑になりがち 危険なポインタ操作 メンテナンス性が低い Ruby (10 行 ) 短いコード 簡潔な記述 ポインタ操作なし メンテナンス性が高い 6

7 組込み開発に使える新言語 mruby mruby 軽量 Ruby PC 向けの ( 巨大な )Rubyを軽量化 仮想マシンとコンパイラ mruby 用の仮想マシン (VM) でアプリ ( バイトコード ) を実行 C 言語と相性バツグン Cモジュールの呼び出し Cアプリへの組込み 高い拡張性ライブラリ (mrbgem) で容易にmrubyの機能を拡張 7

8 よりコンパクトに mruby 専用のコンパクトな仮想マシン mruby VM バイトコードを実行 ( スクリプトよりコンパクトに ) 軽量化しても Ruby であるべき ISO, JIS 規格の Ruby(1.9 系 ) に準ずる言語仕様 Ruby 2.0 系にも対応中 8

9 より多くの環境で使えるように 環境依存させない mruby コアのコードは環境依存部を含まない VM 外部への影響を少なく グローバル変数を使用しない VM 管理情報にmrubyアプリの全情報を格納 インクリメンタルGCでシステム停止時間を短く 9

10 より使いやすく カスタマイズを容易に mrbconf.h 実行環境に合わせて最適化が可能 機能拡張を容易に build_config.rb mruby に組み込む機能を定義 mrbgems mruby を拡張するクラスライブラリ クロス開発を容易に build_config.rb クロスビルド方法をスクリプトで記述 toolchain クロスビルドツールを定義 10

11 Ruby との相違点 コンパイラ言語 C 言語との主従関係 RubyGemsとmrbgems 数値型の扱い 正規表現 扱える文字コード カスタマイズ 11

12 コンパイラ言語 Ruby Ruby スクリプトのインタプリタ実行 mruby mruby スクリプトのインタプリタ実行 mruby コンパイラで mruby スクリプトをバイナリに変換 コンパイル結果のバイナリを mruby VM で実行 12

13 C 言語との主従関係 Ruby Ruby から C 言語モジュールの呼び出しが可能 ( Ruby が主 C 言語が従 ) mruby mruby から C 言語モジュールの呼び出しが可能 ( mruby が主 C 言語が従 ) C 言語アプリケーションから mruby の呼び出しが可能 ( C 言語が主 mruby が従 ) 13

14 RubyGems と mrbgems Ruby Ruby 拡張ライブラリフレームワーク (RubyGems) C 言語または Ruby で機能拡張 実行時にライブラリを追加 mruby mruby 拡張ライブラリフレームワーク (mrbgems) C 言語または mruby で機能拡張 ビルド時にライブラリを追加 ( 実行時のライブラリ追加はオプション ) 14

15 数値型の扱い (1) Ruby Numeric +--- Integer 整数型 +--- Fixnum int 範囲内の数 +--- Bignum int 範囲を超える数 +--- Float 浮動小数型 演算結果が int 型を超える場合は Bignum に拡張される mruby Numeric +--- Integer 整数型 +--- Fixnum int 範囲内の数 Bignum 対応なし +--- Float 浮動小数型 演算結果が int 型を超える場合は Float に拡張される ( 有効桁数が減る ) 15

16 数値型の扱い (2) Ruby 演算結果の数値型は演算する値の型 (Integer / Float) によって決定される irb(main):001:0> 1 / 2 => 0 irb(main):002:0> 2 * 2.5 => 5.0 irb(main):003:0> mruby 演算結果の数値型は演算結果の値によって決定される > 1 / 2 => 0.5 > 2 * 2.5 => 5 > 16

17 正規表現 Ruby 正規表現 (Regexp クラス ) を標準装備 正規表現エンジンは固定 1.9 以前 Oniguruma 2.0 以降 Onigumo mruby 正規表現はオプション mrbgems で提供 正規表現エンジンを選択可能 mruby-onig-regexp mruby-pcre-regexp mruby-pure-regexp mruby-hs-regexp 17

18 扱える文字コード Ruby ASCII UTF-8 Shift_JIS EUC-JP Windows-31J などなど... mruby ASCII UTF-8 ( オプション ) 18

19 カスタマイズ Ruby 実行環境用のバイナリを配布 ( ソースコードも入手可能 ) バイナリ提供のためカスタマイズ不能 mruby ソースコード配布 ( そのままでは使えない ) ヘッダファイル ビルドスクリプト修正によるカスタマイズが可能 19

20

21 mruby のビルドに必要なもの Cコンパイラ リンカ (gccなど) GNU Bison ( パーサジェネレータ ) Ruby ( 本家 ) git ( バージョン管理システム ) 必須ではないです 上記が動作するパソコン (Windows, Mac, Linux) mrubyソースコード 21

22 mruby ビルド環境の構築 以下の内容に従って mruby のビルドに必要なツールをセット アップします Windows の場合 C: mruby-porting doc setup-mruby-devenv-win.html Mac の場合 ~/mruby-porting/doc/setup-mruby-devenv-mac.html 22

23 mruby ソースコードの取得 ビルド コマンド画面 (Windows: msys.bat Mac: ターミナル ) を開き 以下のコマンドを入力 Mac の場合は cd ~/mruby-porting $ cd /c/mruby-porting $ git clone $ cd mruby $ make 23

24 mruby ソースコードの構成 mruby/ benchmark/ ベンチマーク bin/ mrubyバイナリ出力ディレクトリ build/ ビルド用ディレクトリ host/ PC 用ビルド結果 doc/ mrubyドキュメント examples/ ビルドターゲットおよびmrbgemsの記述例 include/ mrubyヘッダファイル格納ディレクトリ lib/ mrubyビルドスクリプト格納ディレクトリ mrbgems/ 標準 mrbgems 格納ディレクトリ mrblib/ mrubyライブラリソースファイル (Rubyライブラリ) src/ mrubyソースファイル tasks/ ビルドタスクファイル test/ mrubyテストプログラム 24

25 mruby のビルドで作られるもの bin/mruby インタプリタ bin/mirb 対話型インタプリタ bin/mrbc コンパイラ bin/mrdb デバッガ build/host/lib/libmruby.a mruby VMライブラリ 25

26

27 mruby インタプリタ (mruby) Rubyスクリプトを解釈して実行 ( 本家 Rubyと同様 ) バイナリコード (MRBファイル) の実行も可能 開発環境での動作確認に利用 27

28 コマンド (mruby インタプリタ ) mruby [switches] file [arg1 [...]] switches -b バイナリ (MRB) ファイルの実行 -c 文法チェックのみ -e 'command' 1 行スクリプトの実行 -v バージョン表示後 詳細モード実行 --verbose 詳細モードで実行 --version バージョン情報表示 --copyright 著作権情報表示 28

29 Ruby スクリプトの実行 mruby-porting/src/01hello/hello.rb p 'Hello, mruby.' ' ' または " " で括られたものは文字列 (String) p は引数で指定した値の内容を画面表示するメソッド mruby-porting/src/02twice/twice.rb ary = [1, , "mruby", [1, 4, 7]] ary.each do v p v * 2 end [ ] で括られたものは配列 (Array) Array#each は配列の要素を順番に繰り返すメソッド 29

30 対話型 mruby インタプリタ (mirb) 対話形式でmrubyを実行 (Interactive mruby) CRubyの "irb" に相当 簡易的な動作確認には最適 30

31 コマンド ( 対話型 mruby インタプリタ ) mirb [switches] switches -v バージョン表示後 詳細モード実行 --verbose 詳細モードで実行 --version バージョン情報表示 --copyright 著作権情報表示 31

32 mirb 実行例 1 行入力毎に実行結果 ( 値 ) の確認が可能 "quit" または "exit" で終了 32

33 mruby コンパイラ (mrbc) Rubyスクリプトをバイトコードにコンパイル コンパイル結果のファイル出力 バイナリファイル (MRBファイル) C 言語ソースファイル ( バイナリデータのバイト配列 ) デバッグ情報の出力 33

34 コマンド (mruby コンパイラ ) mrbc [switches] file1 [file2 [...]] switches -c 文法チェックのみ -g デバッグ情報を生成 -o<outfile> コンパイル結果を <outfile> に出力 -v バージョン表示後 詳細モード実行 -B<symbol> Cソース ( 変数名 :<symbol>) で出力 -e リトルエンディアンでコンパイル -E ビッグエンディアンでコンパイル --verbose 詳細モードで実行 --version バージョン情報表示 --copyright 著作権情報表示 34

35 2 つのコンパイル結果出力形式 1. MRB ファイル (-B オプション指定なし ) 実行環境のファイルシステムに配置し mruby VMにロードして実行 実行環境にファイルシステムが必要 2. C ソースファイル (-B オプション指定あり ) アプリケーションの一部としてバイナリコードを組み込み メモリ上のバイナリをmruby VMに読み込ませて実行 ファイルシステムを持たない実行環境でも利用可能 35

36 mruby コンパイラの実行例 (1) $ mrbc hello.rb 36

37 mruby コンパイラの実行例 (2) $ mrbc Bappbin hello.rb 37

38 mruby VM ライブラリ (libmruby.a) mruby の全てのコンポーネントを含むスタティックライブラリ アプリケーションにスタティックリンクする ( アプリケーション に組み込む ) ことで アプリケーションから mruby を呼び出すこ とが可能 アプリケーション mruby アプリケーション libmruby.a mruby の機能を呼び出すことが可能 38

39 MRB ファイルの実行イメージ Ruby スクリプト class Foo def foo p foo end end 開発環境 パーサ mruby コンパイラ コードジェネレータ mruby VM バイナリ出力 mrb ファイル コピー 実行環境 既存 C/C++ アプリ ライブラリ mruby アプリケーション mruby アプリ mruby VM OS / ミドルウェア バイナリ入力 mrb ファイル 39

40 mruby アプリケーション例 (sample1.c) mruby-porting/src/03app-mrb/sample1.c #include "mruby.h" #include "mruby/dump.h" #include <stdio.h> mruby の API を使用する際に必要なヘッダファイル (mruby/include をインクルードパスに含める ) int main(int argc, char *argv[]) { mrb_state *mrb = mrb_open(); FILE *fp; mruby VM の初期化 } if ((fp = fopen(argv[1], "rb"))!= NULL) { mrb_load_irep_file(mrb, fp); fclose(fp); } mrb_close(mrb); return 0; MRB ファイルの読み込み ( バイトコード復元 ) と mruby VM の起動 mruby VM 終了 40

41 mruby アプリケーションの作成 コマンド画面から以下のコマンドを入力 Mac の場合は cd ~/mruby-porting $ cd /c/mruby-porting/src/03app-mrb $ make $./sample1 hello.mrb $./sample1 twice.mrb 41

42 Makefile の内容 MRUBY=../../mruby mruby アプリのコンパイル all: make -C $(MRUBY) $(MRUBY)/bin/mrbc -o./hello.mrb../01hello/hello.rb $(MRUBY)/bin/mrbc -o./twice.mrb../02twice/twice.rb gcc -osample1 sample1.c -I$(MRUBY)/include -L$(MRUBY)/build/host/lib -lmruby -lm clean: rm -f sample1 *.mrb libmruby.a をリンクする インクルードディレクトリを指定 42

43 mruby VM の初期化 (mrb_open) 関数型引数戻り値機能概要備考 mrb_state* mrb_open(); なし mrb_state(vm 情報 ) のポインタを返す mruby VM の初期化処理を行う 戻り値の mrb_state のポインタは 他の mruby の API を使用する際に必要となる mruby VM の全ての情報は mrb_state 構造体内に管理される そのため 基本的には mruby アプリケーションが mruby VM の外部に影響を及ぼすことはない ( ライブラリによる機能拡張で外部アクセスは可能 ) mrb_state 構造体は "mruby.h" 内で定義されている また mruby のソースコード内では mrb_state 構造体のポインタを格納する変数名を mrb とすることが慣習となっている 43

44 mrb_state 構造体 include/mruby.h にて定義 mruby VM の全ての情報を管理 有用なメンバ ( クラスのインスタンス ) object_class オブジェクトクラス module_class モジュールクラス string_class 文字列クラス array_class 配列クラス hash_class ハッシュテーブルクラス float_class 浮動小数点数クラス fixnum_class 整数クラス 44

45 MRB ファイルの実行 (mrb_load_irep_file) 関数型 mrb_value mrb_load_irep_file(mrb_state *mrb, FILE *fp); 引数 mrb mrb_state のポインタを指定する 戻り値 機能概要 備考 fp MRB バイナリのファイルポインタを指定する バイトコードの実行結果 ( 値は処理依存 ) を返す MRB ファイルを読み込み mruby プログラム ( バイトコード ) をメモリ上に復元した後に mruby VM 上で実行する 戻り値は mruby プログラムの処理結果により内容が異なる 45

46 mruby VM の終了 (mrb_close) 関数型 void mrb_close(mrb_state *mrb); 引数 mrb mrb_state のポインタを指定する 戻り値 機能概要 備考 なし mruby VM の終了処理を行う mruby VM および mruby アプリケーションが使用したメモリ領域が解放される 46

47 mruby で使用する値 (mrb_value 構造体 ) typedef struct mrb_value { union { mrb_float f; void *p; mrb_int i; mrb_sym sym; } value; enum mrb_vtype tt; } mrb_value; f TT p 未使用 TT i 未使用 TT sym 未使用 TT 構造体に格納している値の型を示す < 主な定義値 > MRB_TT_FIXNUM 整数値 MRB_TT_SYMBOL シンボル MRB_TT_FLOAT 浮動小数値 MRB_TT_ARRAY 配列オブジェクト MRB_TT_STRING 文字列オブジェクト 47

48 mruby アプリケーション動作シーケンス 48

49 C ファイルの実行イメージ Ruby スクリプト class Foo def foo p foo end end パーサ mruby コンパイラ コードジェネレータ mruby VM バイナリ出力 C ソースファイル const uint8_t appbin[] = { 0x52, 0x49, 0x54, 0x45,... 開発環境 実行環境 mruby アプリケーション アプリケーションにリンク 既存 C/C++ アプリ ライブラリ mruby アプリ mruby VM OS / ミドルウェア バイナリ入力 バイトコード (ROM 上 ) 49

50 mruby アプリケーション例 (sample2.c) mruby-porting/src/04app-c/sample2.c #include "mruby.h" #include "mruby/irep.h" int main(int argc, char *argv[]) { mrb_state *mrb = mrb_open(); extern uint8_t app1[], app2[]; mrbc -B でのコンパイル結果であるバイナリデータの外部変数宣言 } mrb_load_irep(mrb, app1); mrb_load_irep(mrb, app2); mrb_close(mrb); return 0; バイナリデータ読み込み ( バイトコード復元 ) 50

51 mruby アプリケーションの作成 コマンド画面から以下のコマンドを入力 Mac の場合は cd ~/mruby-porting $ cd /c/mruby-porting/src/04app-c $ make $./sample2 51

52 Makefile の内容 MRUBY=../../mruby mruby アプリのコンパイル all: make -C $(MRUBY) $(MRUBY)/bin/mrbc -Bapp1 -o./hello.c../01hello/hello.rb $(MRUBY)/bin/mrbc -Bapp2 -o./twice.c../02twice/twice.rb gcc -osample2 sample2.c hello.c twice.c -I$(MRUBY)/include -L$(MRUBY)/build/host/lib -lmruby -lm clean: rm -f sample2 hello.c twice.c インクルードディレクトリを指定 libmruby.a をリンクする アプリケーションバイナリをリンク 52

53 バイナリデータ読み込み / 実行 (mrb_load_irep) 関数型 mrb_value mrb_load_irep(mrb_state *mrb, const uint8_t *bin); 引数 mrb mrb_state のポインタを指定する 戻り値 機能概要 備考 bin バイナリデータの先頭アドレスを指定する バイトコードの実行結果 ( 値は処理依存 ) を返す メモリ上に配置された (mruby コンパイル結果の ) バイナリデータをメモリ上に復元した後に mruby VM 上で実行する 戻り値は mruby プログラムの処理結果により内容が異なる 53

54

55 mruby ライブラリ - mrbgem C 言語またはmruby (Ruby) で作成されるライブラリ ビルド時に組み込むことでmrubyを機能拡張 有志が作成したmrbgemを使用可能 (280 件超 ) mrbgem による mruby 拡張手順 mrbgem の準備 ( 調達 or 作成 ) mruby VM への mrbgem の組み込み 55

56 mrbgem の公開情報 公開されているmrbgemの一覧情報 mgemコマンドを使用して参照すると分かりやすい mgem コマンドのインストール $ gem install mgem 56

57 mgem コマンドの利用 mrbgem の一覧表示 $ mgem list mrbgem の情報表示 $ mgem info <mrbgem-name> mrbgem の検索 $ mgem search <search-pattern> 57

58 build_config.rb の編集 1. MRuby::Build.new ブロックの中に conf.gem 'xxxx' の形式でmrbgems 格納ディレクトリのパスを指定 2. GitHubで公開されているmrbgemを組み込むことも可能 conf.gem :git => 'xxxx' MRuby::Build.new do conf #... conf.gem 'mrbgems/gem_name' end ローカルドライブ上の mrbgems の組込み conf.gem :git => 'git://github.com/masuidrive/mrbgems-example.git' #... GitHub に公開されている mrbgems の組込み 58

59 mrbgem の組み込み例 (mruby-sleep) 1. mrbgem の情報取得 $ mgem info mruby-sleep Detail information of 'mruby-sleep': Name: mruby-sleep Author: MATSUMOTO Ryosuke Description: Sleep Module Website: Repository: Repo Option: Protocol: git 2. build_config.rb に追加 MRuby::Build.new do conf conf.gem :git => ' end 59

60 mruby の再構築 mrbgemを組み込んだmruby VMを作成 mrubyディレクトリ内で以下のコマンドを実行 $ make clean all mruby-sleep の動作確認 $ bin/mruby e 'sleep 10' 60

61 mrbgem の組み込み例 ( その 2) mrbgem を組み込んだ mruby VM を作成 mruby ディレクトリ内で以下のコマンドを実行 Mac の場合は cd ~/mruby-porting $ cd /c/mruby-porting/src/05mrbgem $ make mruby all $./zip.rb $./z2a mruby インタプリタで実行 mruby アプリとして実行 61

62 mrbgem の組み込み例 ( その 2) 組み込んだ mrbgem mruby-porting/src/05mrbgem/build_config_http.rb MRuby::Build.new do conf conf.gem :core => 'mruby-pack' # Array#pack, String#unpack conf.gem :core => 'mruby-io' # IO, File classes conf.gem :core => 'mruby-socket' # Socket library conf.gem :git => ' # Simple HTTP client conf.gem :git => ' # JSON library end mruby にバンドルされている mrbgem を組み込む場合には :core => の形式で指定する 62

63 mrbgem の組み込み例 ( その 2) Makefile mruby-porting/src/05mrbgems/makefile MRUBY=../../mruby all: $(MRUBY)/bin/mrbc -o zip.c -Bappbin zip.rb gcc -o z2a -I$(MRUBY)/include -L$(MRUBY)/build/host/lib z2a.c zip.c -lmruby -lm mruby: MRUBY_CONFIG=../src/05mrbgem/build_config_http.rb make -C$(MRUBY) clean all clean: rm zip.c z2a build_config.rb の代わりに mruby のビルドに使用するビルド構成ファイルを指定 相対パスで指定する場合は mruby ディレクトリ基準の相対パスとなる 63

64 mrbgem の組み込み例 ( その 2) mruby アプリケーション mruby-porting/src/05mrbgem/zip.rb #!../../mruby/bin/mruby begin raise ArgumentError.new "Usage: #{$0} <zipcode>" if ARGV.empty? raise ArgumentError.new 'Invalid ZIP code' unless ARGV.size > 0 && ARGV[0].size == 7 # ZIP SEARCH API SERVICE - c = SimpleHttp.new('http', 'api.thni.net') res = c.get("/jzip/x0401/json/#{argv[0][0..2]}/#{argv[0][3..6]}.js") raise "ZIP code (#{ARGV[0]}) is not found." if res['body'].include?('not Found') # "body" => '{"statename":" 福岡県 ", "city":" 福岡市中央区 ", "street":" 天神 "}' json = JSON::parse(res['body']) puts json["statename"] + json["city"] + json["street"] rescue => e puts e end 64

65 mrbgem の階層構造 mruby/ mrbgems/ mrbgemsディレクトリ GEM_NAME/ GEMの名称 ( 名称は任意 ) include/ C 言語拡張関数定義 mrblib/ Ruby 記述の拡張ソースコード src/ C 言語記述の拡張ソースコード test/ テストコード (Ruby 記述 ) mrbgem.rake GEM 記述凡例 README.md GEMのREADME 赤字 : 必須 青字 : 任意 65

66 GEM_NAME/mrbgem.rake の作成 MRuby::Gem::Specification.new('GEM_NAME') do spec spec.license = 'MIT' spec.author = 'mruby developers' spec.summary = 'sample mrbgem' end その他の主要なオプション オプション内容 mrbgem 名ライセンス形態著作者 mrbgemの概要 spec.version spec.description spec.requirements spec.cflags バージョン情報詳細説明必要条件に関する説明文 Cコンパイラのオプションフラグ spec.add_dependency mrbgem の依存関係追加 66

67 mruby(ruby) による mruby VM の拡張 Ruby コードの追加方式 GEM_NAME/mrblib に Ruby ソースファイルを配置 mruby(ruby) による mruby 拡張例 mruby-porting/src/06mrbgem2/sample-mrbgem/mrblib/square.rb class Fixnum def square self * self end end 整数を扱う Fixnum クラスに square メソッドを追加 67

68 C による mruby VM の拡張 C コードの追加方式 GEM_NAME/src に C ソースファイルを配置 mruby 拡張手順 1. mrubyから呼び出すc 言語関数の定義 2. GEM 初期化関数の定義 クラス / モジュールの登録 ( 必要な場合 ) クラス / モジュールへのメソッドの登録 3. GEM 終了関数の定義 68

69 C による mruby VM の拡張 mruby-porting/src/06mrbgem2/sample-mrbgem/src/neg.c #include "mruby.h" #include "mruby/value.h" mruby から呼び出す C 言語関数 static mrb_value neg(mrb_state *mrb, mrb_value self) { return mrb_fixnum_value(-mrb_fixnum(self)); } GEM 初期化関数 (mrb_xxx_gem_init) void mrb_sample_mrbgem_gem_init(mrb_state *mrb) { mrb_define_method(mrb, mrb->fixnum_class, "negative", neg, MRB_ARGS_NONE()); } void mrb_sample_mrbgem_gem_final(mrb_state *mrb) { } mrbgem 名に合わせる '-' は '_' に変換 C の関数 neg() を mruby のメソッド (Fixnum クラスの negative メソッド ) として登録 GEM 終了関数 (mrb_xxx_gem_final) ( 終了処理がなくても関数が必要 ) 69

70 mruby から呼び出し可能な C 関数の形式 関数型 mrb_value func(mrb_state *mrb, mrb_value self); 引数 mrb mrb_state のポインタが渡される 戻り値 機能概要 備考 self メソッドのレシーバが渡される メソッドの処理結果である戻り値を mrb_value 型にて返却する ( 値は処理に依存 ) メソッドの機能として戻り値を返す必要がない場合も 何らかの mrb_value 値を返す必要がある mruby プログラムから呼び出される C 関数は 本関数と同じ形式である必要がある C 関数に渡される引数は C 関数内で mrb_get_args() を呼び出すことで取得することができる 関数名 (func) は任意の関数名を指定可能 70

71 メソッドの登録 (mrb_define_method) 関数型 void mrb_define_method(mrb_state *mrb, struct RClass *c, const char *name, mrb_func_c func, int aspec); 引数 mrb mrb_state のポインタが渡される 戻り値 機能概要 c name func メソッドの登録対象となるクラス / モジュールのオブジェクトを指定する mruby プログラムから呼び出す際のメソッド名を指定する 呼び出し対象の C 言語関数を指定する 呼び出される C 関数は 以下の関数型である必要がある mrb_value func(mrb_state*, mrb_value); aspec メソッドが受け取る引数を指定する ( 次頁参照 ) なし クラス / モジュールにメソッドを定義する 71

72 mrb_define_method の aspec に指定するマクロ MRB_ARGS_NONE() MRB_ARGS_REQ(n) MRB_ARGS_OPT(o) MRB_ARGS_ANY() 引数なし foo() n 個の必須の引数を持つ foo(a, b, c) # => MRB_ARGS_REQ(3) o 個のオプション引数を持つ foo(a=1, b=nil) # => MRB_ARGS_OPT(2) 可変数の引数を持つ foo(*args) MRB_ARGS_ARG(n, o) n 個の必須引数 o 個のオプション引数を持つ ARGS_REQ(n) ARGS_OPT(o) と同じ foo(a, b, c=1) # => MRB_ARGS_ARG(2, 1) 72

73 mrb_value を生成する API mrb_fixnum_value(i) 整数型のmrb_valueを生成する mrb_float_value(mrb, f) 浮動小数値のmrb_valueを生成する mrb_symbol_value(i) mrb_obj_value(p) mrb_false_value() mrb_true_value() シンボル値の mrb_value を生成する オブジェクトの実体 p を持つ mrb_value を生成する false 値の mrb_value を生成する true 値の mrb_value を生成する mrb_bool_value(boolean) 真偽値 (true/false) の mrb_value を生成する mrb_nil_value() nil 値の mrb_value を生成する 73

74 mrb_value から値を取得する API mrb_fixnum(v) mrb_value の整数値を取得する (v).value.i mrb_float(v) mrb_symbol(v) mrb_ptr(v) mrb_value の浮動小数値を取得する (v).value.f mrb_value のシンボル値を取得する (v).value.sym mrb_value のオブジェクトポインタを取得する (v).value.p 74

75 mrbgem の組み込み mruby-porting/src/06mrbgem2/build_config_sample_mrbgem.rb MRuby::Build.new do conf conf.gem '../../src/06mrbgem2/sample-mrbgem' end 相対パスで指定する場合には mruby/mrbgems 基準のパスとなる 動作確認 $ cd /c/mruby-porting/src/06mrbgem2 $ make $../../mruby/bin/mirb Mac の場合は cd ~/mruby-porting > 100.square.negative =>

76 mrbgem (banker) の作成 作成する mrbgem mruby-porting/src/07practice1/banker C で実装するもの Bankerクラス Banker#counter(n=2) メソッド n: 倍数 ( デフォルト : 2) n が 2 の場合 : n が 2 以外の場合 : " 倍返しだ!" の文字列を返す "#{n} 倍返しだ!" の文字列を返す 76

77 実行例 Mac の場合は cd ~/mruby-porting $ cd /c/mruby-porting/src/07practice1 $ make $../../mruby/bin/mirb > hnzw = Banker.new => #<Banker:0x7fde3f001b70> > hnzw.counter(2) => 倍返しだ! > hnzw.counter(100) => 100 倍返しだ! > 77

78 クラスの登録 (mrb_define_class) 関数型 struct RClass *mrb_define_class(mrb_state *mrb, const char *name, struct RClass *super); 引数 mrb mrb_state のポインタを指定する 戻り値 機能概要 備考 name super クラスの名称を指定する 親クラスのクラスオブジェクトを指定する 定義されたクラスオブジェクトのポインタを返す クラスを定義する superには 以下に示すmrb_state 構造体内に保持されている既存のクラスを指定することが可能 mrb->object_class オブジェクトクラス mrb->array_class Arrayクラス mrb->string_class Stringクラス 78

79 引数の取得 (mrb_get_args) 関数型 int mrb_get_args(mrb_state *mrb, const char *format,...); 引数 mrb mrb_state のポインタを指定する 戻り値 機能概要 備考 format 次頁に示す文字で取得する引数の型を指定する ( 複数指定可能 )... format で指定した可変数引数の値を受け取る変数のポインタを指定する 取得した引数の数を返す メソッドに渡された引数を取得する 79

80 mrb_get_args の format 指定文字列とデータ型 format 取得する引数引数を受け取る変数型 o オブジェクト (Object) mrb_value S 文字列 (String) mrb_value s 文字列と文字長 char *, int z 文字列 ( 終端が ' 0') char * A 配列 (Array) mrb_value a 配列と配列長 mrb_value *, int f 浮動小数値 mrb_float i 整数値 mrb_int n シンボル値 mrb_sym b 真偽値 mrb_bool & ブロック mrb_value * 残りの引数と引数の数 mrb_value *, int 後続はオプション引数 - 80

81 文字列の生成 (mrb_str_new_cstr) 関数型 mrb_value mrb_str_new_cstr(mrb_state *mrb, const char *p); 引数 mrb mrb_state のポインタを指定する 戻り値 機能概要 備考 p String オブジェクトを返す 文字列 (' 0' 終端 ) を指定する C 言語文字列より String オブジェクトクラスを生成する Ruby で str = "C_STR" を実行することと等価 81

82 ヒント : クラス定義の例 #include "mruby.h" #include "mruby/value.h" #include <stdio.h> static mrb_value surprise(mrb_state *mrb, mrb_value self) { mrb_int n, i; mrb_value s = mrb_str_buf_new(mrb, 32); mrb_get_args(mrb, "i", &n); for (i=0; i<n; i++) mrb_str_cat_cstr(mrb, s, " じぇ "); return s; } void mrb_ama_gem_init(mrb_state *mrb) { struct RClass *ama = mrb_define_class(mrb, "Ama", mrb->object_class); mrb_define_method(mrb, ama, "!", surprise, MRB_ARGS_REQ(1)); } Ama クラスを定義 ( 親クラスは Object クラス ) 82

83 ヒント : 数値の文字列化 数値を文字列に変換するには sprintf() 関数を使用します 使用例 #include <stdio.h> int main(void) { char buf[16]; int i; 文字列を格納するために十分なサイズの領域を確保 } for (i=0; i<10; i++) { sprintf(buf, "%d 回目 ", i); puts(buf); } 83

84

85 移植性の高い mruby mruby のコアは環境依存しない 実行環境用の mruby VM を作成すれば OK アプリケーション ( バイナリ ) も環境依存しない 開発環境で動作したアプリは他の mruby VM でも動作可能 カスタマイズ可能な mruby VM 実行環境に合わせてチューニング 85

86 mruby のポーティング手順 ( 概要 ) mruby のクロスビルド ターゲット環境 ( 実行環境 ) 用の mruby VM を作成 mruby のカスタマイズ mruby VM の構成 mrbgem の追加 / 削除 ターゲットアプリケーションへの mruby VM の組み込み アプリケーションから mruby API を呼び出す 86

87 mruby アプリ実行形式の決定材料 実行形式 RAM 容量 ( 目安 ) スクリプト 512KB 実行が容易 アプリ更新も容易 コンパイルにメモリと時間が必要 スクリプトが丸見え MRB ファイル 192KB MRB ファイルの差し替えでアプリを更新できる ファイルシステムが必須 バイナリデータ (C ソース ) 128KB サイズがコンパクト アプリのみの更新が難しい 87

88 mruby のポーティング後に必要なこと mruby でターゲットシステムを動かす ターゲット依存する C モジュールの呼び出し OS のシステムコール I/O 制御処理など... C モジュール呼び出し部のライブラリ (mrbgem) 化 C の資産を mruby の資産に! 88

89

90 Renesas GR-PEACH MPU: Flash: RAM: Other: RZ/A1H (Cortex-A9) 400MHz 8MB 16MB Arduino 互換ピン Ethernet microsd USB RGB LED mbed 対応 90

91 GR-PEACH-Full の外観 リセットボタン USB ポート ( 電源 ) RGB LED Vcc, GND,... GPIO Ethernet ポート 91

92 開発環境の構築 以下の内容に従って mbed CLI の環境をセットアップします Windows の場合 C: mruby-porting doc setup-mbed-cli-win.html Mac の場合 ~/mruby-porting/doc/setup-mbed-cli-mac.html 92

93 サンプルアプリケーション mruby-porting/mbed/mbed-os-example-blinky/main.cpp #include "mbed.h" DigitalOut led1(led1); // main() runs in its own thread in the OS int main() { while (true) { led1 =!led1; wait(0.5); } } 93

94 コンパイル手順 Mac の場合は cd ~/mruby-porting $ cd /c/mruby-porting/mbed/mbed-os-example-blinky $ mbed compile m RZ_A1H t GCC_ARM : : GR-PEACH (MPU 名 ) を指定 Text 46.7KB Data 2.32KB BSS 11.7KB ROM 49KB RAM 14KB Image:. BUILD RZ_A1H GCC_ARM mbed-os-example-blinky.bin アプリケーションを含むファームウェア mbed-example-blinky は mbed サイトで公開されている L チカのサンプルアプリケーションです 本来は以下のコマンドでサンプルコードをダウンロードしますが 時間短縮のため SD カードに収めています $ mbed import mbed-os-example-blinky # 今回は実行不要です 94

95 サンプルアプリケーションの実行 ターゲットボード (GR-PEACH) を PC に接続する MBED ドライブがマウントされる MBEDドライブのルートディレクトリに mbed-os-example-blinky.bin をコピーするしばらくするとMBEDドライブが再マウントされ binファイルは削除される LEDが1 秒周期で赤点滅すればOK 95

96

97 mruby のポーティング手順 mruby のクロスビルド ターゲット環境 ( 実行環境 ) 用の mruby VM を作成 mruby のカスタマイズ mruby VM の構成 mrbgem の追加 / 削除 ターゲットアプリケーションへの mruby VM の組み込み アプリケーションから mruby API を呼び出す 97

98 mruby のクロスビルド 方法 1 ターゲットCPU 向けのlibmruby.aを作成して ターゲットアプリケーションにリンクする 方法 2 ターゲットアプリケーションに mruby のソースコードを追加して 一緒にビルドする 98

99 mruby のクロスビルド方法 ( その 1) 方法 1 ターゲットCPU 向けのlibmruby.aを作成して ターゲットアプリケーションにリンクする 1. build_config.rb にクロスビルドのスクリプトを追加 2. mruby をクロスビルド 3. 出力された mruby VM (libmruby.a) をターゲットアプリにリンク 99

100 mruby のクロスビルド方法 ( その 2) 方法 2 ターゲットアプリケーションに mruby のソースコードを追加して 一緒にビルドする ここまでは 方法 1 と同じ 1. build_config.rb にクロスビルドのスクリプトを追加 2. mruby をクロスビルド (Ruby のソースコードを C 言語データ化 ) 3. mruby のソースコードをターゲットアプリと一緒にビルド 今回はこちらでやります! 100

101 ターゲットアプリに mruby ソースを組み込む Mac の場合は cd ~/mruby-porting $ cd /c/mruby-porting/mbed/mbed-os-example-blinky $ git clone $ cd mruby $ git checkout mruby のバージョンを に設定 101

102 クロスビルドの記述 (build_config.rb) mruby-porting/mbed/mbed-os-example-blinky/mruby/build_config.rb # 以下をファイルの最後に追加 # Cross build for GNUARM MRuby::CrossBuild.new('mbed') do conf toolchain :gcc conf.cc { cc cc.command = 'arm-none-eabi-gcc' cc.flags << %w( -mcpu=cortex-a9 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=softfp ) } conf.gem :core => 'mruby-print' end GNU ARM toolchain を使用 mruby-print を追加 ( 動作確認用 ) 102

103 mruby のクロスビルド Mac の場合は cd ~/mruby-porting $ cd /c/mruby-porting/mbed/mbed-os-example-blinky/mruby $ make mruby クロスビルドの出力結果 mruby/ build/ host/ lib/ libmruby.a host-debug/ mbed/ lib/ libmruby.a host-debug/ test/ 開発環境 (host 環境 ) 用の mruby VM build_config.rb で追加したターゲット用の mruby VM ただしこれは使わない! 103

104 mruby の組み込み ターゲットアプリに組み込む mruby ソースコードの在処 mruby/ build/ mbed/ クロスビルドしたmrblib.c mrbgems/ gitで取得した外部のmrbgem ( 追加した場合のみ ) include/ mrubyコアのヘッダファイル mrbgems/ mruby 標準のmrbgem ( 必要なものだけを追加 ) src/ mrubyコアのソースコード 104

105 mruby ソースファイルの追加方法 IDE (eclipse, IAR Embedded Workbench 等 ) を使用する場合 プロジェクトにソースファイルを追加 Makefile を使用する場合 ビルド対象にソースファイルを含める mbed CLI を使用する場合 プロジェクト内にあるソースコードが自動で追加される 105

106 mbed CLI の仕様 プロジェクトディレクトリ以下に含まれるファイルを自動で組み込む Cソースファイル C++ ソースファイル オブジェクトファイル (C/C++ ファイルのコンパイル結果 ) サブディレクトリ以下に含まれるファイルも自動で組み込む プロジェクトのファイル管理が不要! これって便利??? 106

107 mbed CLI で mruby をビルドすると... mruby/ build/ mbed/ src/ array.o backtrace.o mrbgems/ mruby-bin-mirb/ mruby-bin-mrbc/ mruby-bin-mruby/ src/ array.c backtrace.c *.c と同じ内容 それぞれに main() 関数が含まれる リンクエラー ( 二重定義 ) が発生 107

108 mbed CLI での mruby リンクエラー対策.mbedignore を記述する ビルド対象から除外するファイル / ディレクトリを指定 ワイルドカード (*,? 等 ) が利用可能 ビルド対象から除外するもの mrubyのビルドで生成されるオブジェクトファイル main() 関数を含むmrbgem 環境依存するmrbgem(mruby-io, mruby-socket,...) ユニットテストやサンプルソースコード 108

109 .mbedignore の記述例 mruby-porting/mbed/mbed-os-example-blinky/.mbedignore mruby/build/host/ mruby/build/host-debug/ mruby/build/test/ mruby/build/mbed/*/*.o mruby/examples/ mbed 以外のビルドターゲットのビルド生成物は全て無視する mbed 用ビルドで生成されたオブジェクトファイルは無視し mruby バイナリ (C ソース ) はビルド対象とする mruby/mrbgems/mruby-bin-*/ mruby/mrbgems/mruby-exit/ mruby/mrbgems/mruby-test/ mruby/mrbgems/mruby-io/ mruby/mrbgems/mruby-socket/ mruby/mrblib/ main() を含む または環境依存する mrbgem は無視する 行の最後が '/' の場合はディレクトリ指定 '/' でない場合はファイル指定となる 109

110 mbed CLI の仕様 ( その 2) プロジェクトディレクトリ以下のディレクトリはインクルードディレクトリとなる インクルードパスが自動で追加される (gcc I で指定するイメージ ) パス指定なしで #include できる これって便利??? 110

111 インクルードパス自動設定の弊害 mruby-porting/mbed/mbed-os-example-blinky/mruby/src/string.c #include <string.h> #include <mruby.h> #include <mruby/array.h> #include <mruby/class.h> #include <mruby/string.h> #include <mruby/range.h> 文字列関連機能の C 標準ヘッダファイル mruby API 関連のヘッダファイル static mrb_value mrb_str_getbyte(mrb_state *mrb, mrb_value str) { // 以下略 コンパイルエラーが発生 C 標準の string.h がインクルードされるべきところで mruby/include/mruby/string.h がインクルードされてしまう 111

112 mbed CLI での mruby コンパイルエラー対策.mbedignore を記述する? ビルド対象から除外するディレクトリを指定 効果なし ヘッダファイル名を変更する 標準ヘッダファイル名と一致するヘッダファイル名を使用しない mruby/include/mruby/string.h を _string.h に変更 mruby のソースコードを変更するため メンテナンス性が犠牲に... 現状 他によい手段を思いつきません..orz 112

113 string.h のファイル名変更 mruby/include/mruby/string.h のファイル名を _string.h に変更 mruby ソースコード中でインクルードしている箇所を変更 変更前 変更後 #include <mruby/string.h> #include <mruby/_string.h> エディタの複数ファイル置換機能を使うと便利! 113

114 mbed CLI で mruby をビルド Mac の場合は cd ~/mruby-porting $ cd /c/mruby-porting/mbed/mbed-os-example-blinky $ mbed compile m RZ_A1H t GCC_ARM : : : Image:. BUILD RZ_A1H GCC_ARM mbed-os-example-blinky.bin Object file XXXX.o is not unique! の警告が多数表示されますが bin ファイルが生成されれば OK!! 114

115 mruby のポーティング手順 mruby のクロスビルド ターゲット環境 ( 実行環境 ) 用の mruby VM を作成 mruby のカスタマイズ mruby VM の構成 mrbgem の追加 / 削除 ターゲットアプリケーションへの mruby VM の組み込み アプリケーションから mruby API を呼び出す 115

116 mruby API の呼び出し mruby-porting/mbed/mbed-os-example-blinky/main.cpp #include "mbed.h" #include "mruby.h" #include "mruby/proc.h" DigitalOut led1(led1); // main() runs in its own thread in the OS int main() { mrb_state *mrb = mrb_open(); extern const uint8_t appbin[]; mrb_load_irep(mrb, appbin); mrb_close(mrb); while (true) { led1 =!led1; wait(0.5); } } 116

117 mbed CLI で mruby をビルド Mac の場合は cd ~/mruby-porting $ cd /c/mruby-porting/mbed/mbed-os-example-blinky $ mruby/bin/mrbc o app.c Bappbin../../src/01hello/hello.rb $ mbed compile m RZ_A1H t GCC_ARM : : Image:. BUILD RZ_A1H GCC_ARM mbed-os-example-blinky.bin このファームウェアを GR-PEACH (MBED ドライブ ) にコピー 117

118 GR-PEACH にポーティングした mruby の動作確認 1. GR-PEACH を PC に接続した状態で以下を実行する Windows の場合 : CoolTermWin CoolTerm.exe を実行 Mac の場合 : LaunchPad より CoolTerm を実行 118

119 GR-PEACH にポーティングした mruby の動作確認 2. Options から初期設定を行う ( 初回のみ ) Windowsの場合 : COMx Macの場合 : usbmodemxxxx 119

120 GR-PEACH にポーティングした mruby の動作確認 3. CoolTerm の Connect をクリック 4. GR-PEACH の microsd カードを抜いて RESET ボタンを押下 "Hello, mruby!" と表示され LED が赤点滅すれば OK 120

121 ビルドの効率化 Mac の場合は cd ~/mruby-porting $ cd /c/mruby-porting/mbed/mbed-os-example-blinky $ cp mruby/build_config.rb mbed_build_config.rb mruby-porting/mbed/mbed-os-example-blinky/makefile TARGET = RZ_A1H TOOLCHAIN = GCC_ARM ユーザ定義の build_config.rb を指定 all: MRUBY_CONFIG=../mbed_build_config.rb make -C mruby mbed compile -m $(TARGET) -t $(TOOLCHAIN) clean: make -C mruby clean rm -rf BUILD/$(TARGET) make でビルドできます! 注意 空白 (Space) ではなくタブ (Tab) を入力する必要がある 121

122

123 mruby ポーティングと共に必要なこと mruby VM のカスタマイズ メモリ使用量のチューニング RAM 容量が厳しいターゲット環境ではポーティング前に実施 mrbgem の追加 / 削除 mruby でターゲットシステムを動かす ターゲット依存部をCモジュールから呼び出す OSのシステムコール I/O 制御など... mrbgemを作る Cモジュールのライブラリ化による再利用性向上 123

124 演習 8-1:mrbgem の追加 ポーティングした mruby VM に mrbgem (Banker) を追加する mruby/mrbgems に banker をコピーする mbed_build_config.rb を編集する 編集対象は mruby/build_config.rb ではない! mrbgem を追加する場所に注意! mruby アプリ mruby VM を差し替える Banker クラスを使った mruby アプリ ( バイナリ ) を組み込む GR-PEACH のファームウェアを更新して CoolTerm で動作確認 124

125 mruby でターゲットシステムを動かす ターゲット依存部は C モジュール経由で呼び出す OS のシステムコール I/O 制御など... mrbgem を作る C モジュールのライブラリ化による再利用性向上 ターゲット依存部をメソッド化できれば 残りは Ruby での実装も可能 125

126 mrbgem の設計イメージ ターゲット非依存部 ターゲット依存部 mruby application mrbgem Target module (for mbed) PC 上でシミュレーション動作する STUB モジュールを作るとクロス開発支援に繋がる Target module (for PC) 126

127 ターゲットモジュール ( サンプル ) の取得 以下のファイルを mbed-os-example-blinky にコピーする Mac の場合は ~/mruby-porting/src/mbedapi/ C: mruby-porting src mbedapi mbedapi.cpp ターゲット API の実装 mbedapi.h ターゲット API 定数の定義 127

128 ターゲットモジュールの API 一覧 API 機能概要 mbeddelay() 時間指定での処理停止 mbedmillis() システム時間の取得 mbeddigitalwrite() ディジタル出力 mbeddigitalread() ディジタル入力 mbedi2cwrite() I2Cデバイスへのデータ書き込み mbedi2cread() I2Cデバイスからのでデータ読み込み mbedi2cstart() I2C 転送開始 mbedi2cstop() I2C 転送終了 mbedinit() mbed APIの初期化 128

129 演習 8-2: システム時間機能の追加 ターゲットモジュール (mbedapi.cpp/h) を使用して システム時間機能のためのmrbgemを作成する mrbgemの格納先ディレクトリは mruby/mrbgems/mruby-mbed とする C 言語で実装するメソッド Kernel#delay(ms) #=> nil ms( ミリ秒 ) で指定した時間 処理を停止する 時間指定の処理停止には mbeddelay() を使用する Kernel#millis #=> Fixnum ミリ秒単位で取得したシステム時間 ( システム起動時からの経過時間 ) を返す システム時間の取得には mbedmillis() を使用する 129

130 mrbgem 実装のためのヒント Kernelモジュールへのメソッド追加 mrb->kernel_module にメソッドを追加することで Kernelモジュールへのメソッドが追加できる mrbgem の動作確認 delay(ms), millis と puts 等の出力を組み合わせた mruby アプリ ( バイナ リ ) を組み込んで CoolTerm で動作を確認する 130

131 時間指定での処理停止 (mbeddelay) 関数型 void mbeddelay(int ms); 引数 ms 処理停止する時間 ( ミリ秒 ) 戻り値 なし 機能概要 指定した時間 システムの処理を停止する 備考 131

132 システム時間の取得 (mbedmillis) 関数型 引数 uint32_t mbedmillis(void); なし 戻り値システム時間 ( ミリ秒 ) 機能概要 備考 システムが起動してからの経過時間をミリ秒単位で取得する システム時間のタイマを開始するためには システム起動時に以下のいずれかの処理を行う必要がある mbedinit() を呼び出す 本関数 (mbedmillis()) を呼び出す 132

133 演習 8-3: ディジタル入出力機能の追加 mruby/mrbgems/mruby-mbed にディジタル入出力機能を追加する C 言語で実装するメソッド Kernel#digitalWrite(pin, val) #=> nil pinで指定されたgpioピンに値 (0 or 1) を出力する GPIOディジタル出力には mbeddigitalwrite () を使用する Kernel#digitalRead(pin) #=> Fixnum pin で指定した GPIO ピンから入力した値 (0 or 1) を返す GPIO ディジタル入力には mbeddigitalread() を使用する 133

134 mrbgem 実装のためのヒント GPIOピン番号 GPIOのピン番号は mbedapi.h に定義されている以下が利用可能 定義名 値 備考 MBED_D0 MBED_D ディジタル入出力ピン MBED_A0 MBED_A アナログ入力ピン MBED_LED1 MBED_LED RGB LED(1 3), 赤 LED(4) MBED_BUTTON1 26 ユーザボタン digitalwrite/digitalread の動作確認 出力は LED 入力はユーザボタンを利用することで動作確認が可能 134

135 GR-PEACH の GPIO のピン番号 MBED_LED4 MBED_LED1 MBED_LED2 MBED_LED3 MBED_A0 : : MBED_A5 MBED_BUTTON1 MBED_D0 : : MBED_D13 135

136 ディジタル入力 (mbeddigitalread) 関数型 int mbeddigitalread(int pin); 引数 pin GPIO ピン番号 (MBED_xxx) 戻り値ディジタル入力値 (0 or 1) 機能概要 備考 pin で指定した GPIO ピンから入力したディジタル値 (0 or 1) を返す pin に指定する GPIO ピン番号は mbedapi.h に定義している定義名 (MBED_xxx) または値 (0 23) が指定可能 136

137 ディジタル出力 (mbeddigitalwrite) 関数型 void mbeddigitalwrite(int pin, int value); 引数 pin GPIO ピン番号 (MBED_xxx) 戻り値 機能概要 備考 value 出力値 (0 or 1) なし pin で指定した GPIO ピンに value (0 or 1) を出力する pin に指定する GPIO ピン番号は mbedapi.h に定義している定義名 (MBED_xxx) または値 (0 23) が指定可能 137

138 演習 8-4:LED クラスと GPIO ピン定義の追加 mruby/mrbgems/mruby-mbed に LED クラスと GPIO ピン定義を追加する mruby で実装するメソッド LED.new(pin) #=> LED pinで指定されたgpioピンのledオブジェクトを生成する LEDクラスのinitializeメソッドとして実装する ピン番号はインスタンス変数 付きの変数 ) で保持する LED#on / LED#off #=> nil LED を点灯 / 消灯する LED へのディジタル出力には Kernel#digitalWrite を使用する 138

139 演習 8-4:LED クラスと GPIO ピン定義の追加 GPIO クラスの定数としてピン定義を追加する GPIO::D0 GPIO::D13 GPIO::A0 GPIO::A5 GPIO::LED1 GPIO::LED4 GPIO::BUTTON1 クラス定数の定義例 ( 最もベタな方式 ) class GPIO D0 = 0 D1 = 1 D2 = 2 # 以下略 end 139

140 演習 8-5:I2C クラスの追加 mruby/mrbgems/mruby-mbed に I2C クラスを追加する 実装するメソッド I2C.new(addr) #=> I2C addrで指定したi2cデバイスを制御するためのi2cオブジェクトを生成する I2Cクラスのinitializeメソッドとして実装する addr ( デバイスアドレス ) はインスタンス変数 ("@" 付きの変数 ) で保持する I2C#write(reg, val) #=> nil I2Cデバイスに対してデータ送信する regで指定された数値およびvalで指定された数値配列をバイトデータ列に変換してi2cデバイスに送信する I2C への出力には mbedi2cwrite() を使用する 140

141 演習 8-5:I2C クラスの追加 実装するメソッド ( 続き ) I2C#read(reg, length) #=> Array I2Cデバイスからデータ入力する regで指定された数値をi2cデバイスに送信し lengthで指定したサイズのバイトデータ列を受信する 受信したバイトデータ列を数値配列として返す I2Cからの入力には mbedi2cread() を使用する I2C#_start / I2C#_end #=> nil I2C 通信の開始 / 終了を指示する mbedi2cstart() / mbedi2cend() を使用する 141

142 mrbgem 実装のためのヒント C 言語実装部とmruby 実装部に分けるターゲットモジュール (mbedapi.cpp/h) を呼び出す部分は C 言語で実装する必要があるが それ以外はmrubyで実装可能可能 mruby 実装部をうまく組み合わせると実装が容易になる バイトデータ列の扱い方 Rubyでの配列はArrayオブジェクトとして扱われる Arrayの要素はどんなオブジェクトでもよいが 本演習では整数値 (Fixnum) の配列とすると扱いやすい ArrayクラスのC APIは mruby/include/mruby/array.h に定義されてい る 142

143 mrbgem 実装のためのヒント ( 続き ) I2Cクラスの動作確認 I2Cクラス単体では動作確認が困難なため 温度センサ (ADT7410) を使用して動作確認を行う ADT7410クラスのソースコードは以下から取得できる 大文字小文字区別あり 143

144 I2C デバイスデータ書き込み (mbedi2cwrite) 関数型 int mbedi2cwrite(int addr, const char *cmd, int length, uint8_t repeat); 引数 addr 送信先 I2C デバイスアドレス 戻り値 機能概要 備考 cmd length 送信コマンドの先頭アドレス 送信コマンドデータ長 repeat 未使用 (0 を指定する ) なし 指定されたデバイスアドレスの I2C デバイスに指定されたデータ長のコマンドデータを送信する 144

145 I2C デバイスデータ読み込み (mbedi2cread) 関数型 int mbedi2cread(int addr, char *data, int length); 引数 addr 受信元 I2C デバイスアドレス data 受信データ格納領域の先頭アドレス length 受信データ長 ( 受信データ格納領域のサイズ ) 戻り値 0 受信完了 機能概要 備考 0 以外受信データなし 指定されたデバイスアドレスの I2C デバイスから 指定されたデータ長のデータを受信する 受信データがない場合には 0 以外の値が返されるため 受信完了するまで待つ場合には 戻り値が 0 になるまで本関数を呼び続ける必要がある 145

146 I2C 転送開始 (mbedi2cstart) 関数型 void mbedi2cstart(void); 引数 なし 戻り値 なし 機能概要 I2C 通信を開始する 備考 146

147 I2C 転送終了 (mbedi2cstop) 関数型 void mbedi2cstop(void); 引数 なし 戻り値 なし 機能概要 I2C 通信を終了する 備考 147

148 温度センサ ADT7410 アナログ デバイセズ社製温度精度 : ± 分解能 : (13bitモード) (16bitモード) I2C 互換インタフェース 148

149 ADT7410 を GR-PEACH に繋ぐ 回路図

150

151 色々なところに組み込める mruby 組込みアプリケーションに組み込める C/C++ と戦わなくても組込みアプリが作れる C/C++ モジュールが呼び出せるので安心 C/C++ で苦手な処理はmrubyで書けば簡単に実現 アプリケーションに組み込める アプリケーションをmrubyで機能拡張 アプリケーションをRubyスクリプトで制御したり... DSL っぽく使ってアプリの構成を記述したり

152 組込み環境で mruby を動かす まずは mruby VM をマイコンで動作させる RAMはどれくらい使えるのか... ターゲットCアプリへの組み込みはどうするか... mrubyアプリをどう動かすか... mruby VM が動いた後は mrbgem を整備 まずは公開 mrbgemが利用可能かを確認 公開 mrbgemがターゲット未対応であれば移植にチャレンジ 公開されていない場合は頑張って自作 152

153 GR-PEACH で動く mruby momo-mruby GR-PEACH 秋月電子通商などで購入可 mruby 搭載 mruby IoT framework Plato 対応 153

154 154

本研修について mruby 概要 mruby IoT フレームワーク Plato mruby ポーティング mruby ポーティング環境への Plato の適用 2

本研修について mruby 概要 mruby IoT フレームワーク Plato mruby ポーティング mruby ポーティング環境への Plato の適用 2 mruby IoT framework Plato と mruby のポーティング研修テキスト 特定非営利活動法 軽量 Ruby フォーラム 1 本研修について mruby 概要 mruby IoT フレームワーク Plato mruby ポーティング mruby ポーティング環境への Plato の適用 2 mruby 概要 Ruby を省リソース化した mruby の概要 特徴 3 mruby

More information

Microsoft PowerPoint - ruby_instruction.ppt

Microsoft PowerPoint - ruby_instruction.ppt Ruby 入門 流れ Ruby の文法 画面に出力 キーボードから入力 数値 文字列 変数 配列 ハッシュ 制御構造 ( 分岐 繰り返しなど ) if while case for each 関数 クラス Ruby とは プログラミング言語 インタプリタ言語 オブジェクト指向 国産 ウェブアプリケーションフレームワーク RubyOnRails で注目 弊社での Web アプリケーション開発に利用 画面に出力

More information

memo

memo 数理情報工学演習第一 C プログラミング演習 ( 第 5 回 ) 2015/05/11 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 課題 : 疎行列 2 プロトタイプ宣言 3 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(int

More information

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート )

1. USB の VCP( 仮想 COM ポート ) について USB の VCP( 仮想 COM ポート ) は USB を非同期シリアル通信として使用するための USB のドライバです PC には VCP ドライバをインストールする必要があります USB の VCP( 仮想 COM ポート ) TrueSTUDIO 用 F4D_VCP の説明 V001 2014/07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです 無料の試用版開発ツール Atollic TrueSTUDIO for ARM Lite で作成したプロジェクトです ビルド可能なプログラムのコードサイズが 32Kbyte 以内の制限があります プログラムの開始番地は 0x08000000

More information

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x

CoIDE 用 F4D_VCP の説明 V /07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x CoIDE 用 F4D_VCP の説明 V001 2014/07/05 USB の VCP( 仮想 COM ポート ) による非同期シリアル通信を行うプログラムです Free の開発ツール CoIDE で作成した STM32F4 Discovery 用のプロジェクトです プログラムの開始番地は 0x08000000 です デバッグが可能です 目次 1. USB の VCP( 仮想 COM ポート )

More information

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用 RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用体型のローカル変数を文字列操作関数で操作する場合の注意事項 (RXC#013) 配列型構造体または共用体の配列型メンバから読み出した値を動的初期化に用いる場合の注意事項

More information

Microsoft PowerPoint - CproNt02.ppt [互換モード]

Microsoft PowerPoint - CproNt02.ppt [互換モード] 第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント

More information

2006年10月5日(木)実施

2006年10月5日(木)実施 2010 年 7 月 2 日 ( 金 ) 実施 ファイル処理ファイルとはファイル (file) は日常用語では紙などを綴じたものを表すが, コンピュータ用語ではデータの集合体を指す言葉である ファイルは例えば, 文書ファイルやプログラムファイルのように, 用途によって分類されることもあれば, また, テキストファイルやバイナリファイルのように, ファイルの作り方によって分類されることもある なお,

More information

<4D F736F F F696E74202D20834A815B836C838B835C815B835882CC95E082AB95FB F4B2E B8CDD8AB B83685D>

<4D F736F F F696E74202D20834A815B836C838B835C815B835882CC95E082AB95FB F4B2E B8CDD8AB B83685D> カーネルソースの歩き方 RaspberryPi 演習 TOPPERS/SSP カーネルソース勉強会 アライブビジョンソフトウェア株式会社髙橋和浩 RaspberryPi 演習 1 概要 TOPEPRS/SSP 編 TOPPERS/SSP(smallest set profile) は ITRON の最小セットプロファイルに対応した 待ち 状態のないカーネルの公開ソースコードです 昨年から名古屋市工業研究所の主催で継続中のカーネルソース勉強会の成果として

More information

IntroductionForGR-PEACH.pptx

IntroductionForGR-PEACH.pptx 1 Arduino,mbed,TOPPERS を全部試せる! GR-PEACH 向けソフトウェアプラットフォームのご紹介 松原豊 (Yutaka MATSUBARA) 名古屋 学 学院情報科学研究科助教 TOPPERS プロジェクト運営委員 / 開発者会議実 委員 E-mail: yutaka@ertl.jp Web: http://www.ertl.jp/~yutaka 2 GR-PEACH とは?

More information

Prog1_12th

Prog1_12th 2013 年 7 月 4 日 ( 木 ) 実施 ファイル処理ファイルとはファイル (file) は日常用語では紙などを綴じたものを表すが, コンピュータ用語ではデータの集合体を指す言葉である ファイルは例えば, 文書ファイルやプログラムファイルのように, 用途によって分類されることもあれば, また, テキストファイルやバイナリファイルのように, ファイルの作り方によって分類されることもある なお,

More information

slide5.pptx

slide5.pptx ソフトウェア工学入門 第 5 回コマンド作成 1 head コマンド作成 1 早速ですが 次のプログラムを head.c という名前で作成してください #include #include static void do_head(file *f, long nlines); int main(int argc, char *argv[]) { if (argc!=

More information

Microsoft Word - Training10_プリプロセッサ.docx

Microsoft Word - Training10_プリプロセッサ.docx Training 10 プリプロセッサ 株式会社イーシーエス出版事業推進委員会 1 Lesson1 マクロ置換 Point マクロ置換を理解しよう!! マクロ置換の機能により 文字列の置き換えをすることが出来ます プログラムの可読性と保守性 ( メンテナンス性 ) を高めることができるため よく用いられます マクロ置換で値を定義しておけば マクロの値を変更するだけで 同じマクロを使用したすべての箇所が変更ができるので便利です

More information

型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1

型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1 型名 RF007 ラジオコミュニケーションテスタ Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation RF007SDK-M001 RF007SDK-M001 参考資料 1 第 1 章製品概要本開発キットは RF007 ラジオコミュニケーションテスタ ( 本器 ) を使用したソフトウェアを開発するためのライブラリソフトウェアです

More information

利用者

利用者 Regional SNS 開発環境構築ガイド 2012 年 2 月 29 日 株式会社ネットワーク応用通信研究所 目次 1. はじめに... 1 2. 前提条件... 1 3. 必要なソフトウェア構成... 1 4. ソフトウェアの導入手順... 1 4.1. 必要ファイルのダウンロード... 1 4.2. 環境設定コマンドの実行... 2 4.3. RegionalSNS の実行... 2 4.4.

More information

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for

RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for RTC_STM32F4 の説明 2013/10/20 STM32F4 内蔵 RTC の日付 時刻の設定および読み込みを行うプログラムです UART2( 非同期シリアル通信ポート 2) を使用して RTC の設定および読み込みを行います 無料の開発ツール Atollic TrueSTUDIO for ARM Lite 4.2.0 で作成した STM32F4 Discovery 基板用のプロジェクトです

More information

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ 第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイルの作成方法 コンパイル方法について説明します IDL ファイルの作成にあたっては INTERSTAGE

More information

AquesTalk プログラミングガイド

AquesTalk プログラミングガイド AquesTalk プログラミングガイド ( 株 ) アクエスト 1. 概要 本文書は 規則音声合成ライブラリ AquesTalk をアプリケーションに組み込んで使用するためのプログラミングに関して 方法および注意点を示したものです AquesTalk には 2 種類のライブラリがあります 音声データをメモリ上に生成するものと サウンドデバイスに出力する 2 種類があります 使用するアプリケーションに応じて選択してください

More information

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y 小幡智裕

Java Scriptプログラミング入門 3.6~ 茨城大学工学部情報工学科 08T4018Y  小幡智裕 Java Script プログラミング入門 3-6~3-7 茨城大学工学部情報工学科 08T4018Y 小幡智裕 3-6 組み込み関数 組み込み関数とは JavaScript の内部にあらかじめ用意されている関数のこと ユーザ定義の関数と同様に 関数名のみで呼び出すことができる 3-6-1 文字列を式として評価する関数 eval() 関数 引数 : string 式として評価する文字列 戻り値 :

More information

SDC_SDIO_STM32F4 の説明 2013/09/17 SDIO インターフェースで SD カードをアクセスするプログラムのプロジェクトサンプルです FAT でファイルアクセスするために FatFs( 汎用 FAT ファイルシステム モジュール ) を使用しています VCP(USB 仮想 C

SDC_SDIO_STM32F4 の説明 2013/09/17 SDIO インターフェースで SD カードをアクセスするプログラムのプロジェクトサンプルです FAT でファイルアクセスするために FatFs( 汎用 FAT ファイルシステム モジュール ) を使用しています VCP(USB 仮想 C SDC_SDIO_STM32F4 の説明 2013/09/17 SDIO インターフェースで SD カードをアクセスするプログラムのプロジェクトサンプルです FAT でファイルアクセスするために FatFs( 汎用 FAT ファイルシステム モジュール ) を使用しています VCP(USB 仮想 COM ポート : 非同期シリアル通信 ) を使用して SD カードのアクセスを試験することができます

More information

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+) RL78 開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行 ( 統合開発環境編 ) (High-performance Embedded Workshop CS+) 2017/4/7 R20UT2087JJ0103 ソフトウェア事業部ソフトウエア技術部ルネサスシステムデザイン株式会社 はじめに 本資料は 統合開発環境 High-performance Embedded Workshop

More information

プログラミング基礎

プログラミング基礎 C プログラミング Ⅰ 授業ガイダンス C 言語の概要プログラム作成 実行方法 授業内容について 授業目的 C 言語によるプログラミングの基礎を学ぶこと 学習内容 C 言語の基礎的な文法 入出力, 変数, 演算, 条件分岐, 繰り返し, 配列,( 関数 ) C 言語による簡単な計算処理プログラムの開発 到達目標 C 言語の基礎的な文法を理解する 簡単な計算処理プログラムを作成できるようにする 授業ガイダンス

More information

プログラミング基礎I(再)

プログラミング基礎I(再) 山元進 クラスとは クラスの宣言 オブジェクトの作成 クラスのメンバー フィールド 変数 配列 メソッド メソッドとは メソッドの引数 戻り値 変数の型を拡張したもの 例えば車のデータベース 車のメーカー 車種 登録番号などのデータ データベースの操作 ( 新規データのボタンなど ) プログラムで使う部品の仕様書 そのクラスのオブジェクトを作ると初めて部品になる 継承 などの仕組みにより カスタマイズが安全

More information

プログラミング実習I

プログラミング実習I プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 m.imura@kwansei.ac.jp 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,

More information

Ruby演習テキスト1

Ruby演習テキスト1 Ruby言語 基礎演習 社会人技術者研修 2014年度 テキスト 社会人技術者研修 2014年度テキスト 2014.11 Ruby基礎演習 1 2014.11 2015.2.1 puts "Hello Ruby >ruby hello.rb ( リターン ) > ruby hello.rb Hello Ruby # はじめての ruby プログラム puts "Hello Ruby" > ruby

More information

1. 使用する信号 1.1. UART 信号 UART 通信に使用する信号と接続相手との接続は以下の通りです UART 信号表 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の信号名 1 USART1_TX PA9 CN > RxD 2 USART1_R

1. 使用する信号 1.1. UART 信号 UART 通信に使用する信号と接続相手との接続は以下の通りです UART 信号表 番号 CPU 機能名 CPU 信号名 基板コネクタピン番号 方向 接続相手の信号名 1 USART1_TX PA9 CN > RxD 2 USART1_R TrueSTUDIO 用 L152CD_UART1 の説明 V001 2014/10/22 UART( 非同期シリアル通信 ) で送受信を行う STM32L152C-DISCO のプロジェクトサンプルです STM32L152C-DISCO は STMicroelectronics 社製の Cortex-M3 ARM CPU である STM32L152RCT6 を搭載した基板です 試用版の開発ツール

More information

AquesTalk Win Manual

AquesTalk Win Manual AquesTalk Win マニュアル 株式会社アクエスト http://www.a-quest.com/ 1. 概要 本文書は 規則音声合成ライブラリ AquesTalk をアプリケーションに組み込んで使用するためのプログラミングに関して 方法および注意点を示したものです AquesTalk には 2 種類のライブラリがあります 音声データをメモリ上に生成するものと サウンドデバイスに出力する 2

More information

2014 年 11 月 20 日 ET2014 スペシャルセッション C-2 mruby プログラム言語 Ruby による組込みソト開発 九州工業大学田中和明 軽量 Ruby フォーラム Ruby アソシエーション

2014 年 11 月 20 日 ET2014 スペシャルセッション C-2 mruby プログラム言語 Ruby による組込みソト開発 九州工業大学田中和明 軽量 Ruby フォーラム Ruby アソシエーション 2014 年 11 月 20 日 ET2014 スペシャルセッション C-2 mruby プログラム言語 Ruby による組込みソト開発 九州工業大学田中和明 軽量 Ruby フォーラム Ruby アソシエーション 講演の内容 mruby 概要紹介 九州工業大学, 田中和明 mruby デバッガ紹介 福岡 CSK, 三牧弘司 NPO 法人軽量 Ruby フォーラムの紹介 NPO 法人軽量 Ruby

More information

Microsoft PowerPoint - Borland C++ Compilerの使用方法(v1.1).ppt [互換モード]

Microsoft PowerPoint - Borland C++ Compilerの使用方法(v1.1).ppt [互換モード] Borland C++ Compiler の 使用方法 解説書 (v1.1) 1 準備 (1/2) 1. スタートメニューから コントロールパネル を開いて その中に デスクトップのカスタマイズ フォルダーオプション があるので開く エクスプローラー内の ツール フォルダーオプション などからも開ける 2. 表示 タブにある 登録されている拡張子は表示しない のチェックを外して OKを押す これでファイルの拡張子が表示されるようになった

More information

昨年度までの研究紹介 および 研究計画

昨年度までの研究紹介 および 研究計画 第 12 回 ICN 研究会ワークショップ Cefore で キャッシュプラグイン開発 2018 年 8 月 30 日 ( 木 ) キャッシュプラグイン csmgrd は起動時に使用するキャッシュプラグインを指定 Cache plugin: キャッシュデータ保存方式 Cache algorithm: キャッシュ選択 / 置換アルゴリズム Cache Plugin Cache algorithm csmgrd

More information

プログラマブル LED 制御モジュール アプリ操作説明書 プログラマブル LED 制御モジュール設定アプリ操作説明書 適用モジュール 改訂番号 エレラボドットコム 1

プログラマブル LED 制御モジュール アプリ操作説明書 プログラマブル LED 制御モジュール設定アプリ操作説明書 適用モジュール 改訂番号 エレラボドットコム 1 設定 適用モジュール 041-1 改訂番号 20161024 エレラボドットコム 1 ( 用アプリの利用可能環境 ) Windows7 8.1 10 のいずれかが動作する PC Windows8 以降の場合は 次ページ記載の Windows8 以降の.NET Framework の有効化 (p3~7) の操作をするか 設定されていることを確認してからアプリをインストールしてください.NET Framework2.0

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 2018/10/05 竹島研究室創成課題 第 2 回 C 言語演習 変数と演算 東京工科大学 加納徹 前回の復習 Hello, world! と表示するプログラム 1 #include 2 3 int main(void) { 4 printf("hello, world! n"); 5 return 0; 6 } 2 プログラム実行の流れ 1. 作業ディレクトリへの移動 $ cd

More information

AquesTalk for WinCE プログラミングガイド

AquesTalk for WinCE プログラミングガイド AquesTalk for WinCE プログラミングガイド ( 株 ) アクエスト 1. 概要 本文書は 規則音声合成ライブラリ AquesTalk for WinCE ( 以下 AquesTalk) をアプリケーションに組み込んで使用するためのプログラミングに関して 方法および注意点を示したものです AquesTalk には 2 種類のライブラリがあります 音声データをメモリ上に生成するものと

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 7 ( 水 5) 12: コマンドライン引数 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2016-06-29 1 まとめ : ポインタを使った処理 内容呼び出し元の変数を書き換える文字列を渡す 配列を渡すファイルポインタ複数の値を返す大きな領域を確保する

More information

AN1609 GNUコンパイラ導入ガイド

AN1609 GNUコンパイラ導入ガイド GNU コンパイラ導入ガイド 2 版 2017 年 04 月 20 日 1. GNU コンパイラの導入... 2 1.1 はじめに... 2 1.2 必要なプログラムとダウンロード... 3 1.2.1 GNU ツールチェインのダウンロード... 3 1.2.2 e 2 studio のダウンロード... 5 1.3 GNU ツールチェインのインストール... 7 1.4 e 2 studio のインストール...

More information

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき

More information

Java言語 第1回

Java言語 第1回 Java 言語 第 2 回簡単な Java プログラムの作成と実行 知的情報システム工学科 久保川淳司 kubokawa@me.it-hiroshima.ac.jp 簡単な Java プログラム Java プログラムのファイル名 Java プログラムのファイル名命名ルール ファイル名とクラス名は同じでなければならない HelloJava.java public class HelloJava { public

More information

インテル(R) Visual Fortran コンパイラ 10.0

インテル(R) Visual Fortran コンパイラ 10.0 インテル (R) Visual Fortran コンパイラー 10.0 日本語版スペシャル エディション 入門ガイド 目次 概要インテル (R) Visual Fortran コンパイラーの設定はじめに検証用ソースファイル適切なインストールの確認コンパイラーの起動 ( コマンドライン ) コンパイル ( 最適化オプションなし ) 実行 / プログラムの検証コンパイル ( 最適化オプションあり ) 実行

More information

24th Embarcadero Developer Camp

24th Embarcadero Developer Camp 17 Th Developer Camp B4 Delphi/C++Builder テクニカルワークショップ Delphi / C++Builder 旧バージョンアプリケーションの移行 エンバカデロ テクノロジーズサポートチーム with 高橋智宏 1 17 Th Developer Camp Delphi Q1 2 midas.dll Q. 別々のバージョンで作成したデータベースアプリケーションがあります

More information

GettingStartedTK2

GettingStartedTK2 T-Kernel 2.0 Getting Started T-Engine フォーラム ダウンロード T-Engine フォーラムの web ページから T-Kernel 2.0 Software Package をダウンロード 必要なソフトウェアや開発環境が全て含まれている 2 Copyright 2011 by T-Engine Forum, All Rights Reserved. 1 ReadMe.txt

More information

TRQerS - Introduction

TRQerS - Introduction TRQerS 導入概要 横河ディジタルコンピュータ株式会社エンベデッドソリューション事業本部サポート部 (ESC-APN-035-02 Dec,25,2015) 1 システムマクロトレースの特徴 製品構成と導入フロー 2 システムマクロトレースの特徴 システムマクロトレース printf ログ出力の発展形 (printf より高速 文字列 / タグ情報 / タスク遷移 / 関数遷移 ) ハードウェアインターフェース

More information

多言語ドメイン名の実装 mdnkit 石曽根信 ( 株 ) SRA 2001/12/04 日本語ドメイン名解説 / mdnkit 1 mdnkit 多言語ドメイン名を扱うためのツールキット 正規化 エンコード変換等を提供するライブラリとコマンド 既存アプリケーシ

多言語ドメイン名の実装 mdnkit 石曽根信 ( 株 ) SRA 2001/12/04 日本語ドメイン名解説 / mdnkit 1 mdnkit 多言語ドメイン名を扱うためのツールキット 正規化 エンコード変換等を提供するライブラリとコマンド 既存アプリケーシ 多言語ドメイン名の実装 mdnkit 石曽根信 ( 株 ) SRA ishisone@sra.co.jp 2001/12/04 日本語ドメイン名解説 / mdnkit 1 mdnkit 多言語ドメイン名を扱うためのツールキット 正規化 エンコード変換等を提供するライブラリとコマンド 既存アプリケーションを多言語ドメイン対応させるためのツール群 フリーソフトウェア 2001/12/04 日本語ドメイン名解説

More information

1. プログラム実行時の動作プログラムを実行すると以下のように動作します 1) NUCLEO-F401RE 上の LED LD2( 緑 ) が 200mSec 間隔で点滅します 2. プロジェクトの構成 2.1. プロジェクト F401N_BlinkLD2 の起動画面 TrueSTUDIO で作成し

1. プログラム実行時の動作プログラムを実行すると以下のように動作します 1) NUCLEO-F401RE 上の LED LD2( 緑 ) が 200mSec 間隔で点滅します 2. プロジェクトの構成 2.1. プロジェクト F401N_BlinkLD2 の起動画面 TrueSTUDIO で作成し TrueSTUDIO 用 F401N_BlinkLD2 の説明 V003 2014/10/01 TIM11 の割り込みを使用して LED 点滅を行う NUCLEO-F401RE のプロジェクトサンプルです NUCLEO-F401RE は STMicroelectronics 社製の Cortex-M4 ARM CPU である STM32F401RET6 を搭載した基板です 試用版の開発ツール Atollic

More information

Microsoft Word - Cプログラミング演習(12)

Microsoft Word - Cプログラミング演習(12) 第 12 回 (7/9) 4. いくつかのトピック (5)main 関数の引数を利用したファイル処理 main 関数は, 起動する環境から引数を受け取ることができる 例えば 次に示すように,main 関数に引数を用いたプログラムを作成する 01 /* sample */ 02 /* main 関数の引数 */ 03 #include 04 05 main(int argc, char

More information

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A

1. A/D 入力について分解能 12bit の A/D コンバータ入力です A/D 入力電圧とディジタル値との対応は理論上 入力電圧 0V : 0 入力電圧 +3V : 4095 です 実際はオフセットと傾きがあり ぴったりこの数値にはなりません 2. A/D 入力に使用する信号 STM32L_A STM32L_ADC の説明 V003 2014/03/30 STM32L-Discovery の A/D 入力を行うプログラムです A/D CH0 ~ A/D CH3 の 4 本の入力が可能です 提供する PC のアプリケーション Access_SerialPort を使用して UART( 非同期シリアル通信 ) により A/D 入力の表示を行うことができます 無料の開発ツール Atollic TrueSTUDIO

More information

gengo1-12

gengo1-12 外部変数 関数の外で定義される変数を外部変数 ( 大域変数 ) と呼ぶ 外部変数のスコープは広域的 ( プログラム全体 ) 全ての関数で参照可能 int a=10; double x=3.14159; printf( a = %d\n, a); sample(); printf( %f\n, x); void sample(void) printf( %f\n, x); x += 1.0; 外部変数

More information

Microsoft Word - Cプログラミング演習(10)

Microsoft Word - Cプログラミング演習(10) 第 10 回 (6/25) 3. ファイルとその応用 (3) ファイルの更新 シーケンシャルファイルの更新 シーケンシャルファイルでは, 各レコードが可変長で連続して格納されており, その中の特定のレコードを変更することができない そこで一般的には, マスタファイルからデータを取り出し, 更新処理を行ったあとに新マスタファイルに書き込む 注 ) マスタファイル : 主ファイル, 基本ファイルと呼ばれるファイルで内容は比較的固定的であり,

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 講座準備 講座資料は次の URL から DL 可能 https://goo.gl/jnrfth 1 ポインタ講座 2017/01/06,09 fumi 2 はじめに ポインタはC 言語において理解が難しいとされる そのポインタを理解することを目的とする 講座は1 日で行うので 詳しいことは調べること 3 はじめに みなさん復習はしましたか? 4 & 演算子 & 演算子を使うと 変数のアドレスが得られる

More information

Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a

Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a MATLAB コードを使用した C コードの生成クイックスタートガイド (R2016a) 最初のスタンドアロン C コードの生成 スタンドアロン C コードを生成するには [ ビルド ] を [ ソースコード ] [ スタティックライブラリ ] [ ダイナミックライブラリ ] または [ 実行ファイル ] のいずれかに切り替えます MATLAB Coder を使用することで MATLAB コードから

More information

フローチャート自動生成ツール yflowgen の使い方 目次 1 はじめに 本ツールの機能 yflowgen.exe の使い方 yflowgen.exe の実行方法 制限事項 生成したファイル (gml ファイル形式 ) の開

フローチャート自動生成ツール yflowgen の使い方 目次 1 はじめに 本ツールの機能 yflowgen.exe の使い方 yflowgen.exe の実行方法 制限事項 生成したファイル (gml ファイル形式 ) の開 フローチャート自動生成ツール yflowgen の使い方 目次 1 はじめに...2 2 本ツールの機能...2 3 yflowgen.exe の使い方...3 3.1 yflowgen.exe の実行方法...3 3.2 制限事項...3 3.3 生成したファイル (gml ファイル形式 ) の開き方...4 3.3.1 yed Graph Editor を使って開く...4 3.3.2 yed

More information

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 ポインタ変数の扱い方 1 ポインタ変数の宣言 int *p; double *q; 2 ポインタ変数へのアドレスの代入 int *p; と宣言した時,p がポインタ変数 int x; と普通に宣言した変数に対して, p = &x; は x のアドレスのポインタ変数 p への代入 ポインタ変数の扱い方 3 間接参照 (

More information

7th CodeGear Developer Camp

7th CodeGear Developer Camp A3 C++Builder テクニカルセッション wxforms で始める wxwidgets プログラミング CodeGear 高橋智宏 1 アジェンダ wxwidgets とは? wxforms とは? wxforms のインストール & 使い方 MacOS X(10.4.x, Carbon) でのビルド Linux(CentOS 4.5, GTK2) でのビルド 2 wxwidgets とは?

More information

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String 目次 1.SqlCtl クラスリファレンス 2 (1)Connect() メソッド 2 (2)DisConnect() メソッド 3 (3)Commit() メソッド 3 (4)Rollback() メソッド 4 2.SqlStm クラスリファレンス 5 (1)Prepare() メソッド 5 (2)Execute() メソッド 6 (3)Release() メソッド 6 (4)Immediate()

More information

Microsoft PowerPoint - 計算機言語 第7回.ppt

Microsoft PowerPoint - 計算機言語 第7回.ppt 計算機言語第 7 回 長宗高樹 目的 関数について理解する. 入力 X 関数 f 出力 Y Y=f(X) 関数の例 関数の型 #include int tasu(int a, int b); main(void) int x1, x2, y; x1 = 2; x2 = 3; y = tasu(x1,x2); 実引数 printf( %d + %d = %d, x1, x2, y);

More information

gengo1-12

gengo1-12 外部変数 関数の外で定義される変数を外部変数 ( 大域変数 ) と呼ぶ 外部変数のスコープは広域的 ( プログラム全体 ) 全ての関数で参照可能 int a=10; double x=3.14159; printf( a = %d\n, a); sample(); printf( %f\n, x); void sample(void) printf( %f\n, x); x += 1.0; 外部変数

More information

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一

内容 1. 仕様 動作確認条件 ハードウェア説明 使用端子一覧 ソフトウェア説明 動作概要 ファイル構成 オプション設定メモリ 定数一覧 変数一 RX210 グループ IRQ 割り込みを使用したパルス出力 要旨 本サンプルコードでは IRQ 割り込みが発生すると 一定期間タイマでパルスを出力する 方法について説明します 対象デバイス RX210 1 / 25 内容 1. 仕様... 3 2. 動作確認条件... 3 3. ハードウェア説明... 3 3.1 使用端子一覧... 3 4. ソフトウェア説明... 4 4.1 動作概要... 4

More information

Taro-ファイル処理(公開版).jtd

Taro-ファイル処理(公開版).jtd ファイル処理 0. 目次 1. はじめに 2. ファイル内容の表示 3. ファイル内容の複写 3. 1 文字単位 3. 2 行単位 4. 書式付き入出力 5. 文字配列への入出力 6. 課題 6. 1 課題 1 ( ファイル圧縮 復元 ) - 1 - 1. はじめに ファイル処理プログラムの形は次のようになる #include main() { FILE *fp1,*fp2; ファイルポインタの宣言

More information

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spark API との通信 このラーニングモジュールでは Python を使用した Spark API とのインターフェイスを扱います

More information

Microsoft Word - Mac版 Eclipseの導入と設定.docx

Microsoft Word - Mac版 Eclipseの導入と設定.docx Mac OS X 版 Eclipse の導入と プログラムの作成方法 このドキュメントは下記のシステムで検証しました -1- Copyright (C) Takashi Kawaba 2012 目次 A. Eclipse を日本語化する 1. ダウンロードと解凍 3 2. features フォルダ内のファイルをコピーする 3 3. plugins 内のファイルをコピーする 4 B. Eclipse

More information

JavaプログラミングⅠ

JavaプログラミングⅠ Java プログラミング Ⅰ 12 回目クラス 今日の講義で学ぶ内容 クラスとは クラスの宣言と利用 クラスの応用 クラス クラスとは 異なる複数の型の変数を内部にもつ型です 直観的に表現すると int 型や double 型は 1 1 つの値を管理できます int 型の変数 配列型は 2 5 8 6 3 7 同じ型の複数の変数を管理できます 配列型の変数 ( 配列変数 ) クラスは double

More information

gengo1-12

gengo1-12 外部変数 関数の外で定義される変数を外部変数 ( 大域変数 ) と呼ぶ 外部変数のスコープは広域的 ( プログラム全体 ) 全ての関数で参照可能 int a=10; double x=3.14159; printf( a = %d\n, a); sample(); printf( %f\n, x); void sample(void) printf( %f\n, x); x += 1.0; 外部変数

More information

講習No.12

講習No.12 前回までの関数のまとめ 関数は main() 関数または他の関数から呼び出されて実行される. 関数を呼び出す側の実引数の値が関数内の仮引数 ( 変数 ) にコピーされる. 関数内で定義した変数は, 関数の外からは用いることができない ( ローカル変数 ). 一般に関数内で仮引数を変化しても, 呼び出し側の変数は変化しない ( 値渡し ). 関数内で求めた値は return 文によって関数値として呼び出し側に戻される.

More information

第一章 LPC2478 ボードの概要...3 第二章 uclinux の初体験 SD カードのテスト USB メモリのテスト USB Devices のテスト network のテスト...6 第三章 uclinux のコンパイル...

第一章 LPC2478 ボードの概要...3 第二章 uclinux の初体験 SD カードのテスト USB メモリのテスト USB Devices のテスト network のテスト...6 第三章 uclinux のコンパイル... 株式会社日新テクニカ株式会社日新テクニカ株式会社日新テクニカ 1 ARM ARM ARM ARM7/TDMI 7/TDMI 7/TDMI 7/TDMI LPC LPC LPC LPC247 247 247 2478-uC uc uc uclinux inux inux inux マニュアルマニュアルマニュアルマニュアル株式会社日新テクニカ株式会社日新テクニカ株式会社日新テクニカ株式会社日新テクニカ

More information

デジタル表現論・第6回

デジタル表現論・第6回 デジタル表現論 第 6 回 劉雪峰 ( リュウシュウフォン ) 2016 年 5 月 16 日 劉 雪峰 ( リュウシュウフォン ) デジタル表現論 第 6 回 2016 年 5 月 16 日 1 / 16 本日の目標 Java プログラミングの基礎配列 ( 復習 関数の値を配列に格納する ) 文字列ファイルの書き込み 劉 雪峰 ( リュウシュウフォン ) デジタル表現論 第 6 回 2016 年

More information

情報ネットワーク演習 2006年10月5日

情報ネットワーク演習 2006年10月5日 情報ネットワーク演習 村川猛彦 2006 年 10 月 12 日 ( 木 ) 1 本日の内容 課題 5 HTTP クライアントハイパーテキストへのアクセス 課題 4 HTTP サーバのビルド 課題 3 ソケットを用いたプロセス間通信 課題 1 低水準入出力 課題 2 名前解決 ( ホスト名 IP アドレス ) 2 第 2 回課題 実施内容と意図 IP アドレスとホスト名の相互変換をするプログラムを拡張する.

More information

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード] 情報工学実験 II 実験 2 アルゴリズム ( リスト構造とハッシュ ) 実験を始める前に... C 言語を復習しよう 0. プログラム書ける? 1. アドレスとポインタ 2. 構造体 3. 構造体とポインタ 0. プログラム書ける? 講義を聴いているだけで OK? 言語の要素技術を覚えれば OK? 目的のプログラム? 要素技術 データ型 配列 文字列 関数 オブジェクト クラス ポインタ 2 0.

More information

目次 はじめに 4 概要 4 背景 4 対象 5 スケジュール 5 目標点 6 使用機材 6 第 1 章 C# 言語 7 C# 言語の歴史 7 基本構文 8 C 言語との違い 9 Java 言語との違い 10.Netフレームワーク 10 開発資料 10 第 2 章 Mono 11 Monoの歴史 1

目次 はじめに 4 概要 4 背景 4 対象 5 スケジュール 5 目標点 6 使用機材 6 第 1 章 C# 言語 7 C# 言語の歴史 7 基本構文 8 C 言語との違い 9 Java 言語との違い 10.Netフレームワーク 10 開発資料 10 第 2 章 Mono 11 Monoの歴史 1 ポリテクセンター埼玉セミナー資料 組込み技術者のための C# Monoを用いたマルチプラットフォームアプリケーション開発技術 第 1.2 版 2018 年 8 月 Microbrains Inc. 渋谷 目次 はじめに 4 概要 4 背景 4 対象 5 スケジュール 5 目標点 6 使用機材 6 第 1 章 C# 言語 7 C# 言語の歴史 7 基本構文 8 C 言語との違い 9 Java 言語との違い

More information

分割コンパイル (2018 年度 ) 担当 : 笹倉 佐藤 分割コンパイルとは 一つのプログラムのソースを複数のソースファイルに分けてコンパイルすること ある程度大きなプログラムの場合ソースファイルをいくつかに分割して開発するのが普通 1

分割コンパイル (2018 年度 ) 担当 : 笹倉 佐藤 分割コンパイルとは 一つのプログラムのソースを複数のソースファイルに分けてコンパイルすること ある程度大きなプログラムの場合ソースファイルをいくつかに分割して開発するのが普通 1 分割コンパイル (2018 年度 ) 担当 : 笹倉 佐藤 2018.12.20 分割コンパイルとは 一つのプログラムのソースを複数のソースファイルに分けてコンパイルすること ある程度大きなプログラムの場合ソースファイルをいくつかに分割して開発するのが普通 1 なぜ分割コンパイルするのか 1. コンパイル時間を短縮するため 2. ソースコードを見やすくするため 3. ソースコードを再利用しやすくするため

More information

Prog1_10th

Prog1_10th 2012 年 6 月 20 日 ( 木 ) 実施ポインタ変数と文字列前回は, ポインタ演算が用いられる典型的な例として, ポインタ変数が 1 次元配列を指す場合を挙げたが, 特に,char 型の配列に格納された文字列に対し, ポインタ変数に配列の 0 番の要素の先頭アドレスを代入して文字列を指すことで, 配列そのものを操作するよりも便利な利用法が存在する なお, 文字列リテラルは, その文字列が格納されている領域の先頭アドレスを表すので,

More information

Prog1_6th

Prog1_6th 2019 年 10 月 31 日 ( 木 ) 実施配列同種のデータ型を有する複数のデータ ( 要素 ) を番号付けして, ひとまとまりの対象として扱うものを配列と呼ぶ 要素 point[0] point[1] point[2] point[3] point[4] 配列 配列の取り扱いに関して, 次のような特徴がある 1. プログラム中で用いる配列変数 ( 配列の本体を参照する参照型の変数 ) は必ず宣言しておく

More information

PowerPoint Presentation

PowerPoint Presentation 製品ソフトウェアのセットアップ手順 UNIX/Linux 編 1. セットアップファイルの選択開発環境 / 実行環境 / バージョン /Hotfix/ インストール先 OS 2. 対象セットアップファイルのダウンロード開発環境の場合は 2 つのファイルが対象 3. ソフトウェア要件の確認 4. ソフトウェアのインストール 5. ライセンスの認証 1 1. セットアップファイルの選択 選択項目選択肢該当チェック

More information

型名 RF014 デジタル ラジオコミュニケーションテスタ Digital Radio Communication Tester ソフトウェア開発キット マニュアル アールエフネットワーク株式会社 RFnetworks Corporation 参考資料 RF014SDK-M001 第 1 章製品概要本開発キットは RF014 デジタルラジオコミュニケーションテスタ ( 本器 ) を使用したソフトウェアを開発するためのライブラリソフトウェアです

More information

文字列操作と正規表現

文字列操作と正規表現 文字列操作と正規表現 オブジェクト指向プログラミング特論 2018 年度只木進一 : 工学系研究科 2 文字列と文字列クラス 0 個以上の長さの文字の列 Java では String クラス 操作 文字列を作る 連結する 文字列中に文字列を探す 文字列中の文字列を置き換える 部分文字列を得る 3 String クラス 文字列を保持するクラス 文字列は定数であることに注意 比較に注意 == : オブジェクトとしての同等性

More information

PowerPoint Presentation

PowerPoint Presentation 工学部 6 7 8 9 10 組 ( 奇数学籍番号 ) 担当 : 長谷川英之 情報処理演習 第 7 回 2010 年 11 月 18 日 1 今回のテーマ 1: ポインタ 変数に値を代入 = 記憶プログラムの記憶領域として使用されるものがメモリ ( パソコンの仕様書における 512 MB RAM などの記述はこのメモリの量 ) RAM は多数のコンデンサの集合体 : 電荷がたまっている (1)/ いない

More information

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受

1. UART について UART は Universal Asynchronous Receiver Transmitter の頭文字をとったもので 非同期シリアル通信と呼ばれます シリアル通信とは 一本の信号線でデータをやりとりするために 1bit ずつデータを送出することをいいます データを受 STM32L_UART1 の説明 V004 2014/03/30 STM32L-Discovery の UART 1 の送受信を行うプログラムです 無料の開発ツール Atollic TrueSTUDIO for ARM Lite( 試用版 ) で作成したプロジェクトです プログラムの開始番地は 0x08000000 です デバッグが可能です PC アプリケーションの Access_SerialPort

More information

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ

arduino プログラミング課題集 ( Ver /06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイ arduino プログラミング課題集 ( Ver.5.0 2017/06/01 ) arduino と各種ボードを組み合わせ 制御するためのプログラミングを学 ぼう! 1 入出力ポートの設定と利用方法 (1) 制御( コントロール ) する とは 外部装置( ペリフェラル ) が必要とする信号をマイコンから伝える 外部装置の状態をマイコンで確認する 信号の授受は 入出力ポート 経由で行う (2) 入出力ポートとは?

More information

Microsoft PowerPoint _2.プログラミングの基礎_final

Microsoft PowerPoint _2.プログラミングの基礎_final RT ミドルウェアによるロボットプログラミング技術 2. プログラミングの基礎 概要 1. プログラミングの基礎 2. Linuxでのプログラミング 3. Windowsでのプログラミング 目標 : 1.Linux および Windows での開発手法 ( 主に C++) を学ぶ 2.CMake を利用して 同じプログラムを Linux と Windows とでコンパイルして動作させる 2 プログラミングの流れ

More information

プログラミングI第10回

プログラミングI第10回 プログラミング 1 第 10 回 構造体 (3) 応用 リスト操作 この資料にあるサンプルプログラムは /home/course/prog1/public_html/2007/hw/lec/sources/ 下に置いてありますから 各自自分のディレクトリにコピーして コンパイル 実行してみてください Prog1 2007 Lec 101 Programming1 Group 19992007 データ構造

More information

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf(hello, n); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a hello printf(hello) 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は C 言語復習 C 言語の基礎 来週もこの資料を持参してください C 言語, ソースファイルの作成, コンパイル, 実行 1 C 言語 C 言語プログラミングの手順 とは, 計算機を動かす手順を記述したもの. 計算機に命令を与えて動かすには を作成する ことになる. C 言語はプログラミング言語の 1 個 手続き型言語に分類される. C/C++ は非常に多くの場面で使われる言語 C++ は C 言語をオブジェクト指向に拡張したもの

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 5 回演習 前回までのお話 ポインタ ポインタを用いた文字列処理 構造体 ファイル 再帰的構造体 リスト構造 動的メモリ管理 今日のお題 ポインタやファイルなど これまでの内容の練習 教材 以前 以下に単語を収録したファイルがあることを紹介した : /usr/share/dict/words この中からランダムに単語を取り出したファイルを用意した http://sun.ac.jp/prof/yamagu/2019app/

More information

4-4- 基スクリプト言語に関する知識 コードの作成や修正が容易とされるスクリプト言語を学習し アプリケーション開発の手法を習得する 本カリキュラムでは まずスクリプト言語に位置づけされる Perl PHP Python JavaScript Ruby といった Ⅰ. 概要プログラミング言語の特徴に

4-4- 基スクリプト言語に関する知識 コードの作成や修正が容易とされるスクリプト言語を学習し アプリケーション開発の手法を習得する 本カリキュラムでは まずスクリプト言語に位置づけされる Perl PHP Python JavaScript Ruby といった Ⅰ. 概要プログラミング言語の特徴に 4-4- 基スクリプト言語に関する知識 1 4-4- 基スクリプト言語に関する知識 コードの作成や修正が容易とされるスクリプト言語を学習し アプリケーション開発の手法を習得する 本カリキュラムでは まずスクリプト言語に位置づけされる Perl PHP Python JavaScript Ruby といった Ⅰ. 概要プログラミング言語の特徴について解説し 動作環境の構築や基本的な構文について習得する

More information

PIC

PIC PIC - 1 ページ 2 週目 UBW を使用してみる 2010 年 5 月 23 日 15:28 前回の Gainer mini はあくまでも PC 側にプログラムがあり PIC は IO ボックス的な使用しかできなかった 入出力デバイスとして PIC を使う場合は 簡易で便利であるが それ以上の事 (PC なしでの動作 PC と対等の動作 ) は出来ない 今週からは 本来の PIC としての使い方を学ぶ

More information

Microsoft PowerPoint - 09.pptx

Microsoft PowerPoint - 09.pptx 情報処理 Ⅱ 第 9 回 2014 年 12 月 22 日 ( 月 ) 関数とは なぜ関数 関数の分類 自作関数 : 自分で定義する. ユーザ関数 ユーザ定義関数 などともいう. 本日のテーマ ライブラリ関数 : 出来合いのもの.printf など. なぜ関数を定義するのか? 処理を共通化 ( 一般化 ) する プログラムの見通しをよくする 機能分割 ( モジュール化, 再利用 ) 責任 ( あるいは不具合の発生源

More information

Microsoft PowerPoint _2.プログラミングの基礎_final.pptx

Microsoft PowerPoint _2.プログラミングの基礎_final.pptx RT ミドルウェアによるロボットプログラミング技術 2. プログラミングの基礎 概要 1. プログラミングの基礎 2. Linuxでのプログラミング 3. Windowsでのプログラミング 目標 : 1.Linux および Windows での開発手法 ( 主に C++) を学ぶ 2.CMake を利用して 同じプログラムを Linux と Windows とでコンパイルして動作させる 2 プログラミングの流れ

More information

Microsoft Word - Cプログラミング演習(9)

Microsoft Word - Cプログラミング演習(9) 第 9 回 (6/18) 3. ファイルとその応用 外部記憶装置に記録されたプログラムやデータを, ファイルと呼ぶ シーケンシャルファイルやランダムファイルへのデータの記録や読み出し, 更新の手順について学習する (1) ファイルとレコードファイル複数の関連したデータを一つに集めたり プログラムを外部記憶装置に保存したものレコードファイルを構成する一塊のデータ ex. 個人カードフィールドレコードを構成する個別の要素

More information

SuperH RISC engineファミリ用 C/C++コンパイラパッケージ V.7~V.9 ご使用上のお願い

SuperH RISC engineファミリ用 C/C++コンパイラパッケージ V.7~V.9 ご使用上のお願い ツールニュース RENESAS TOOL NEWS 2014 年 02 月 01 日 : 140201/tn1 SuperH RISC engine ファミリ用 C/C++ コンパイラパッケージ V.7~V.9 ご使用上のお願い SuperH RISC engine ファミリ用 C/C++ コンパイラパッケージ V.7~V.9の使用上の注意事項 4 件を連絡します 同一ループ内の異なる配列要素に 同一の添え字を使用した場合の注意事項

More information

Javaの作成の前に

Javaの作成の前に メディアプロジェクト演習 1 参考資料 Javaとは JavaScript と Java 言語の違い オブジェクト指向 コンストラクタ サーブレット 本資料内のページ番号は, 以下の参考書のページを引用している 高橋麻奈 : やさしい Java, ソフトバンククリエイティブ (2,625 円 ) はじめに プログラミング言語とは? オブジェクト指向とは? Java 言語とは? JavaとJavaScriptの違いとは?

More information

日本アンドロイドの会 四国支部 Kickoff ミーティング in ABC2009

日本アンドロイドの会 四国支部 Kickoff ミーティング in ABC2009 NDK の使い方 Android のネイティブ開発環境 2009.8.14 20:25-21:00 京都リサーチパーク 4 号館 2F ルーム 2A 日本 Android の会幹事四国支部長 瀬戸直喜 この資料の一部は Google が作成 提供しているコンテンツをベースに変更したもので クリエイティブコモンズの表示 2.5 ライセンスに記載の条件に従って使用しています アジェンダ 概要 イントロダクション

More information

 

  Biz Box ルータ RTX1210 ファームウェアバージョンアップ手順書 - 1 - 1.1 外部メモリを使用して GUI 画面でファームウェアを更新する 市販の外部メモリ (USB メモリ /microsd カード ) に保存したファームウェアをルーターに読み込ませてファームウェアの更新を 行います FAT またはFAT32 形式でフォーマットされていない外部メモリは ルーターで使用できません

More information

Microsoft PowerPoint - prog03.ppt

Microsoft PowerPoint - prog03.ppt プログラミング言語 3 第 03 回 (2007 年 10 月 08 日 ) 1 今日の配布物 片面の用紙 1 枚 今日の課題が書かれています 本日の出欠を兼ねています 2/33 今日やること http://www.tnlab.ice.uec.ac.jp/~s-okubo/class/java06/ にアクセスすると 教材があります 2007 年 10 月 08 日分と書いてある部分が 本日の教材です

More information

TOPPERS活用アイデア・アプリケーション開発

TOPPERS活用アイデア・アプリケーション開発 TOPPERS 活用アイデア アプリケーション開発 コンテスト 部門 : アプリケーション開発部門 作品のタイトル : デジタルインスタントカメラ 作成者 : 清由美 ( 富士通コンピュータテクノロジーズ ) 共同作業者 : FCT) 組込みシステム研究サークル 対象者 : 組込みソフトウェアの初心者 中級者組込みソフトウェアの教育教材を探している指導者使用する開発成果物 : TOPPERS/ASP

More information

IronPython による柔軟なゲーム開発 筑波大学 AmusementCreators

IronPython による柔軟なゲーム開発 筑波大学 AmusementCreators IronPython による柔軟なゲーム開発 筑波大学 AmusementCreators 自己紹介 Amusement Makers ではありません 注意 IronPython って?.Net Framework および Mono 上で動作する Python.NetFramework Mono は共通中間言語 (CIL) のための仮想マシン CIL が動く仮想マシンの仕様は共通言語基盤 (CLI)

More information

演算増幅器

演算増幅器 ファイルこれまでにデータの入力方法として キーボードからの入力を用いてきた 構造体を習った際に実感してもらえたと思うが 入力データ量が多いときにはその作業は大変なものとなり 入力するデータを間違えた場合には最初からやり直しになる そこで今回はこれらの問題を解決するため あらかじめ入力データをテキストエディタなどで編集し ファイルとして保存したものを入力データとして用いる方法を習っていく さらにプログラムで作成したデータをファイルに出力する方法も併せて習っていく

More information

Cプログラミング1(再) 第2回

Cプログラミング1(再) 第2回 C プログラミング 1( 再 ) 第 2 回 講義では Cプログラミングの基本を学び演習では やや実践的なプログラミングを通して学ぶ 1 前回のレポートから 前回の宿題 数あてゲーム の説明において 次のように書いていたものがいた : これはコンピュータがランダムに設定した数字を人間が当てるゲームである この説明でどこかおかしなところはないだろうか? 2 コンピュータの用語と日常的な用語の違い 物理において

More information

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版   Copyright 2018 NTT DATA INTRAMART CORPORATION 1 Top 目次 1. 改訂情報 2. はじめに 2.1. 本書の目的 2.2. 対象読者 2.3. サンプルコードについて 2.4. 本書の構成 3. 辞書項目 API 3.1. 最新バージョン 3.1.1. 最新バージョンの辞書を取得する 3.2. 辞書項目 3.2.1. 辞書項目を取得する 3.2.2.

More information

メディプロ1 Javaプログラミング補足資料.ppt

メディプロ1 Javaプログラミング補足資料.ppt メディアプロジェクト演習 1 Javaプログラミング補足資料 l Javaとは l JavaScript と Java 言語の違い l オブジェクト指向 l コンストラクタ l 継承 抽象クラス 本資料内のページ番号は, 以下の参考書のページを引用している高橋麻奈 : やさしい Java, ソフトバンククリエイティブ (2,625 円 ) はじめに l プログラミング言語とは? l オブジェクト指向とは?

More information

storage-sdk-Java

storage-sdk-Java オブジェクトストレージ SDK Java Version 1.0 Version 更新日内容 1.0 2014 年 4 月 18 日新規作成 1.1 2014 年 5 月 23 日 RiakCS のバージョンを 1.4.5 に修正 IDC Frontier Inc. All Rights Reserved. PAGE : 1 / 7 目次 1. 概要... 3 2. 利用できる API... 3 3.

More information

intra-mart e-Builder ver 5

intra-mart e-Builder ver 5 e-builder ver 5.0.0 インストールガイド Page 1 ================================================================== 名称 e-builder version 5.0.0 制作者名 NTTDATA INTRAMART Corp. 動作環境 Page Producer (Windows2000, Xp) Framework

More information

改訂履歴 改訂日付 改訂内容 2014/11/01 初版発行 2017/01/16 Studuino web サイトリニューアルに伴う改訂 2017/04/14 Studuino web サイトリニューアルに伴うアクセス方法の説明変更 2018/01/22 Mac 版インストール手順変更に伴う改訂

改訂履歴 改訂日付 改訂内容 2014/11/01 初版発行 2017/01/16 Studuino web サイトリニューアルに伴う改訂 2017/04/14 Studuino web サイトリニューアルに伴うアクセス方法の説明変更 2018/01/22 Mac 版インストール手順変更に伴う改訂 Arduino IDE 環境 設定手順書 Windows/Mac 用 2014/11/01 作成 2018/01/22 改訂 改訂履歴 改訂日付 改訂内容 2014/11/01 初版発行 2017/01/16 Studuino web サイトリニューアルに伴う改訂 2017/04/14 Studuino web サイトリニューアルに伴うアクセス方法の説明変更 2018/01/22 Mac 版インストール手順変更に伴う改訂

More information

ポインタ変数

ポインタ変数 プログラミング及び実習 5 馬青 1 文字処理 数値処理 : 整数 浮動小数点数 単一の文字は と ( シングルクォーテーション ) で囲んで表現される 文字のデータ型は char または int である int を用いたほうが ライブラリの関数の引数の型と一致する 以下は全部 int の使用に統一する 従って int ch; で文字変数を宣言しておくと ch= A ; のように ch に文字 A

More information