生成された C コードの理解 コメント元になった MATLAB コードを C コード内にコメントとして追加しておくと その C コードの由来をより簡単に理解できることがよくありま [ 詳細設定 ] [ コード外観 ] を選択 C コードのカスタマイズ より効率的な C コードを生成するベストプラクテ

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

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

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

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

Python によるジオプロセシング スクリプト入門

Python によるジオプロセシング スクリプト入門

7th CodeGear Developer Camp

作業環境カスタマイズ 機能ガイド(応用編)

Managing and Sharing MATLAB Code

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

プログラミング実習I

.NETプログラマー早期育成ドリル ~VB編 付録 文法早見表~

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

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

memo

memo

Scilab 勉強会 ( 第 3 回 ) 高橋一馬, 十文字俊裕, 柏倉守 平成 17 年 11 月 15 日 関数 ファイルはエディタを用いて作成する.Scilab にはエディタ SciPad が附属している.SciPad では なく他のエディタを利用してもよい. 作成した関数は Scilab に

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

UIOUSBCOM.DLLコマンドリファレンス

概要 ABAP 開発者が SAP システム内の SAP ソースまたは SAP ディクショナリーオブジェクトを変更しようとすると 2 つのアクセスキーを入力するよう求められます 1 特定のユーザーを開発者として登録する開発者キー このキーは一度だけ入力します 2 SAP ソースまたは SAP ディクシ

Visual C++ 使用 C 言語 ワンポイント講座 デバッガで言語文法を理解する M.NET.SC デバッガで言語仕様 ( 文法 ) の実体 ( コンパイラの解釈と振る舞い ) を理解する プログラムでできることを習得する

Microsoft PowerPoint ppt

Microsoft PowerPoint - 09.pptx

(1) プログラムの開始場所はいつでも main( ) メソッドから始まる 順番に実行され add( a,b) が実行される これは メソッドを呼び出す ともいう (2)add( ) メソッドに実行が移る この際 add( ) メソッド呼び出し時の a と b の値がそれぞれ add( ) メソッド

Slide 1

24th Embarcadero Developer Camp

Microsoft PowerPoint - 11.pptx

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

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

プログラミング基礎

※ ポイント ※

memo

PowerPoint プレゼンテーション

Using VectorCAST/C++ with Test Driven Development

ex04_2012.ppt

Microsoft PowerPoint - 第5章補足-DB2組み込みSQL.ppt

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

Microsoft PowerPoint - C++_第1回.pptx

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

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

Fortran 勉強会 第 5 回 辻野智紀

ex05_2012.pptx

ClearCase - SD4_JP

Java言語 第1回

PowerPoint プレゼンテーション

VBコンバータ利用方法

実験 5 CGI プログラミング 1 目的 動的にWebページを作成する手法の一つであるCGIについてプログラミングを通じて基本的な仕組みを学ぶ 2 実験 実験 1 Webサーバの設定確認と起動 (1)/etc/httpd/conf にある httpd.conf ファイルの cgi-bin に関する

関数 C 言語は関数の言語 関数とは 関数の定義 : f(x) = x * x ; 使うときは : y = f(x) 戻り値 引数

PowerPoint プレゼンテーション

NetworkVantage 9

Setting up HeapAgent if you’re using

Prog1_10th

PowerPoint Presentation

SuperH RISC engine C/C++ コンパイラ Ver.7 不具合内容 - 過去のお知らせ SuperH RISC engine C/C++ コンパイラ Ver.7 台における不具合内容を以下に示します のチェックツールをルネサスエレクトロニクス株式会社のホームページ

CONTEC DIOプロバイダ ユーザーズガイド

02: 変数と標準入出力

MATLAB EXPO 2019 Japan プレゼン資料の検討

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

プログラミングI第10回

/*Source.cpp*/ #include<stdio.h> //printf はここでインクルードして初めて使えるようになる // ここで関数 average を定義 3 つの整数の平均値を返す double 型の関数です double average(int a,int b,int c){

メソッドのまとめ

JavaプログラミングⅠ

各種パスワードについて マイナンバー管理票では 3 種のパスワードを使用します (1) 読み取りパスワード Excel 機能の読み取りパスワードです 任意に設定可能です (2) 管理者パスワード マイナンバー管理表 の管理者のパスワードです 管理者パスワード はパスワードの流出を防ぐ目的で この操作

02: 変数と標準入出力

関数の動作 / printhw(); 7 printf(" n"); printhw(); printf("############ n"); 4 printhw(); 5 関数の作り方 ( 関数名 ) 戻り値 ( 後述 ) void である. 関数名 (

PowerPoint プレゼンテーション

数はファイル内のどの関数からでも参照できるので便利ではありますが 変数の衝突が起こったり ファイル内のどこで値が書き換えられたかわかりづらくなったりなどの欠点があります 複数の関数で変数を共有する時は出来るだけ引数を使うようにし グローバル変数は プログラムの全体の状態を表すものなど最低限のものに留

情報工学実験 C コンパイラ第 2 回説明資料 (2017 年度 ) 担当 : 笹倉 佐藤

Microsoft PowerPoint - kougi7.ppt

スライド 1

演習1

Taro-cshプログラミングの応用.jt

Create!Form V11 - 機能リファレンス - テスト実行

ソフトウェア基礎 Ⅰ Report#2 提出日 : 2009 年 8 月 11 日 所属 : 工学部情報工学科 学籍番号 : K 氏名 : 當銘孔太

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

Microsoft PowerPoint pptx[読み取り専用]

講習No.9

インストール後のアプリケーション実行

情報処理 Ⅱ 2007 年 11 月 26 日 ( 月 )

(2) 構造体変数の宣言 文法は次のとおり. struct 構造体タグ名構造体変数名 ; (1) と (2) は同時に行える. struct 構造体タグ名 { データ型変数 1; データ型変数 2;... 構造体変数名 ; 例 : struct STUDENT{ stdata; int id; do

SpreadSheet Interface

Undestand の解析 Understand の C 言語で抽出できない依存関係について サンプルコードを用いて説明します 確認バージョン Understand 3.0 (Build 640) Understand 3.1 (Build 700) Understand 4.0 (Build 78

目次 1 はじめに 利用条件 動作環境 アドインのインストール アドインの操作方法 アドインの実行 Excel CSV の出力 テンプレートの作成 編集 テンプレートのレイアウト変更 特記

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

プレポスト【解説】

目次 はじめに 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

Oracle SQL Developer Data Modeler

Section1_入力用テンプレートの作成

VNX ファイル ストレージの管理

<4D F736F F F696E74202D20352D335F8D5C90AC CF909482CC90B690AC82C695D28F572E707074>

AquesTalk Win Manual

8. Windows の補足情報 コマンドの使用についての説明です Windows からのファイル直接印刷 Windows でコマンドを使用したファイル直接印刷の方法についての説明です この機能はネットワーク接続をしているときに使用できます この方法で印刷できるファイルは 本機が搭載しているエミュレ

Source Insight

<4D F736F F D20837D815B B838B837A838B835F E836782CC91E391D68EE892692E646F63>

構造体

AquesTalk プログラミングガイド

PowerPoint プレゼンテーション

Microsoft PowerPoint pptx

コンパイラ演習第 11 回 2006/1/19 大山恵弘 佐藤秀明 今回の内容 バリアント / レコード 表現方法 型付け パターンマッチ 型付け switch 文への変換 簡単な最適化 マッチング漏れ 以降のフェーズでの処理 発展 exhaustivenessinformation の利用 パター

コンピュータ工学講義プリント (7 月 17 日 ) 今回の講義では フローチャートについて学ぶ フローチャートとはフローチャートは コンピュータプログラムの処理の流れを視覚的に表し 処理の全体像を把握しやすくするために書く図である 日本語では流れ図という 図 1 は ユーザーに 0 以上の整数 n

Transcription:

MATLAB コードを使用した C コードの生成クイックスタートガイド (R2012a) 最初のスタンドアロン C コードの生成 スタンドアロン C コードを生成するには MATLAB Coder のペインを [ ビルド ] に切り替えて [C/C++ スタティックライブラリ ] [C/C++ ダイナミックライブラリ ] または [C/C++ 実行ファイル ] のいずれかを選択しま MATLAB Coder を使用することで MATLAB コードから C コードを生成できま MATLAB 内での動作に必要なインターフェイスが含まれるスタンドアロン ANSI-C コードまたは C コードを コンパイル済み MEX ファイルとして生成できま本クイックスタートガイドは スタンドアロン ANSI-C コードの生成方法について説明しま規則に準拠した MATLAB コードの記述方法については MATLAB Coder 用 MATLAB コードの準備 : クイックスタートガイド [1] を参照してください スタティックライブラリ ダイナミックライブラリ 実行 ファイルはどう違うのでしょうか? 生成される C コードに関する限り 違いはありません スタンドアロン C コードの生成手順 スタンドアロン C コードを生成する場合 最初の手順として必ず MEX ファイルを生成しまそのファイルの動作を MATLAB 上で確認してから スタンドアロン C コードを生成しま MEX ファイルにはさまざまなチェックが含まれているため 実行時エラーの検出と修正をより簡単に行うことができま詳細については [1] を参照してください MEX ファイルの生成と動作の検証 [1] 最初のスタンドアロン C コードの生成 外部 C プロジェクトにおいて生成された C コードの理解 生成された C コードのカスタマイズ 生成された C コードの実装 スタティック / ダイナミックライブラリ 実行ファイル MATLAB Coder は C 言語ベースのプロジェクトにおいてリンク可能なスタティック / ダイナミックライブラリをビルドしま場所 : codegen/lib/< 最上位レベル名 > (dll) メイン関数を指定する必要がありまその上で MATLAB Coder は生成されたコードを呼び出す実行ファイルをビルドしま場所 : codegen/exe/< 最上位レベル名 > 1

生成された C コードの理解 コメント元になった MATLAB コードを C コード内にコメントとして追加しておくと その C コードの由来をより簡単に理解できることがよくありま [ 詳細設定 ] [ コード外観 ] を選択 C コードのカスタマイズ より効率的な C コードを生成するベストプラクティスを次に示しま メモリの割り当て MATLAB Coder では配列は 3 つのタイプに区別されま 固定サイズの配列 ( 例 : 12 行 3 列 ) 最大サイズが既知でありサイズが不明の配列 ( maxsize arrays ) サイズがまったく不明の配列 ( 最大サイズが不明 ) MATLAB Coder ではメモリは常にスタック上に割り当てられる スタックに空きがない場合は静的メモリとして割り当てられる サイズがまったく不明の配列がコードに含まれていない場合は動的メモリ割り当てを使用しないように選択可能 動的割り当ては すべての配列が可変サイズの場合 または次の手順で指定したサイズより大きい配列のみに使用される [ 詳細設定 ] [ メモリ ] を選択 ( 下図参照 ) サイズがまったく不明の配列のメモリへの割り当ては 実行時に常に発生 (emxensurecapacity の呼び出しによる動的なメモリ割り当て ) すべての配列にサイズの上限があることを確認する ( 該当する場合 ) 必要に応じて配列のサイズ情報を追加しま例 : assert(n < 25); y = zeros(1,n); 別のベストプラクティスとして後述の インデックスの最適化 も参照してください 生成されたコードが参照により引数を渡すことを確認する C では引数は常に参照により渡されま場合によっては MATLAB Coder は変数をサブ関数に渡す前にそのコピーをローカルに作成しておく必要が生じま ヒント : インプレース構文 a = foo(a) を呼び出し側と関数宣言の両方で使用すれば ローカルでコピーを作成する必要はなくなりま 2

x = foo(x,b) y = foo(x,b) MATLAB Coder はこれが空にならないことを認識できないため :1 として入力しま function a = foo(a,b). 入出力名が呼び出し側と関数宣言の両方で同一 MATLAB Coder は x のローカルコピーを作成する必要がなく これを参照により正しく渡す function a = foo(a,b). 論理配列のインデックスを控えめに使用する 呼び出し側で入出力変数に 2 つの異なる名前を使用 したがって foo への呼出し後に変数 x および y の両方が存在する MATLAB Coder はメモリをコピーしなければならない 論理配列インデックスとは 配列のサブ要素の操作を論理インデッ クスに基づいて実行する機能でたとえば 次によって 255 より 大きいすべての要素を切り取ることができま x(x>255) = 255; 通常は次のように書き換えることで より優れたコードになりま for ii=1:numel(x), if (x(ii)>255), x(ii) = 255; end, end インデックスの最適化 MATLAB Coder では固定長 10 をもつ (i:i+9) は認識されない可能性が ありまこれを i + (0:9) と書き換えることで MATLAB Coder に必 要な情報を与えることができま スカラー入力の強化 MATLAB Coder では x がスカラーであることを認識できない場合がありまたとえば a は常に少なくとも 1 つの正の要素をもつと認識されまつまり x = find(a>0, 1,'first') はスカラーですが スカラー入力を強化するには この行を次のように変更しま x = find(a>0, 1,'first'); x = x(1); 外部 C プロジェクトへのコードの実装 使用するファイル すべての.c および.h ファイルを対象ディレクトリから取得します ( スタティックライブラリの例 : codegen/lib/< 最上位レベル名 >) た いていの場合 すべてのファイルで処理が必要ということになりま メモリのレイアウト MATLAB の行列順序では列が優先されま 2 次元行列の連続要素が 1 つの列の要素にそれぞれ対応しま一方 C 言語は行優先で MATLAB Coder が生成する C コードは MATLAB の動作を模倣しま そのため 入力 ( 出力の場合も ) 引数に複数次元 (2 次元以上 ) の行列 がある場合 外部 C のテストベンチに一致するよう入力 ( または出 力 ) の転置が必要になる場合がありま 引数の型 入力引数および返り値は 以下の C 関数に対応しま 固定サイズ配列 最大サイズ配列 ( 動的割り当てはしない ) 動的に割り当てら 配列へのポインター : x[10] 実際の実行時の配列サイズをもつ配列へのポインター : x_data[10] および x_sizes[2] emxarrays 生成された.h ファイルで定義され 3

れた配列 よくある質問と答え Embedded Coder が必要でしょうか? る特別な型 MATLAB Coder はこれらの配列の作成 破棄を行う補助関数を提供していま詳細については " 原子 " デモを次の手順にしたがって ドキュメンテーションから参照してください [MATLAB Coder] [ デモ ] [MATLAB コードからの C コードの生成 ] で [ 原子のシミュレーションへの動的なメモリ割り当ての使用 ] を選択 Embedded Coder を使用して スタンドアロンのターゲット用に生成 された C コードをカスタマイズできま Embedded Coder の主な特 長は次に示す機能で - 組み込みターゲットに応じた固有の置き換え関数 (TFL) の絞 り込み - 特定ターゲット用のコード生成 (TI DSP) および IDE とのコシ ミュレーション - 再入可能コードの生成 - 変数の名前ルールの定義などのコードスタイルのカスタマ イズ コマンドラインからの実行コード生成およびすべてのオプションの設定はコマンドラインから行うことができま codegen と coder.config を参照してください 複数の関数のコード生成を行う場合の関数名の競合について複数の関数について個々にコード生成を行う場合 MATLAB Coder は 名前は同じでもいくつかのサブ関数の動作が異なる C 関数を生成する場合がありまこれは ファイルをマージしてすべての関数を 1 つのディレクトリに入れようとした場合 競合を招く可能性がありま 解決法 : 複数の関数に対して同時にコードを生成する場合 MATLAB Coder は設計の他の全部位について認識した上で C コードを生成し クラッシュを回避しまそのまま " 複数のエントリポイントファイル " 機能を使うことで 複数の上位レベル関数がプロジェクトに定義付けられま ファイル I/O サポートについて MATLAB Coder では load や fopen を直接にはサポートしていません 一部のファイル入出力に対する直接サポート ( オーディオおよびビデオファイルリーダー System object) については 汎用ファイルからの読み取りおよび書き込み方法の例として coder.opaque の例をご確認ください ターゲット固有ライブラリの使用 MATLAB Coder では個々のターゲットに合わせた実装により 演算子や関数の置き換えが行われまこの機能については ターゲット関数ライブラリ (TFL) の項目の下で説明されていままた ご利用の際には Embedded Coder が必要で 4

再入可能コード / スレッドセーフなコードの生成この機能を利用する場合は Embedded Coder が必要で [ 詳細設定 ] [ メモリ ] を選択してください C++ コードの生成 MATLAB Coder が生成するのは常に C コードで C++ オプションを選択している場合でも MATLAB Coder は C++ コンパイラによってコンパイル可能な.cpp 拡張子の C コードを生成しま [ 詳細設定 ] [ すべての設定 ] [ 言語 ] で [C++] を選択してください 便利な関数 詳細についてはドキュメントをご覧ください coder.ceval 既にもっている外部 C 関数を生成された C コードから呼び出す coder.cstructname coder.inline 使用する MATLAB 構造体用に生成された C 構造体の名前を指定する サブ関数のインライン化を行う MATLAB のサブ 関数内で coder.inline( always ) が使われる場 合 対応するコードが生成された C コード内で インライン化される coder.target coder.nullcopy coder.config 予約された変数で MATLAB インタープリターの実行中は empty になる コード生成時と MATLAB モードとで異なる処理を定義できる if isempty(coder.target) % MATLAB 実行時に使用されるコード else % コード生成時に使われるコード end ゼロ と定義された変数に対する初期化ステートメントの抑止 結果的にコードはやや高速化するが 読み取り前にすべての変数のスライスが書き込まれていることを必ず確認する必要がある コマンドラインで codegen コマンドにより C コードを生成する場合 設定オブジェクトを作成して必要なすべてのオプションを設定する 5