C78K-3.book

Size: px
Start display at page:

Download "C78K-3.book"

Transcription

1 IAR C/C++ コンパイラリファレンスガイド NEC Electronics 78K0/78K0S と 78K0R マイクロコントローラサブファミリ用

2 版権事項 Copyright IAR Systems AB. IAR Systems AB が事前に書面で同意した場合を除き このドキュメントを複製することはできません このドキュメントに記載するソフトウェアは 正当な権限の範囲内でインストール 使用 およびコピーすることができます 免責事項このドキュメントの内容は 予告なく変更されることがあります また IAR Systems 社では このドキュメントの内容に関して一切責任を負いません 記載内容には万全を期していますが 万一 誤りや不備がある場合でも IAR Systems 社はその責任を負いません IAR Systems 社 その従業員 その下請企業 またはこのドキュメントの作成者は 特殊な状況で 直接的 間接的 または結果的に発生した損害 損失 費用 課金 権利 請求 逸失利益 料金 またはその他の経費に対して一切責任を負いません 商標 IAR Systems IAR Embedded Workbench C-SPY visualstate From Idea to Target IAR KickStart Kit IAR PowerPac IAR YellowSuite IAR Advanced Development Kit IAR および IAR Systems のロゴタイプは IAR Systems AB が所有権を有する商標または登録商標です J-Link は IAR Systems AB にライセンス供与されている商標です Microsoft および Windows は Microsoft Corporation の登録商標です その他の製品名はすべて 各製品名の所有者の商標または登録商標です 改版情報第 3 版 : 2009 年 6 月部品番号 : C78K-3-J 本ガイドは NEC Electronics 78K0/78K0S および 78K0R マイクロコントローラサブファミリ用 IAR Embedded Workbench のバージョン 4.6 またはそれ以降に適用されます 内部参照 : R9, 5.4, IJOA.

3 目次 ( 章 ) 表... xix はじめに... xxi パート 1: コンパイラ... 1 イントロダクション... 3 データ記憶 関数 コードおよびデータの配置 DLIB ランタイムライブラリ CLIB ランタイムライブラリ アセンブラ言語インタフェース C++ の使用 組込みアプリケーション用の効率的なコーディング パート 2 リファレンス情報 外部インタフェースの詳細 コンパイラオプション データ表現 コンパイラ拡張 拡張キーワード プラグマディレクティブ 組込み関数 プリプロセッサ iii

4 ライブラリ関数 セグメントリファレンス 処理系定義の動作 索引 iv IAR C/C++ コンパイラリファレンスガイド

5 目次 表... xix はじめに... xxi 本ガイドの対象者...xxi 本ガイドの使用方法...xxi 本ガイドの内容...xxii 参考資料...xxiii 参考資料...xxiv 表記規則... xxv 表記規則... xxv 命名規約...xxvi パート 1: コンパイラ... 1 イントロダクション... 3 IAR 言語の概要... 3 サポートされている 78K デバイス... 4 アプリケーションのビルド概要... 4 コンパイル... 5 リンク... 5 プロジェクト構成の基本設定... 6 プロセッサコア... 6 コードモデル... 6 データモデル (78K0R のみ )... 7 速度とサイズの最適化... 7 ランタイム環境... 8 組込みシステム用の特殊サポート... 9 拡張キーワード プラグマディレクティブ 定義済シンボル 特殊な関数型 低レベル機能へのアクセス v

6 データ記憶 概要 さまざまなデータ記憶方法 データモデル (78K0R のみ ) データモデルの指定 メモリタイプ ショートアドレス領域 Near Far (78K0R のみ ) SFR データメモリ属性の使用 ポインタとメモリタイプ 構造体とメモリタイプ その他の例 C++ とメモリタイプ 自動変数スタック スタック ヒープ上の動的メモリ 関数 関数関連の拡張 関数格納のためのコードモデルとメモリ属性 関数メモリ属性の使用 割込み 並列処理 OS 関連のプログラミング用の基本コマンド 割込み関数 モニタ関数 C++ と特殊な関数型 バンク関数 (78K0/78K0S のみ ) K0/78K0S バンキングシステム バンクコードモデルの使用 バンキングのしくみ バンクメモリのためのソースコードの作成 バンク切替えルーチン vi IAR C/C++ コンパイラリファレンスガイド

7 目次 メモリへのダウンロード バンクアプリケーションのデバッグ コードおよびデータの配置 セグメントとメモリ セグメントとは? メモリでのセグメントの配置 リンカコマンドファイルのカスタマイズ データセグメント 静的メモリセグメント スタック ヒープ 配置済データ ユーザ定義セグメント コードセグメント 起動コード 通常のコード CALLF によって宣言された関数 (78K0 のみ ) 割込みおよび callt ベクタ C++ 動的初期化 コードおよびデータ配置のリンクされた結果の検証 長すぎるセグメントのエラーおよび範囲エラー リンカマップファイル DLIB ランタイムライブラリ ランタイムライブラリの概要 ランタイムライブラリの機能 ライブラリの選択 ライブラリのビルドが必要な場合 ライブラリ構成 ランタイムライブラリでのデバッグサポート ビルド済ライブラリの使用 ビルド済ライブラリのカスタマイズ ( リビルドなし ) printf scanf のフォーマッタの選択 printf フォーマッタの選択 vii

8 scanf フォーマッタの選択 ライブラリモジュールのオーバライド カスタマイズしたライブラリのビルドと使用 ライブラリプロジェクトのセットアップ ライブラリ機能の修正 カスタマイズしたライブラリの使用 システムの起動と終了 システム起動 システム終了 システム初期化のカスタマイズ low_level_init cstartup ファイルの修正 s 標準 I/O ストリーム 低レベルキャラクタ I/O の実装 printf scanf の構成シンボル フォーマット機能のカスタマイズ ファイル I/O ロケール ビルド済ライブラリでのロケールサポート ロケールサポートのカスタマイズ 実行中のロケール変更 環境の操作 シグナル関数 時間関数 strtod 関数 assert 関数 ヒープ ハードウェアサポート C-SPY ランタイムインタフェース 低レベルデバッガランタイムインタフェース デバッガの [ ターミナル I/O] ウィンドウ モジュールの整合性チェック ランタイムモデル属性 ランタイムモデル属性の使用 viii IAR C/C++ コンパイラリファレンスガイド

9 目次 定義済ランタイム属性 ユーザ定義のランタイムモデル属性 CLIB ランタイムライブラリ ランタイムライブラリ I/O キャラクタベース I/O printf および sprintf で使用されるフォーマッタ scanf および sscanf で使用されるフォーマッタ システムの起動と終了 システム起動 システム終了 デフォルトのライブラリモジュールのオーバライド システム初期化のカスタマイズ C-SPY ランタイムインタフェース デバッガの [ ターミナル I/O] ウィンドウ 終了 モジュールの整合性チェック アセンブラ言語インタフェース C 言語とアセンブラの結合 組込み関数 C 言語とアセンブラモジュールの結合 インラインアセンブラ C からのアセンブラルーチンの呼出し スケルトンコードの作成 コードのコンパイル C++ からのアセンブラルーチンの呼出し 呼出し規約 関数の宣言 C++ ソースコードでの C リンケージの使用 保護レジスタとスクラッチレジスタ 関数の入口 関数の終了 例 ix

10 関数ディレクティブ 呼出しフレーム情報 CFI ディレクティブ CFI サポートを持つアセンブラソースの作成 C++ の使用 概要 標準 Embedded C 拡張 Embedded C C++ サポートの有効化 機能の説明 クラス 関数型 New および Delete 演算子 (78K0R のみ ) テンプレート キャスト演算子の派生形 mutable 名前空間 std 名前空間 メンバ関数へのポインタ 割込みと EC++ デストラクタの使用 C++ 言語拡張 組込みアプリケーション用の効率的なコーディング データ型の選択 効率的なデータ型の使用 浮動小数点数型 構造体エレメントのアラインメント 匿名構造体と匿名共用体 データと関数のメモリ配置制御 絶対アドレスへのデータ配置 データと関数のセグメントへの配置 コンパイラ最適化の設定 最適化実行のスコープ 最適化レベル x IAR C/C++ コンパイラリファレンスガイド

11 目次 速度とサイズ 変換の微調整 効率的なコードの記述 最適化を容易にするコードの記述 スタックエリアと RAM メモリの節約 関数プロトタイプ 整数型とビット否定 同時にアクセスされる変数の保護 特殊機能レジスタへのアクセス 非初期化変数 パート 2 リファレンス情報 外部インタフェースの詳細 呼出し構文 コンパイラ呼出し構文 オプションの受渡し 環境変数 インクルードファイル検索手順 コンパイラ出力 診断 メッセージフォーマット 重要度 重要度の設定 インターナルエラー コンパイラオプション オプションの構文 オプションのタイプ パラメータの指定に関する規則 コンパイラオプションの概要 オプションの説明 aggressive_inlining char_is_signed xi

12 --clib code_model code_segment core D data_model debug, -r dependencies diag_error diag_remark diag_suppress diag_warning diagnostics_tables disable_data_alignment discard_unused_publics dlib_config e ec eec enable_multibytes error_limit f generate_callt_runtime_library_calls header_context I l library_module mfc migration_preprocessor_extensions module_name near_const_location no_code_motion no_cse no_inline xii IAR C/C++ コンパイラリファレンスガイド

13 目次 --no_path_in_file_macros no_tbaa no_typedefs_in_diagnostics no_unroll no_warnings no_wrap_diagnostics O o, --output omit_types only_stdout output, -o predef_macros preinclude preprocess public_equ r, --debug remarks require_prototypes silent strict_ansi warnings_affect_exit_code warnings_are_errors workseg_area データ表現 アラインメント K マイクロコントローラのアラインメント 基本データ型 整数型 浮動小数点数型 ポインタ型 関数ポインタ データポインタ キャスト xiii

14 構造体型 アラインメント 一般的なレイアウト パック構造体型 型修飾子 オブジェクトの volatile 宣言 オブジェクトの const 宣言 C++ のデータ型 コンパイラ拡張 コンパイラ拡張の概要 言語拡張の有効化 C 言語拡張 重要な言語拡張 便利な言語拡張 軽微な言語拡張 拡張キーワード 拡張キーワードの一般的な構文規則 型属性 オブジェクト属性 拡張キーワードの一覧 拡張キーワードの詳細 banked callf callt far far_func interrupt intrinsic monitor near near_func no_bit_access no_init xiv IAR C/C++ コンパイラリファレンスガイド

15 目次 non_banked noreturn no_save root saddr sfr V2_call V3_call プラグマディレクティブ プラグマディレクティブの一覧 プラグマディレクティブの詳細 bank basic_template_matching bitfields constseg data_alignment dataseg diag_default diag_error diag_remark diag_suppress diag_warning include_alias inline language location message object_attribute optimize pack printf_args required rtmodel xv

16 scanf_args セグメント type_attribute vector 組込み関数 組込み関数の概要 組込み関数の詳細 break disable_interrupt enable_interrupt get_interrupt_state halt no_operation set_interrupt_state stop プリプロセッサ プリプロセッサの概要 定義済プリプロセッサシンボルの詳細 その他のプリプロセッサ拡張 NDEBUG _Pragma() #warning message VA_ARGS ライブラリ関数 概要 ヘッダファイル ライブラリオブジェクトファイル リエントラント性 IAR DLIB ライブラリ C ヘッダファイル C++ ヘッダファイル 組込み関数としてのライブラリ関数 xvi IAR C/C++ コンパイラリファレンスガイド

17 目次 C の追加機能 IAR CLIB ライブラリ ライブラリ定義の概要 セグメントリファレンス セグメントの概要 セグメントの説明 BCODE CHECKSUM CLTVEC CODE CONST CSTACK DIFUNCT FAR_A FAR_CONST FAR_HEAP FAR_I FAR_ID FAR_N FAR_Z FCODE HEAP INTVEC NEAR_A NEAR_CONST NEAR_HEAP NEAR_I NEAR_ID NEAR_N NEAR_Z RCODE SADDR_A SADDR_I xvii

18 SADDR_ID SADDR_N SADDR_Z SWITCH WRKSEG XCODE 処理系定義の動作 処理系定義の動作の詳細 翻訳 ライブラリ 識別子 文字 整数 浮動小数点数 配列 ポインタ レジスタ 構造体 共用体 列挙型 ビットフィールド 修飾子 宣言子 文 プリプロセッサディレクティブ IAR DLIB ライブラリ関数 IAR CLIB ライブラリ関数 索引 xviii IAR C/C++ コンパイラリファレンスガイド

19 表 1: このガイドの表記規則... xxv 2: このガイドで使用されている命名規約... xxvi 3: プロセッサコア : ライブラリ 依存ファイルの指定用コマンドラインオプション : データモデルの特徴 : メモリタイプと対応するキーワード : コードモデル : 関数メモリ属性 : サイクルにおける標準的なバンク切替えコスト : サイクルにおける高速バンク切替えコスト : XLINK セグメントメモリタイプ : ターゲットシステムのメモリレイアウト ( 例 ) : メモリタイプと対応するセグメントグループ : セグメント名のサフィックス : ライブラリ構成 : ランタイムライブラリでのデバッグサポートレベル : ビルド済ライブラリ : カスタマイズ可能な項目 : printf のフォーマッタ : scanf のフォーマッタ : printf の構成シンボルの詳細 : scanf の構成シンボルの詳細 : 低レベルファイル I/O : ヒープとメモリタイプ : デバッグ情報付きでリンクした場合に特殊な意味を持つ関数 : ランタイムモデル属性の例 : 定義済ランタイムモデル属性 : ランタイムライブラリ : パラメータの引渡しに使用されるレジスタ : リターン値に使用されるレジスタ : 名前ブロックで定義されている呼出しフレーム情報リソース xix

20 32: コンパイラ最適化レベル : コンパイラの環境変数 : エラーリターンコード : コンパイラオプションの一覧 : 整数型 : 浮動小数点数型 : 関数ポインタ : データポインタ : 拡張キーワードの一覧 : プラグマディレクティブの一覧 : 組込み関数の一覧 : 定義済シンボル : 従来の標準 C ヘッダファイル -DLIB : Embedded C++ ヘッダファイル : 追加の Embedded C++ ヘッダファイル -DLIB : 標準テンプレートライブラリヘッダファイル : 新しい標準 C ヘッダファイル -DLIB : IAR CLIB ライブラリヘッダファイル : セグメントの概要 : strerror() が返すメッセージ -IAR DLIB ライブラリ : strerror() が返すメッセージ - IAR CLIB ライブラリ xx IAR C/C++ コンパイラリファレンスガイド

21 はじめに 78K 用 IAR C/C++ コンパイラリファレンスガイドへようこそ このガイドは ご使用のアプリケーション要件に対し 最適な方法でコンパイラをご利用頂く際に役立つ 詳細なリファレンス情報を提供します また アプリケーションを効率的に開発するための推奨コーディングテクニックも説明しています 78K0 と 78K0S マイクロコントローラコアと 78K0R マイクロコントローラコア間のアーキテクチャが大きく違うために IAR Embedded Workbench for NEC Electronics 78K Microcontroller Subfamilies には 78K0/78K0S コンパイラと 78K0R コンパイラという 2 つの個別のコンパイラが含まれています こうしたコンパイラが同じように動作する場合 本ガイドでは両者を 78K 用 IAR C/C++ コンパイラと呼びます 本ガイドの対象者 本ガイドは C/C++ 言語を使用して 78K マイクロコントローラ用アプリケーションを開発する予定があり コンパイラの使用方法に関する詳細情報を必要とするユーザを対象としています また 以下について十分な知識があるユーザを対象としています 78K マイクロコントローラのアーキテクチャおよび命令セット (78K マイクロコントローラについては NEC の提供するドキュメントを参照 ) C/C++ プログラミング言語 組込みシステム用アプリケーションの開発 ホストコンピュータのオペレーティングシステム 本ガイドの使用方法 78K 用 IAR C/C++ コンパイラを使用する際には 本ガイドの パート 1: コンパイラ を参照してください コンパイラの使用方法を確認し プロジェクトの設定が完了したら パート 2 リファレンス情報 に進んでください IAR システムズのビルドツールを初めて使用する場合は まず IAR Embedded Workbench IDE ユーザガイド の内容を確認してください 本ガイドには xxi

22 本ガイドの内容 IDE および IAR C-SPY デバッガの製品の概要 基礎を説明するチュートリアル コンセプト ユーザ情報 リファレンス情報が含まれています 本ガイドの内容 本ガイドの構成および各章の概要を以下に示します パート 1: コンパイラ イントロダクション では コンパイラを使用して アプリケーションを効率的に開発するために必要な基礎を説明します データ記憶 では メモリ型に重点を置いてメモリへのデータ保存方法について説明します 78K0R コアについては データモデルの概念を説明します 関数 では 関数に関連した拡張 ( 関数を制御するための仕組み ) の概要を説明した後 これらの仕組みのいくつかを取り上げて詳しく説明します コードおよびデータの配置 では セグメントのコンセプト リンカコマンドファイルの概要 コードとデータをメモリへ配置する方法について説明します DLIB ランタイムライブラリ では アプリケーションの実行環境である DLIB ランタイムライブラリについて説明します オプションの設定 デフォルトライブラリモジュールへのオーバライド 自作ライブラリのビルドにより ランタイムライブラリを変更する方法を説明します また システムの初期化 cstartup ファイルの概要 ロケール用モジュールの使用方法 ファイル I/O についても説明します CLIB ランタイムライブラリ では CLIB ランタイムライブラリの概要とそのカスタマイズ方法を説明します また システム初期化と cstartup ファイルの概要についても説明します アセンブラ言語インタフェース では アプリケーションの一部をアセンブラ言語で記述する場合に必要な情報を説明します 呼出し規約についても説明しています C++ の使用 では 業界標準のEC++ とIAR 拡張 EC++ という2 種類のC++ サポートの概要を説明します 組込みアプリケーション用の効率的なコーディング では 組込みアプリケーションに適した効率的なコーディング方法のヒントを提供します パート 2 リファレンス情報 外部インタフェースの詳細 では コンパイラがその環境を操作する方法として 呼出し構文 コンパイラにオプションを渡すための手法 環境変数 インクルードファイル検索手順 さまざまな種類のコンパイラ出力 xxii IAR C/C++ コンパイラリファレンスガイド

23 はじめに について説明します また コンパイラの診断システムの機能についても説明します コンパイラオプション では オプションの設定方法 オプションの要約 各コンパイラオプションの詳細なリファレンス情報について説明します データ表現 では 使用可能なデータ型 ポインタ 構造体について説明します また 型やオブジェクト属性についても説明します コンパイラ拡張 では ISO/ANSI C 規格のコンパイラ拡張の概要を説明します その後 使用可能な C 言語拡張について詳細に説明します 拡張キーワード では 標準 C/C++ 言語を拡張した 78K 固有のキーワードのリファレンス情報を提供します プラグマディレクティブ では プラグマディレクティブのリファレンス情報を提供します 組込み関数 では 78K 固有の低レベル機能にアクセスするための関数のリファレンス情報を提供します プリプロセッサ では さまざまなプリプロセッサディレクティブ シンボル その他の関連情報など プリプロセッサの概要を説明します ライブラリ関数 では C/C++ ライブラリ関数の概要と ヘッダファイルの要約を説明します セグメントリファレンス では コンパイラでのセグメント使用に関するリファレンスを収録しています 処理系定義の動作 では コンパイラが C 言語標準の処理系定義エリアをどのように扱うかについて説明します 参考資料 IAR システムズの 78K マイクロコントローラ用開発ツールについては それぞれのガイドで説明しています 知りたい情報に対応するドキュメントを以下に示します IDE および IAR C-SPY デバッガの使用については IAR Embedded Workbench IDE ユーザガイド を参照してください 78K IAR アセンブラを使用したプログラミングについては 78K IAR アセンブラリファレンスガイド を参照してください IAR XLINK リンカ IAR XAR ライブラリビルダ IAR XLIB ライブラリアンの使用方法については 以下を参照してください : IAR リンカおよびライブラリツールリファレンスガイド IAR DLIB ライブラリ関数の使用方法については オンラインヘルプシステムを参照してください xxiii

24 参考資料 IAR CLIB ライブラリ関数の使用については オンラインヘルプシステムの IAR C ライブラリ関数リファレンスガイド を参照してください 78K 用 IAR Embedded Workbench の旧バージョンで作成したアプリケーションコードやプロジェクトの移植については 78K IAR Embedded Workbench 移行ガイド を参照してください MISRA-C:1998 規則の使用および MISRA-C:2004 規則の使用については IAR Embedded Workbench MISRA C:1998 リファレンスガイド IAR Embedded Workbench MISRA C:2004 リファレンスガイド をそれぞれ参照してください これらのガイドはすべて ハイパーテキスト PDF または HTML フォーマットでインストール用メディアに収録されています 印刷物として提供されるガイドもあります 参考資料 IAR システムズ開発ツールの使用時は 以下の資料が参考になります Barr, Michael, and Andy Oram, ed. Programming Embedded Systems in C and C++. OReilly & Associates. Harbison, Samuel P. and Guy L. Steele (contributor). C: A Reference Manual. Prentice Hall. Kernighan, Brian W. and Dennis M. Ritchie. The C Programming Language. Prentice Hall. [ 最新版では ANSI C 規格について記述しています ] Labrosse, Jean J. Embedded Systems Building Blocks: Complete and Ready-To-Use Modules in C. R&D Books. Lippman, Stanley B. and Jose Lajoie. C++ Primer. Addison-Wesley. Mann, Bernhard. C für Mikrocontroller. Franzis-Verlag. [ ドイツ語 ] Stroustrup, Bjarne. The C++ Programming Language. Addison-Wesley. 以下の Web サイトも参考にしてください NEC の Web サイト ( には 78K マイクロコントローラや ARM アーキテクチャの情報が公開されています IARシステムズのWeb サイト ( では アプリケーションノートおよびその他の製品情報を公開しています Embedded C++ Technical CommitteeのWebサイト ( には Embedded C++ 規格についての情報が公開されています xxiv IAR C/C++ コンパイラリファレンスガイド

25 はじめに 表記規則 本ガイドでプログラミング言語 C と記述されている場合 特に記述がない限り C++ も含まれます 製品インストール先のディレクトリ ( 例 : 78k\doc) の記述がある場合 その場所までのフルパス ( 例 : c:\program Files\IAR Systems\Embedded Workbench 5.n\78k\doc) を意味します 表記規則 このガイドでは 次の表記規則を使用します スタイル コンピュータ 用途 ソースコードの例 ファイルパス コマンドライン上のテキスト 2 進数 16 進数 8 進数 パラメータ パラメータとして使用される実際の値を表すプレースホルダ た とえば filename.h の場合 filename はファイルの名前を表 します [ オプション ] コマンドのオプション部分 a b c コマンド内の選択可能な部分 {a b c} コマンドの必須部分に選択肢があることを示します 太字 斜体 画面に表示されるメニュー名 メニューコマンド ボタン およびダイアログボックス 本ガイドや他のガイドへのクロスリファレンスを示します 強調 3 点リーダは その前の項目を任意の回数繰り返せることを示します IAR Embedded Workbench IDE 固有の内容を示します コマンドラインインタフェース固有の内容を示します 開発やプログラミングについてのヒントを示します ワーニングを示します 表 1: このガイドの表記規則 xxv

26 表記規則 命名規約 以下の命名規約は このガイドに記述されている IAR システムズの製品およびツールで使用されています ブランド名 78K 用 IAR Embedded Workbench 78K 用 IAR Embedded Workbench IDE 78K 用 IAR C-SPY デバッガ IAR C-SPY シミュレータ 78K 用 IAR C/C++ コンパイラ 78K 用 IAR アセンブラ IAR XLINK リンカ IAR XAR ライブラリビルダ IAR XLIB ライブラリアン IAR DLIB ライブラリ IAR CLIB ライブラリ表 2: このガイドで使用されている命名規約 一般名称 IAR Embedded Workbench IDE C-SPY デバッガシミュレータコンパイラアセンブラ XLINK リンカライブラリビルダライブラリアン DLIB ライブラリ CLIB ライブラリ xxvi IAR C/C++ コンパイラリファレンスガイド

27 パート 1: コンパイラ 78K 用 IAR C/C++ コンパイラリファレンスガイド のパート 1 は 以下の章で構成されています イントロダクション データ記憶 関数 コードおよびデータの配置 DLIB ランタイムライブラリ CLIB ランタイムライブラリ アセンブラ言語インタフェース C++ の使用 組込みアプリケーション用の効率的なコーディング 1

28 2

29 イントロダクション この章では コンパイラを使用して アプリケーションを効率的に開発するために必要な基礎を説明します まず サポートされているプログラミング言語の概要と アプリケーションのコンパイルおよびリンクに関わるステップについて説明します 次に コンパイラについて説明します アプリケーションで 78K マイクロコントローラを最大限に活用するためのテクニックの概要など プロジェクトのセットアップに必要な基本設定の概要について解説します 以下の章で これらのテクニックについて詳しく説明します IAR 言語の概要 IAR C/C++ Compiler for 78K では 以下の 2 種類の高度なプログラミング言語を使用できます C 組込みシステム業界で最も幅広く使用されている高級プログラミング言語です IAR C/C++ Compiler for 78K を使用して ISO 9899:1990 規格 ( 一般に ANSI C 規格と呼ばれています ) に準拠したフリースタンディングアプリケーションのビルドが可能です C++ 最新のオブジェクト指向プログラミング言語です モジュール方式のプログラミングに最適なフル機能のライブラリを備えています IAR システムズでは 以下の 2 種類 C++ 言語をサポートしています Embedded C++ (EC++) C++ プログラミング言語のサブセットであり 組込みシステムのプログラミング用に設計されています 業界団体である Embedded C++ Technical Committee により定義されています C++ の使用 を参照してください IAR 拡張 Embedded C++ テンプレート 名前空間 新しいキャスト演算子 標準テンプレートライブラリ (STL) などの追加機能をサポートしています サポートされている各言語は strict relaxed IAR 拡張 relaxed のいずれかのモードで使用できます strict モードは 規格に厳密に準拠します relaxed モードでは ある程度の規格非準拠を許可しています 詳細については コンパイラ拡張 を参照してください パート 1 コンパイラの使用 3

30 サポートされている 78K デバイス コンパイラでの C 言語の処理系定義の処理方法については 処理系定義の動作 を参照してください また アプリケーションの一部または全部をアセンブラ言語で実装することもできます 78K IAR アセンブラリファレンスガイド を参照してください Embedded C++ 言語 拡張 Embedded C++ の詳細については C++ の使用 を参照してください サポートされている 78K デバイス IAR C/C++ Compiler for 78K は 標準の NEC 78K0/78K0S および 78K0R マイクロコントローラコアに基づいたすべてのデバイスをサポートしています このサポートは 一方で 78K0 と 78K0S コアのための個別のコンパイラ実行可能ファイルとして実装され もう一方では 78K0R コアとして実装されています これは コンパイルに必要なコマンドラインからデータモデルといった概念まで 数多くのコンパイラの機能に影響しています コンパイラの動作が異なる場合を除いて 本ガイドでは両方のコンパイラを IAR C/C++ Compilers for 78K と表記します コンパイラの動作が異なる場合は 78K0 と 78K0S コアの記号に 特に指定されていない限り DIV/MUL 命令を除いた 78K0 コアが含まれます アプリケーションのビルド概要一般的なアプリケーションは いくつかのソースファイルとライブラリからビルドします ソースファイルは C C++ またはアセンブラ言語で作成でき コンパイラやアセンブラによってオブジェクトファイルにコンパイルできます ライブラリとは オブジェクトファイルを集めたもので リンク時に必要がある場合にのみ追加されます ライブラリの一般的な例は ランタイム環境と C/C++ 標準ライブラリを含むコンパイラライブラリです また ライブラリは IAR XAR ライブラリビルダや IAR XLIB ライブラリアンを使用してビルドすることも あるいはサードパーティ製を使用することも可能です 最終的なアプリケーションのビルドには IAR XLINK リンカが使用されます 通常 XLINK は ターゲットシステムの使用可能なリソースを記述するリンカコマンドファイルを使用します コマンドライン上でアプリケーションをビルドするプロセスを以下に示します IDE を使用してライブラリをビルドする方法については IAR Embedded Workbench IDE ユーザガイド を参照してください 4 IAR C/C++ コンパイラリファレンスガイド

31 イントロダクション コンパイル コマンドラインインタフェースで以下のコマンドを実行すると デフォルト設定を使用して ソースファイル myfile.c がオブジェクトファイル myfile.r26 にコンパイルされます 78K0/78K0S コンパイラ : 78K0R コンパイラ : icc78k myfile.c icc78k0r myfile.c また 重要なオプションを指定する必要があります ( ページ 6 のプロジェクト構成の基本設定を参照 ) リンク 最終的なアプリケーションのビルドには IAR XLINK リンカが使用されます 通常は XLINK では入力として以下の情報が必要になります いくつかのオブジェクトファイル 場合によっては特定のライブラリ ランタイム環境と標準言語関数を含む標準ライブラリ プログラム開始ラベル ターゲットシステムのメモリ内のコードおよびデータの配置を記述したリンカコマンドファイル 出力フォーマットに関する情報コマンドラインで 次の行を使用して XLINK を起動できます : xlink myfile.r26 myfile2.r26 -s program_start -f lnk.xcl cl78ks1.r26 -o aout.hex -FIntel-extended この例では myfile.r26 と myfile2.r26 がオブジェクトファイルで lnk.xcl がリンカコマンドファイル cl78ks1.r26 がランタイムライブラリです -s オプションには アプリケーション開始を示すラベルを指定します -o オプションでは入力ファイル名を指定し -r は C-SPY でのデバッグに使用する出力フォーマット UBROF の指定に使用します IAR XLINK リンカは ユーザーの仕様に応じて出力を生成します 目的に合った出力フォーマットを選択してください デバッガに出力をロードする場合は デバッグ情報付きで出力する必要があります 別の方法として 出力を PROM プログラマにロードすることができます この場合は Intel-hex Motorola S-records など デバッグ情報を含まない出力形式を使用する必要があります オプション -F は 出力フォーマットの指定に使用できます ( デフォルトの出力フォーマットは Intel-extended です ) パート 1 コンパイラの使用 5

32 プロジェクト構成の基本設定 プロジェクト構成の基本設定ここでは 使用する 78K デバイスに最適なコードをコンパイラで生成するために必要なプロジェクトセットアップの基本設定の概要を説明します オプションの指定は コマンドラインインタフェースや IDE で行えます 基本設定は以下のとおりです : プロセッサコア コードモデル データモデル (78K0R のみ ) 最適化設定 ランタイム環境これらの設定に加えて その他多数のオプションや設定により 結果をさらに詳細に調整できます オプションの設定方法の詳細 および利用可能なすべてのオプションの一覧については それぞれ コンパイラオプション IAR Embedded Workbench IDE ユーザガイド を参照してください プロセッサコア IAR C/C++ Compilers for 78K は 78K シリーズの以下のプロセッサコアをサポートしています : プロセッサコア IAR Embedded Workbench IDE でプロセッサコアを指定する方法については Embedded Workbench IDE のオンラインヘルプシステム system を参照してください プロジェクトにプロセッサコアを指定するには --core=[78k0_basic 78k0 78k0r 78k0s] オプションを使用します ( ページ 156 の --core を参照 ) コードモデル 説明 78K0_basic DIV/MUL 命令を持たない 78K0 コア 78K0( デフォルト ) DIV/MUL 命令を持つ 78K0 コア 78K0R 78K0R コア 78K0S 78K0S コア 表 3: プロセッサコア IAR C/C++ Compilers for 78K は 2 つのコードモデルを使用します これらはファイルまたは関数レベルで設定して デフォルトでどの関数を呼出すかを制御することができます 3 つのうち 2 つは 78K0/78K0S コンパイラと 2 つは 78K0R コンパイラとの併用ができます 以下のコードモデルが使用できます : 6 IAR C/C++ コンパイラリファレンスガイド

33 イントロダクション 78K0/78K0S standard コードモデルの上限は 64 KB です banked コードモデルはバンクメカニズムを使用して 16 MB のアドレス空間にアクセスできます 78K0R near コードモデルの上限は 64 KB です far コードモデルは 1 MB メモリ全体にアクセスできます コードモデルの詳細は 関数 の章を参照してください データモデル (78K0R のみ ) 78K0R IAR C/C++ コンパイラは データ要件の異なるアプリケーションのコード作成を容易にするために 2 つのデータモデルを使用します 以下のデータモデルが使用できます : near データモデルはデータメモリ内の最高 64 KB のデータにアクセスできます far データモデルは データモデル内の 1 MB 全体のデータにアクセスできます データモデルの詳細は データ記憶 の章を参照してください 注 : 78K0/78K0S コンパイラは データモデルを使用しません 速度とサイズの最適化 このコンパイラは 不要なコードの削除 定数伝搬 インライン化 共通部分式の削除 精度調整などを実行するオプティマイザを装備した最先端のコンパイラです また 展開や帰納変数の削除などのループ最適化も実行します 最適化レベルを複数のレベルから選択でき 最高レベルの場合は最適化の目標として サイズ 速度 バランスから選択できます ほとんどの最適化で アプリケーションのサイズ縮小と高速化の両方が実現されます しかし 効果が得られない場合は コンパイラはユーザが指定した最適化目標に準じて 最適化の実行方法を決定します 最適化レベルと目標は アプリケーション全体 ファイル単位 関数単位のいずれのレベルに対しても指定できます また 関数インライン化などの一部の最適化を無効にすることもできます 効率的なコーディングテクニックの詳細は 組込みアプリケーション用の効率的なコーディング を参照してください パート 1 コンパイラの使用 7

34 プロジェクト構成の基本設定 ランタイム環境 必要なランタイム環境を構築するには ランタイムライブラリを選択し ライブラリのオプションを設定する必要があります 場合によっては 特定のライブラリモジュールを ユーザがカスタマイズしたモジュールでオーバライドすることも必要となります 以下の 2 組のランタイムライブラリが用意されています : IAR DLIB ライブラリ ISO/ANSI C と C++ に対応しています このライブラリは IEEE 754 フォーマットの浮動小数点数もサポートしています また ロケール ファイル記述子 マルチバイト文字などのさまざまなレベルのサポートを指定して構成することができます IAR CLIB ライブラリは軽量ライブラリで ISO/ANSI C に完全に対応しているわけではありません IEEE 754 フォーマットの浮動小数点の数値にも完全には対応しておらず Embedded C++ もサポートしていません ( このライブラリは デフォルトとして C プロジェクトに使用されます ) ランタイムライブラリとしては ビルド済ライブラリのいずれか 1 つ またはユーザ自身でカスタマイズおよびビルドしたライブラリを選択できます IDE は どちらのライブラリにもライブラリプロジェクトテンプレートを提供しています これを使用して 自作ライブラリのビルドが可能です この機能により ランタイムライブラリを完全管理できます アセンブラソースコードだけで構成されたプロジェクトの場合は ランタイムライブラリを選択する必要はありません ランタイム環境の詳細は それぞれ DLIB ランタイムライブラリ および CLIB ランタイムライブラリ を参照してください ランタイムライブラリのセットアップやすべての関連ファイルの指定を行う方法は IDE とコマンドラインのどちらのビルドインタフェースを使用するかによって異なります IDE でのランタイムライブラリの選択 ライブラリを選択するには [ プロジェクト ]>[ オプション ] を選択し 一般オプションカテゴリで [ ライブラリ構成 ] タブをクリックします [ ライブラリ ] ドロップダウンリストから 該当するライブラリを選択します DLIB ライブラリには Normal と Full の 2 つの異なる設定があり これにはロケール ファイル記述子 マルチバイト文字などで異なるレベルのサポートが含まれます 詳細は ページ 55 のライブラリ構成 を参照してください 選択したライブラリ構成および他のプロジェクト設定に基づいて 適切なライブラリファイルが自動的に使用されます デバイス固有のインクルードファイルについては 正しいインクルードパスがセットアップされます 8 IAR C/C++ コンパイラリファレンスガイド

35 イントロダクション コマンドラインからのランタイム環境の選択 以下のコマンドラインオプションを使用して ライブラリや依存ファイルを指定します コマンドライン 説明 -I 78k\inc デバイス固有の I/O 定義ファイルへのインクルードパス を指定します -I 78k\inc\{clib dlib} ライブラリ固有のインクルードパスを指定します 使用 するライブラリに応じて clib か dlib を使用します libraryfile.r26 ライブラリオブジェクトファイルを指定 --clib CLIB 固有の浮動小数点型を使用 (IAR CLIB ライブラリの 場合のみ ) --dlib_config C:\...\configfile.h ライブラリ設定ファイルを指定 (IAR DLIB ライブラリの場合のみ ) 表 4: ライブラリ 依存ファイルの指定用コマンドラインオプション IAR DLIB ライブラリ用のビルド済ライブラリオブジェクトの一覧は 表 17 ビルド済ライブラリ 57 ページを参照してください また この表には オブジェクトファイルとプロジェクトオプションの依存関係や対応する設定ファイルに関する説明もあります 必ずプロジェクトオプションに合ったオブジェクトファイルを使用してください IAR CLIB ライブラリ用のビルド済ライブラリオブジェクトの一覧については 表 28 ランタイムライブラリ 84 ページを参照してください この表は オブジェクトファイルと対応するプロジェクトオプションの関係も示します 必ずプロジェクトオプションに合ったオブジェクトファイルを使用してください ライブラリとランタイム環境オプションの設定 オプションの設定により ライブラリやランタイムライブラリのサイズを削減できます 関数 printf と scanf およびこれらの派生関数で使用されるフォーマッタ ページ 59 の printf scanf のフォーマッタの選択 (DLIB) およびページ 85 の I/O (CLIB) を参照してください スタックやヒープのサイズ ページ 46 のスタック ページ 47 のヒープを参照してください 組込みシステム用の特殊サポートここでは コンパイラで 78K マイクロコントローラの特定の機能をサポートするために提供されている拡張の概要を説明します パート 1 コンパイラの使用 9

36 組込みシステム用の特殊サポート 拡張キーワード コンパイラは コード生成方法の設定に使用するキーワードセットを提供しています たとえば 個々の変数のメモリ型を制御するキーワードや 特殊な関数型を宣言するキーワードがあります IDE では デフォルトで言語拡張が有効になっています コマンドラインオプション -e を指定すると 拡張キーワードが使用可能になり 変数名として使用できないように予約されます 詳細は ページ 164 の -e を参照してください 拡張キーワードの詳細は 拡張キーワード を参照してください プラグマディレクティブ プラグマディレクティブは コンパイラの動作 ( メモリの配置方法 拡張キーワードの許可 / 禁止 ワーニングメッセージの表示 / 非表示など ) を制御します プラグマディレクティブは コンパイラでは常に有効になっています プラグマディレクティブは ISO/ANSI C に準拠しており ソースコードの移植性を確認する場合に非常に便利です プラグマディレクティブの詳細は プラグマディレクティブ を参照してください 定義済シンボル 定義済プリプロセッサシンボルを使用して コンパイル時の環境 ( コードモデル プロセッサの種類など ) を調べることができます 定義済シンボルの詳細は プリプロセッサ を参照してください 特殊な関数型 78K マイクロコントローラの特殊なハードウェア機能は コンパイラの特殊な関数型 割込みとモニタによってサポートされています これらの関数をアセンブラ言語で記述することなく 完全なアプリケーションを記述できます 詳細は ページ 23 の割込み 並列処理 OS 関連のプログラミング用の基本コマンドを参照してください 低レベル機能へのアクセス アプリケーションのハードウェア関連部分では 低レベル機能へのアクセスが必要不可欠です このコンパイラは 組込み関数 C モジュールとアセンブラモジュールの混在 インラインアセンブラなどの方法でサポートしています これらの方法については ページ 91 の C 言語とアセンブラの結合を参照してください 10 IAR C/C++ コンパイラリファレンスガイド

37 データ記憶 この章では 78K マイクロコントローラのメモリレイアウトの概要と メモリでの基本的なデータ記憶方法 ( スタック 静的 ( グローバル ) メモリ ヒープメモリ ) について説明します メモリを効率的に使用するために コンパイラではデータモデルとデータメモリ属性を使用してアクセス方法を微調整できるため コードサイズが小さくなります データモデルおよびメモリ型の概念は ポインタや構造 Embedded C++ クラスオブジェクト 非初期化メモリに関連して説明します 最後に データをスタックやヒープに記憶する場合の詳細を説明します 概要 78K マイクロコントローラファミリは 78K0 と 78K0S コアと 78K0R コアという 2 つの主なグループに分類できます 78K0R コアは もう一方のコアよりも強力な通常のアドレス機能を持っています 78K0 と 78K0S コアには 64 KB の連続するメモリがあり 範囲は 0x0000 から 0xFFFF までです 78K0R コアは 1 MB の連続するメモリを持ち 範囲は 0x00000 から 0xFFFFF までです メモリ範囲には さまざまな種類の物理メモリを設置できます 一般的な用途では リードオンリーメモリ (ROM) とリード / ライトメモリ (RAM) の両方を使用します また メモリ範囲の一部に プロセッサが管理するレジスタや周辺ユニットが含まれます すべての 78K マイクロコントローラは 異なる方法でメモリにアクセスできます アクセス方法は 汎用性がありメモリ空間全体にアクセス可能でコストがかかるものから ショートアドレスメモリ領域にアクセスできる安価な方法までいろいろあります さまざまなデータ記憶方法 一般的な用途では データを以下の 3 種類の方法でメモリに格納できます 自動変数 static として宣言された変数を除き 関数にローカルな変数はすべて スタック上に格納されます これらの変数は 関数の実行中にアクセスが可能です 関数が呼出し元に戻ると このメモリ空間は無効になります パート 1 コンパイラの使用 11

38 データモデル (78K0R のみ ) static として宣言されたグローバル変数およびローカル変数この場合 メモリは 1 度だけ割り当てられます ここでの 静的 とは このタイプの変数に割り当てられたメモリ容量がアプリケーション実行中に変化しないことを意味します 詳細は ページ 12 のデータモデル (78K0R のみ ) およびページ 13 のメモリタイプを参照してください 動的に割り当てられたデータアプリケーションは データをヒープ上に割り当てることができます この場合 アプリケーションが明示的にヒープをシステムに解放するまでデータは有効な状態で保持されます このタイプのメモリは アプリケーションを実行するまで必要なオブジェクト量がわからない場合に便利です 動的に割り当てられたデータを メモリ容量が限られているシステムや 長期間実行するシステムで使用すると 問題が生じる危険性があります 詳細については ページ 20 のヒープ上の動的メモリを参照してください データモデル (78K0R のみ ) IAR C/C++ Compiler for 78K0R は データモデルの概念をサポートし 異なるデータ要件を持つアプリケーション向けのコードを作成を容易にしています 技術的にはデータモデルは デフォルトのメモリタイプを指定します つまり データモデルは以下の内容を制御します 静的変数およびグローバル変数 定数リテラルのデフォルトの配置 動的に割り当てられるデータ たとえば mallocや演算子 new(c++ の場合 ) によって割り当てられたデータです デフォルトのポインタタイプ データモデルは デフォルトのメモリタイプのみを指定します 個々の変数やポインタについて これをオーバライドすることが可能です 個々のオブジェクトについてメモリタイプを指定する方法については ページ 14 のデータメモリ属性の使用を参照してください データモデルの指定 Near と Far の 2 つのデータモデルが実装されています これらのモデルは --data_model オプションによって制御されます 各モデルには デフォルトのメモリタイプとポインタサイズがあります データモデルオプションを指定しない場合 コンパイラは Near データモデルを使用します プロジェクトで同時に使用できるデータモデルは 1 つだけです また すべてのユーザモジュールとライブラリモジュールで 同一のモデルを使用する必要があります ただし 明示的にメモリ属性を指定することによってのみ 個々のデータオブジェクトとポインタのデフォルトのメモリタイプをオーバライドできます ( ページ 14 のデータメモリ属性の使用を参照 ) 12 IAR C/C++ コンパイラリファレンスガイド

39 データ記憶 以下の表は異なるデータモデルの概要です データモデル名 デフォルトのメモリとポインタ属性 データ配置 Near( デフォルト ) near 最上位 64 KB Far far 1MB のメモリ全体 表 5: データモデルの特徴 IDE でのオプション設定については IAR Embedded Workbench IDE ユーザガイド を参照してください プロジェクトにデータモデルを指定するには --data_model オプションを使用します ( ページ 158 の --data_model を参照 ) Near データモデル Near データモデルは メモリ内の最上位 64 KB にデータを配置します このメモリには 2 バイトのポインタを使用してアクセスできます つまり ポインタの保存に必要なのは 16 ビットのみということです パラメータとして送信されるデフォルトのポインタタイプでは 16 ビットのレジスタかスタック上の 2 バイトが使用されます Far データモデル Far データモデルは メモリ内の最初の 1MB にデータを配置します 3 バイトのポインタを使用してアクセス可能なのは このメモリのみです パラメータとして送信されるデフォルトのポインタタイプは スタック上の 4 バイトを使用します メモリタイプ ここでは コンパイラでのデータアクセスに使用されるメモリタイプの概念について説明します 複数のメモリタイプがある場合のポインタについても解説します 各メモリタイプについて 機能や制限を説明します コンパイラは さまざまなメモリタイプを使用して 異なるメモリの領域に配置されたデータにアクセスします メモリ領域にアクセスする方法はさまざまです コード空間や実行速度 レジスタの使用を考えると コストが変わってきます アクセス方法は 汎用性がありメモリ空間全体にアクセス可能でコストがかかるものから 一部のアドレスメモリ領域にアクセスできる安価な方法までいろいろあります 各メモリタイプは 1 つのメモリアクセス方法に対応しています 異なるメモリ ( またはメモリの一部 ) をメモリタイプに割り当てる場合 コンパイラはデータに効率的にアクセス可能なコードを生成できます パート 1 コンパイラの使用 13

40 メモリタイプ たとえば Near メモリアクセス方法を使用してアクセスが可能なメモリは Near タイプまたは Near メモリと呼ばれます それぞれのデータモデルでは アプリケーションで使用されるデフォルトのメモリが 1 つあります ただし 個々の変数やポインタについて 異なるメモリタイプを指定することは不可能です このため 大量のデータを保有するアプリケーションを作成して 同時に頻繁に使用される変数を効率的にアクセス可能なメモリ内に配置するのは不可能となります ショートアドレス領域 ショートアドレス領域 (saddr メモリ ) は アドレス範囲 0xFE20 0xFF1F (78K0 と 78K0S) または 0xFFE20 0xFFF1F (78K0R) にあるデータメモリの 256 バイトからなります saddr オブジェクトは saddr メモリ内にのみ配置できます このタイプのオブジェクトを使用することで それらにアクセスするためにコンパイラで生成されるコードが最小化されます つまり アプリケーションのフットプリントが小さくなり ランタイムで実行が速くなります NEAR near メモリは 64KB のデータメモリからなります 16 進表記では これはアドレス範囲 0x0000 0xFFFF (78K0 と 78K0S) または 0xF0000 0xFFFFF (78K0R) です near オブジェクトは near メモリ内にのみ配置できます FAR (78K0R のみ ) 78K0R のみが データメモリ 1 MB 全体からなる far メモリを持っています 16 進数表記では これはアドレス範囲 0x xFFFFF です far オブジェクトは far メモリ内にのみ配置でき これらのオブジェクトのサイズは 64 KB に制限されます SFR 特殊機能レジスタ (SFR) 領域は アドレス範囲 0xFF00 0xFFFF (78K0 と 78K0S) または 0xFFF00 0xFFFFF (78K0R) です 特殊機能レジスタは デバイス固有のヘッダファイルで定義します データメモリ属性の使用 コンパイラは データメモリ属性として使用可能な拡張キーワードを提供します これらのキーワードを使用すると 個々のデータオブジェクトとポインタについてデフォルトのメモリタイプをオーバライドできます つまり デ 14 IAR C/C++ コンパイラリファレンスガイド

41 データ記憶 フォルトのメモリ以外の他のメモリ領域にデータオブジェクトを配置することができます これは 個々のデータオブジェクトへのアクセス方法を微調整でき コードサイズが小さくなることを意味します 以下の表は 使用可能なメモリタイプとそれに対応するキーワードを示します メモリタイプキーワードアドレス範囲ポインタサイズ Saddr saddr 0xFE20-0xFF1F (78K0 と 78K0S) 0xFFE20-0xFFF1F (78K0R) キーワードは コンパイラで言語拡張が有効化されている場合にのみ使用可能です IDE では デフォルトで言語拡張が有効になっています 言語拡張を有効にするには -e コンパイラオプションを使用します 詳細は ページ 164 の -e を参照してください 各キーワードのリファレンス情報については ページ 208 の拡張キーワードの詳細を参照してください 構文 キーワードは 型修飾子 const および volatile と同じ構文に従います メモリ属性はタイプ属性であるため 変数を定義する際と宣言中の両方で指定しなければなりません ( ページ 203 の拡張キーワードの一般的な構文規則を参照 ) 以下の宣言によって 変数 i と j が saddr メモリに配置されます 変数 k と l も saddr メモリに配置されます memory. この場合 キーワードの位置は何も影響を及ぼしません saddr int i, j; int saddr k, l; 16 ビット Near( デフォルト ) near 0x0000-0xFFFF (78K0 と 78K0S) 0xF0000-0xFFFFF (78K0R) 16 ビット Far far 0x xFFFFF (78K0R のみ ) 24 ビット SFR sfr 0xFF00-0xFFFF (78K0 と 78K0S) 0xFFF00-0xFFFFF (78K0R) なし 表 6: メモリタイプと対応するキーワード キーワードは両方の識別子に影響します メモリタイプが指定されないと デフォルトのメモリタイプが使用されます #pragma type_attribute ディレクティブは メモリ属性の指定にも使用できます キーワードを指定するプラグマディレクティブを使用した場合は ソースコードの移植性を向上できるという利点があります 拡張キーワードと パート 1 コンパイラの使用 15

42 メモリタイプ プラグマディレクティブを同時に使用する方法について詳しくは プラグマディレクティブ を参照してください タイプの定義 記憶はタイプ定義を使用しても指定することができます 以下の 2 つの宣言は同等です /* typedef を介して定義 */ typedef char near Byte; typedef Byte *BytePtr; Byte AByte; BytePtr ABytePointer; /* 直接的に定義 */ near char AByte; char near *ABytePointer; ポインタとメモリタイプ ポインタは データの位置を参照するときに使用されます 一般的にポインタには 1 つのタイプがあります たとえば タイプ int * のポインタは整数をポイントします コンパイラでは ポインタは何らかのタイプのメモリもポイントします near と far の 2 種類のポインタがあり それぞれ near と far のメモリにあるデータオブジェクトをポイントします ただし far ポインタ ( および far メモリ ) は 78K0R コンパイラのみでしか使用できません これは saddr メモリが near メモリの一部であるためで near ポインタは saddr メモリにあるデータオブジェクトを管理することもできます 注 : 78K0/78K0S コンパイラには 1 つのポインタタイプしかないため 78K0/78K0S コンパイラ用にコードを作成しているときに near キーワードを使用して明示的にポインタを near として宣言する実用的な使用法はありません 構造体とメモリタイプ 構造体の場合 オブジェクト全体が同じメモリタイプ内に配置されます 個々の構造体メンバを異なるメモリタイプに配置することはできません 次の例では 変数 Gamma は saddr メモリ内に配置された構造体です struct MyStruct { int malpha; int mbeta; }; 16 IAR C/C++ コンパイラリファレンスガイド

43 データ記憶 saddr struct MyStruct Gamma; この宣言は正しくありません : struct MyStruct { int malpha; saddr int mbeta; /* 誤り */ }; その他の例 以下は一連の例と説明です まず 整数の変数が定義され ポインタ変数が導入されます 最後に near メモリ内の整数へのポインタを受け入れる関数が宣言されます 関数は near メモリ内の整数へのポインタを返します メモリ属性がデータタイプの前と後ろのどちらであっても 違いはありません 以下の例を読むには 左から始めて各ステップで修飾子を 1 つ追加してください int MyA; int near MyB; near int MyC; int * MyD; int near * MyE; int near * saddr MyF; int near * MyFunction( int near *); デフォルトのメモリ内に定義された変数 near メモリ内の変数 near メモリ内の変数 デフォルトのメモリ内に保存されたポインタ ポインタはデフォルトのメモリ内の整数をポイントします デフォルトのメモリ内に保存されたポインタ ポインタは near メモリ内の整数をポイントします saddr メモリに記憶された near メモリ内に保管された整数をポイントするポインタ near メモリ内に記憶された整数へのポインタであるパラメータを受け入れる関数の宣言 関数は near メモリ内に保管された整数へのポインタを返します C++ とメモリタイプ C++ クラスオブジェクトは 通常の C 構造体の場合と同じように 1 つのメモリタイプ内に配置されます ただし オブジェクトの一部と見なされるクラス パート 1 コンパイラの使用 17

44 自動変数スタック メンバは 非静的なメンバ変数です 静的メンバ変数は あらゆる種類のメモリ内に個別に配置できます C++ では クラスオブジェクトの数に関係なく それぞれの静的メンバ変数に 1 つのインスタンスしかないことに注意してください デフォルトのポインタタイプに適用されるすべての制限が this ポインタにも当てはまります つまり オブジェクトへのポインタをデフォルトのポインタタイプに変換することが可能性なければなりません また 非静的なメンバ関数の場合 クラスメモリが使用されている場合を除いて ( ページ 111 のクラスを参照 ) this ポインタがデフォルトのデータポインタタイプとなります Near データモデルでは メンバ関数を持つクラスのオブジェクトは デフォルトのメモリタイプ ( near) 内にのみ配置可能ということです 例 以下の例では delta という名のオブジェクト ( タイプ MyClass) が near メモリ内に定義されます このクラスは saddr メモリに保管される静的メンバ変数を含んでいます // クラス定義 ( ヘッダファイルに配置可能 ) class MyClass { public: int malpha; int mbeta; saddr static int mgamma; }; // 定義が必要 ( ソースファイルに配置すべき ) saddr int MyClass::mGamma; // クラスタイプ MyClass のオブジェクト near MyClass Delta; 自動変数スタック 関数内で定義された (static 宣言ではない ) 変数は C 言語規格では自動変数と呼ばれます 自動変数の一部はプロセッサのレジスタに 残りはスタック上に配置されます 意味上は これらは同一です 主な違いは 変数をスタック 自動変数は 関数の実行中にのみ有効になります 関数から戻るときに スタックに配置されたメモリが解放されます 18 IAR C/C++ コンパイラリファレンスガイド

45 データ記憶 スタック スタックには 以下を格納できます レジスタに格納されていないローカル変数 パラメータ 式の中間結果 関数のリターン値 ( レジスタで引き渡される場合を除く ) 割込み時のプロセッサ状態 関数から戻る前に復元する必要のあるプロセッサレジスタ ( 呼出し先保存レジスタ ) スタックは 2 つのパートで構成される固定メモリブロックです 最初のパートは 現在の関数を呼び出した関数やその関数を呼び出した関数などに配置されたメモリを格納します 後のパートは 割当て可能な空きメモリを格納します 2 つのパートの境界をスタックの先頭と呼び 専用プロセッサレジスタであるスタックポインタで表します スタック上のメモリは スタックポインタを移動することで配置します 関数が空きメモリを含むスタックエリアのメモリを参照しないようにする必要があります これは 割込みが発生した場合に 呼出し先の割込み関数がスタック上のメモリの割当て 変更 割当て解除を行うことがあるためです 利点 スタックの主な利点は プログラムの異なる部分にある関数が 同一のメモリ空間を使用してデータを格納できることです ヒープとは異なり スタックでは断片化やメモリリークが発生しません 関数が自身を呼び出すことができます ( 再帰関数 ) また 呼出しごとに自身のデータをスタックに格納できます 潜在的な問題 スタックの仕組み上 関数から戻った後も有効にすべきデータを格納することはできません 次関数で よくあるプログラミング上の誤りを説明します この関数は 変数 x へのポインタを返します この変数は 関数から戻るときに無効になります int * MyFunction() { int x; /* 何らかの処理 */ return &x; /* 誤り */ } 別の問題として スタック容量が不足する危険性があります この問題は 関数が別の関数を呼び出し その関数がさらに別の関数を呼び出す場合など パート 1 コンパイラの使用 19

46 ヒープ上の動的メモリ 各関数のスタック使用量の合計がスタックのサイズよりも大きくなるときに発生します スタック上に大きなデータオブジェクトを格納する場合や 再帰関数 ( 直接または間接的に自身を呼び出す関数 ) を使用する場合には この危険性が高くなります ヒープ上の動的メモリ ヒープ上で配置されたオブジェクト用のメモリは そのオブジェクトを明示的に解放するまで有効です このタイプのメモリ記憶領域は 実行するまでデータ量がわからないアプリケーションの場合に非常に便利です C では メモリは標準ライブラリ関数の malloc や 関連関数の calloc realloc のいずれかを使用して配置します メモリは free を使用して解放します C++ では new という特殊なキーワードによってメモリの割当てやコンストラクタの実行を行います new を使用して割り当てたメモリは キーワード delete を使用して解放する必要があります 78K0R コンパイラは near メモリと far メモリの両方のヒープをサポートします これらの詳細は ページ 47 のヒープを参照してください 潜在的な問題 ヒープ上で割り当てたオブジェクトを使用するアプリケーションは ヒープ上でオブジェクトを配置できない状況が発生しやすいため 慎重に設計する必要があります アプリケーションで使用するメモリ容量が大きすぎる場合 ヒープが不足することがあります また すでに使用されていないメモリが解放されていない場合にも ヒープが不足することがあります 配置されたメモリブロックごとに 管理用に数バイトのデータが必要になります 小さなブロックを多数配置するアプリケーションの場合は 管理用データが原因のオーバヘッドが問題になることがあります 断片化の問題もあります 断片化とは 小さなセクションの空きメモリが 配置されたオブジェクトで使用されるメモリにより分断されることです 空きメモリの合計サイズがオブジェクトのサイズを超えている場合でも そのオブジェクトに十分な大きさの連続した空きメモリがない場合は 新しいオブジェクトを配置することができません 断片化は メモリの割当てと解放を繰り返すほど増加する傾向があります この理由から 長期間の実行を目的とするアプリケーションでは ヒープ上に割り当てられたメモリの使用を回避するようにしてください 20 IAR C/C++ コンパイラリファレンスガイド

47 関数 この章では 関数について説明します 関数に関連した拡張 ( 関数を制御するための仕組み ) の概要を説明した後 これらの仕組みのいくつかを取り上げて詳しく説明します 関数関連の拡張 コンパイラでは ISO/ANSI C 規格に加えて 関数を記述するための拡張が利用できます これらの拡張により 以下の操作が可能になります メモリ内の関数の格納を制御 基本コマンドによる割込み 並列処理 OS 関連のプログラミング 関数の最適化 ハードウェア機能へのアクセスコンパイラでは これらの機能をコンパイラオプション 拡張キーワード プラグマディレクティブ 組込み関数で実現します 最適化の詳細については ページ 135 の効率的なコードの記述を参照してください ハードウェア操作のアクセスに使用可能な組込み関数の詳細は 組込み関数 を参照してください 関数格納のためのコードモデルとメモリ属性コードモデルを使用することで コンパイラはアプリケーションに対するコードの生成方法を制御します コンパイラは それぞれ 2 つのコードモデルに対応しています コードモデルを指定しない場合 コンパイラはコードモデルのどれか 1 つをデフォルトとして使用します プロジェクトで同時に使用できるコードモデルは 1 つだけです また すべてのユーザモジュールとライブラリモジュールで 同一のモデルを使用する必要があります すべてのコードモデルは ROM 対応のコードを生成します 以下のコードモデルが使用可能です : コードモデル名説明 Standard ( デフォルト ) 非バンク関数の呼出し 78K0/78K0S のみ 表 7: コードモデル パート 1 コンパイラの使用 21

48 関数格納のためのコードモデルとメモリ属性 コードモデル名 Banked Near ( デフォルト ) Far 表 7: コードモデル 説明 Banked コードモデルについて詳しくは ページ 27 のバンク関数 (78K0/78K0S のみ ) を参照してください IDE でのコードモデルの設定については IAR Embedded Workbench IDE ユーザガイド を参照してください プロジェクトにコードモデルを指定するには --code_model オプションを使用します ( ページ 155 の --code_model を参照 ) 関数メモリ属性の使用 バンク関数の呼出し 78K0/78K0S のみ 関数の呼出しがメモリの最初の 64KB に達します 78K0R のみ 関数の呼出しが 1MB のメモリ全体に達します 78K0R のみ 個々の関数のデフォルトの配置をオーバライドすることが可能です これを指定するには 適切な関数メモリ属性を使用します 以下の属性を選択できます 関数メモリ属性アドレス範囲ポインタサイズ説明 callt 0 0x0FFFF 2 バイト どのセグメントからも関数を呼び出 せます callf 0x0800 0x0FFF 2 バイトどのセグメントからも関数を呼び出せます 78K0 のみ non_banked 0 0xFFFF 2 バイト どのセグメントからも関数を呼び出せます standard コードモデルのデフォルト値 78K0/78K0S のみ banked 0 0xFFFFFF 3 バイト どのセグメントからも関数を呼び出せます banked コードモデルのデフォルト値 78K0/78K0S のみ near_func 0 0x0FFFF 2 バイト どのセグメントからも関数を呼び出せます これは 78K0R コンパイラのデフォルト属性です 78K0R のみ far_func 0 0xFFFFF 3 バイト どのセグメントからも関数を呼び出せます 78K0R のみ 表 8: 関数メモリ属性 関数メモリ属性を持つポインタには ポインタ間およびポインタと整数型の間の明示的および非明示的なキャスティングについて制限があります この制限の詳細は ページ 186 のキャストを参照してください 構文情報と各属性の詳細は 拡張キーワード を参照してください 22 IAR C/C++ コンパイラリファレンスガイド

49 関数 割込み 並列処理 OS 関連のプログラミング用の基本コマンド IAR C/C++ Compilers for 78K では 割込み関数 並列処理関数 OS 関連関数に関連する以下の基本関数を提供します 拡張キーワード interrupt と monitor プラグマディレクティブ #pragma vector 組込み関数 : enable_interrupt disable_interrupt get_interrupt_state および set_interrupt_state 割込み関数 組込みシステムでは ボタン押下の検出など 外部イベントを即座に処理するために割込みを使用します 通常 コード中で割込みが発生すると マイクロコントローラは単純にコードの実行を停止し その代りに割込みルーチンの実行を開始します 割込み処理の完了後 割り込まれた関数の環境を復元することがきわめて重要です これには プロセッサレジスタの値やプロセッサステータスレジスタの値の復元も含まれます これにより 割込み処理用コードの実行が終了したときに 元のコードの実行を続行できます 78K マイクロコントローラは 多くの割込みソースをサポートしています 割込みソースごとに 割込みルーチンを記述できます 各割込みルーチンは チップメーカの 78K マイクロコントローラのドキュメントで指定されているベクタ番号に関連付けられます 割込みベクタは 割込みベクタテーブルへのオフセットです 同じ割込み関数を使用していくつかの異なる割込みを処理する場合 割込みベクタを複数指定できます 78K マイクロコントローラの場合 割込みベクタテーブルは常にアドレス 0x0 で始まります ヘッダファイル iodevice.h(device は選択したデバイス ) には 事前定義した既存の例外ベクタ名が含まれます 78K0 と 78K0R の場合 #pragma bank=n ディレクティブ (n は 0 3) は ( 別のレジスタバンクを使用して ) 割込み関数の実行時にコンテキスト切替えに使用できます これは 78K0S では可能ではないことに注意してください 割込み関数を定義するには interrupt キーワードと #pragma vector ディレクティブが使用できます 次に例を示します #pragma bank = 2 #pragma vector = 0x14 interrupt void MyInterruptRoutine(void) { /* 何らかの処理 */ } パート 1 コンパイラの使用 23

50 割込み 並列処理 OS 関連のプログラミング用の基本コマンド 注 : 割込み関数のリターン型は void でなければならず パラメータの指定は一切できません 割込み関数の定義でベクタが指定されている場合 プロセッサ割込みテーブルにデータが読み込まれます ベクタのない割り込み関数を定義することも可能です これは アプリケーションがランタイム時に割込みベクタを読み込んだり 変更する機能を持つ場合に便利です 割込みベクタテーブルの詳細は チップメーカの 78K マイクロコントローラのドキュメントを参照してください モニタ関数 モニタ関数は 関数の実行中に割込みを無効にします 関数のエントリで ステータスレジスタが保存されて割込みが無効になります 関数の終了時には 元のステータスレジスタが復元され これによって関数呼出し前に存在した割込みステータスも復元されます モニタ関数を定義するには monitor キーワードを使用できます リファレンス情報については ページ 211 の monitor を参照してください 割込みが長く無効のままになるため monitor キーワードを大きな関数に使用することは避けてください C でのセマフォの実装の例 次の例では バイナリセマフォ ( ミューテックス ) が 静的変数 1 つと 2 つのモニタ関数を使用して実装されます モニタ関数は重要な領域と同じように機能します つまり 割込みが発生することはできず プロセス自体がスワップできません セマフォは 1 つのプロセスによりロックでき 一度に 1 つのプロセスでしか使用できないリソースをプロセスで同時に使用するのを回避するために使用されます たとえば USART などです monitor キーワードによって ロック処理がアトミックであることが確実になります アトミックを言い換えると 割込みができないということです /* これはロック変数です ゼロでない場合 所有者がいます */ static volatile unsigned int sthelock = 0; /* ロックがオープンかどうかをテストする関数で オープンの場合はロックを取得します * 成功の場合を 1 失敗のときは 0 を返します */ monitor int TryGetLock(void) { if (sthelock == 0) { 24 IAR C/C++ コンパイラリファレンスガイド

51 関数 /* 成功 ロックを誰も所有していません */ sthelock = 1; return 1; } else { /* 失敗 誰かがロックを所有しています */ } } return 0; /* ロックを解放する関数 * ロックを持つユーザーからしか呼出せません */ monitor void ReleaseLock(void) { sthelock = 0; } /* ロックを取得する関数 取得するまで待機します */ void GetLock(void) { while (!TryGetLock()) { /* 通常はここでスリープ命令が使用されます */ } } /* セマフォの使用例 */ void MyProgram(void) { GetLock(); /* 何らかの処理 */ ReleaseLock(); } パート 1 コンパイラの使用 25

52 割込み 並列処理 OS 関連のプログラミング用の基本コマンド C++ でのセマフォの実装の例 C++ では インライン化する意図で小さいメソッドを実装することは一般的です ただし コンパイラは monitor キーワードを使用して宣言された関数およびメソッドのインライン化をサポートしていません 次の C++ の例では 自動オブジェクトを使用してモニタブロックが制御され これは monitor キーワードではなく 組込み関数を使用します #include <intrinsics.h> /* 重要ブロックを制御するためのクラス */ class Mutex { public: Mutex() { // 現在の割込み状態を取得 mstate = get_interrupt_state(); } // すべての割込みを無効化 disable_interrupt(); ~Mutex() { // 割込み状態を復元します set_interrupt_state(mstate); } private: istate_t mstate; }; class Tick { public: // ティックカウントを安全に読み込むための関数 static long GetTick() { long t; // 重要ブロックを入力 { Mutex m; // ティックカウント安全に取得して t = smtickcount; 26 IAR C/C++ コンパイラリファレンスガイド

53 関数 } } // それを返す return t; private: static volatile long smtickcount; }; volatile long Tick::smTickCount = 0; extern void DoStuff(); void MyMain() { static long nextstop = 100; } if (Tick::GetTick() >= nextstop) { nextstop += 100; DoStuff(); } C++ と特殊な関数型 C++ メンバ関数は 特殊な関数型を使用して宣言できます ただし 制限が 1 つあります 割込みメンバ関数が静的でなければなりません 非静的メンバ関数を呼び出す際には オブジェクトに割当てる必要があります 割込みが発生し 割込み関数が呼び出されるときは メンバ関数の割り当てに使用可能なオブジェクトは存在しません バンク関数 (78K0/78K0S のみ ) ここでは 78K0/78K0S Compiler で使用可能なバンキングの手法を説明します 使用するタイミングや機能 しくみを知っておくことが重要です ここでは 関連のコンパイラやリンカコマンドファイルの設定など バンクアプリケーションのソースコードおよび ISR( 割込みサービスルーチン ) の作成および分割方法についても説明します 最後に バンクアドレスに適したリンカ出力フォーマットおよび複数の PROM へのダウンロード方法についても解説します 注 : この項を読む前に 本ガイドの パート 1: コンパイラ に記載された他の概念についても知っておく必要があります パート 1 コンパイラの使用 27

54 バンク関数 (78K0/78K0S のみ ) 78K0/78K0S バンキングシステム 64KB メモリの自然なアドレス範囲の 78K マイクロコントローラを使用する場合 そのマイクロコントローラには 16 ビットのアドレス機能があります バンキングは プロセッサの自然なアドレッシング方式のサイズを超えて プロセッサでアクセス可能なメモリ量を拡張するテクニックです 言い換えれば より多くのコードにアクセス可能になります バンクメモリは 78K0/78K0S コアの自然な 64 KB のアドレス範囲ではすべてを含めるのに十分でないほどの 大量の実行可能なコードを必要とするプロジェクトで使用されます 注 : 78K0R コアは 1MB メモリの自然のアドレス範囲を持っており バンキングを使用する必要がないため 78K0R コンパイラではこのしくみはサポートされていません バンクコードモデルの使用 バンクアプリケーションを作成する際は 関連のコンパイラおよびリンカのコマンドファイルの設定を認識しておく必要があります 注 : これらのオプションは 78K0R Compiler では使用できません バンクモードのコンパイラオプション バンクモード用にモジュールをコンパイラするには Banked コードモデルオプション (--code_model banked) を使用します 非バンクコードモデルを使用中に個々の関数をバンクするには banked 属性を使用して関数を宣言してください バンクモードのリンカオプション アプリケーションをリンクする際は ハードウェアで使用可能な物理的バンクに対応するバンクにコードセグメントを配置する必要があります ただし 物理的バンクサイズと場所はルーとバンクのサイズに依存し これはソースコードに依存します 結果として リンク処理中に数回試験的にデータを渡して 最適なメモリの使用を判断しなければならないこともあります 28 IAR C/C++ コンパイラリファレンスガイド

55 関数 例 : -P コマンドを使用したバンク配置 -P リンカコマンドは バンクセグメントの配置に便利です たとえば バンクコードで ROM メモリ領域 0x8000 0x9FFF を使用する場合 リンカディレクティブは次のようになります // バンクの定義 -D_CODEBANK_START=8000 -D_CODEBANK_END=9FFF -D_CODEBANK_BANKS=4 -P(CODE)MYBANKEDCODESEGMENT=[_CODEBANK_START_CODEBANK_END]*_CODEB ANK_BANKS これによって セグメントを次のアドレスにあるセグメントパートに分割します FFF // バンク番号 FFF // バンク番号 FFF // バンク番号 FFF // バンク番号 3 バンク切替えルーチン バンク切替えルーチンは バンク切替えに使用される SFR ポートに基づきます SFR ポートは リンカコマンドファイルの次の行で定義します : -D_BANK_REG=PORTADDRESS この方法を使用する限り 必要なのは適切な SFR ポートアドレスを定義するだけです バンキングのしくみ 78K0/78K0S Compiler で使用可能なバンクコードモデルでは コードメモリ領域を追加 ROM メモリの最大 256 のバンクを使用して拡張できます 使用するハードウェアでは これら追加の物理メモリバンクと バンク番号を表す高アドレスのビットを復号するために必要なロジックを提供する必要があります 78K0 と 78K0S コアは 一度に 64 KB を超えるメモリを処理できないため バンキングで可能になる拡張メモリ範囲には特別な注意が必要になります 一度に表示可能なバンクは 1 つだけであり 残りのバンクは使用する前に 64KB のアドレス範囲に持ってこなければなりません パート 1 コンパイラの使用 29

56 バンク関数 (78K0/78K0S のみ ) 次のメモリマップは バンクコードメモリ領域の一例を示します 0xFFFF データバンク nn バンク... 0xAFFF バンク1 0x8000 バンク 0 ( コード) ルート ( コード ) 0x0000 図 1: バンクコードメモリのレイアウト ( 例 ) バンク領域はコードメモリのどこにでも配置できますが ランタイムライブラリコードを保持するためのルート領域が常になければなりません ルーと領域をアドレス 0 以上に配置すると実用的です メモリバンクのいずれかに存在するコードにアクセスするために コンパイラは 3 バイトのポインタを維持することでバンク関数のバンク番号をトレースします ポインタは次の形式です バイト 2 バイト 1 0 バンク番号 16 ビットアドレス ( バンクコード回路 ) ( アドレス / データバス ) 図 2: 3 バイトのバンクアドレス 30 IAR C/C++ コンパイラリファレンスガイド

57 関数 バンク切替え バンク切替えでは次の処理が実行されます 現在のバンク番号がスタックに保存される 新しいバンク番号 (3 バイトポインタの 2 バイト目 ) が SFR ポートに書き込まれる ハードウェアがバンク番号を復号して適切な ROM バンクを選択 3 バイトのポインタのバイト 0 と 1 に配置されたアドレスの呼出しが実行される詳細については ページ 34 のバンク切替えルーチンを参照してください バンク不可能なコード コードバンキングは プログラムコードに使用されるアドレス空間を non-banked( 非バンク ) と banked( バンク ) の 2 つに分割することで実現します 30 ページの図 1 バンクコードメモリのレイアウト ( 例 ) では 非バンクコードを含む部分をルートバンクとしています 非バンクのコードは常に一定の量なければなりません たとえば 割込みはいつ発生することも可能なため 割込みサービスルーチンは常に使用可能でなければなりません 以下の選択された部分は 非バンクメモリ内に配置する必要があります 割込みと呼出しテーブルベクタ 割込みサービスルーチン 宣言された関数 callf と callt CSTARTUP ルーチン 初期化された変数の定数および初期値を含むセグメント ( セグメント CODE CONST DIFUNCT FCODE NEAR_ID RCODE SADDR_ID および SWITCH) 算術サポートのルーチンや setjmp/longjmp など ランタイムライブラリの一部分 バンク切替えルーチン つまり 内部メモリからバンクメモリへのマッピングを実行するルーチン非バンクメモリ内に配置されたコードは 常にプロセッサにとって使用可能であり 常に同じ内部アドレスに配置されます 注 : また 78K0R コアにコンパイルされたコードはバンクできません バンクメモリのためのソースコードの作成 バンクメモリで使用するコードの作成は 標準のメモリのコード作成とあまり変わりませんが いくつか注意事項があります コードをソースモジュールへ分割する際に リンカによって最も効率的にバンクに配置できるようにすることと バンクコードと非バンクコードの区別に注意する必要があります パート 1 コンパイラの使用 31

58 バンク関数 (78K0/78K0S のみ ) C/C++ 言語について C/C++ 言語の観点からすると 任意の C/C++ プログラムをバンクメモリにコンパイルできます バンクのサイズを超えられないため 唯一の制限は関数のサイズです バンクサイズとコードサイズ コンパイルするバンク化された各 C/C++ ソース関数は 別のセグメントパートを生成し バンク関数から生成されたすべてのセグメントパートは BCODE リンクセグメントに配置されます セグメントパートに含まれるコードは 個別のユニットであり いくつかの関数を含むソースファイルでもあります リンカは 個々のユニットに含まれるコードは分割できないため その一部を 1 つのバンクに 残りを別のバンクにそれぞれ配置します このため バンク関数から生成されたコードは常にバンクサイズより小さくなければなりません つまり 生成されるコードがバンクに合うように それぞれの C/C++ ソースファイルのサイズを考慮する必要があります コードセグメントのいずれかが指定したバンクサイズを上回る場合 リンカでエラーが出力されます 個別にコードの位置を指定する必要がある場合は 各関数のコードセグメントの名前を変更して 個別に参照できるように分かりやすい名前に変更します 演算子 #pragma location ディレクティブ または #pragma segment ディレクティブを使用します セグメントの詳細は コードおよびデータの配置 を参照してください バンク関数と非バンク関数の呼出し 78K0/78K0S Compiler の非バンク関数とバンク関数を区別することは重要です なぜなら バンク関数の呼出しに比べて非バンク関数の呼出しはより速く 必要とするコード空間も小さいためです このため どのタイプの関数の宣言が非バンク関数の呼出しにつながるかを知っておくと便利です この文脈では 関数の呼出しは C/C++ ソースコード内の関数が別の C/C++ 関数またはライブラリルーチンを呼び出すときにコンパイラによって生成される マシン命令のシーケンスです また これはリターンアドレスを保存して 新しい実行アドレスをハードウェアに送信することを含みます 78K0/78K0S Compiler には次の 2 つの関数シーケンスがあります 非バンク関数の呼出し : リターンアドレスと新しい実行アドレスは 16 ビット (2 バイト ) の値です 非バンク関数呼出しは 標準コードモデルのデフォルトです バンク関数の呼出し : リターンアドレスと新しい実行アドレスは 24 ビット (3 バイト ) の値です ( バンクコードモデルのデフォルト値 ) 32 IAR C/C++ コンパイラリファレンスガイド

59 関数 バンクコードモデルでは バンク関数呼出しがデフォルトで生成されます ただし 呼び出す関数と呼び出された関数が同じ物理的バンク内にあることが分かっている場合 バンクを切り替える必要はありません つまり 実際のバンク切替えなしに より効率的なバンク関数の呼出しをコンパイラにより生成できます 以下の場合は 実際のバンク切替えを行わないバンク関数の呼出しが生成されます 呼出しと呼び出される関数が同じソースファイル内に定義されている static で定義された関数 これは static キーワードの目的が 定義されているモジュール外部から関数が呼び出されるのを回避することであるためです この法則の例外は 関数のアドレスが別のモジュール内の関数で分かっているときで この場合はそのアドレスを介して間接的に static 関数が呼び出されます non_banked メモリ属性を使用して宣言された関数は 非バンク ROOT 領域に配置されます つまり 関数が非バンク関数呼出しによって呼び出せます 頻繁に呼び出される関数の場合は それらを ROOT 領域に配置することを推奨します バンクコードモデル内の非バンク関数呼出しの例 この例では f1() が f2() を呼び出します これらは別々のソースモジュールに定義されています f2() の定義は次のようになります non_banked void f2(void) /* 単純な void 関数の例 */ { /* コード...*/ } f1() が f2() を呼び出すモジュールの f2() の関数のプロトタイプは次のようになります extern non_banked void f2(void); f1() 内からの実際の f2() の呼出しは 他の関数の場合とまったく同じで たとえば次のようになります void f1(void) { f2(); } バンクモードでの割込み callf および callt 関数 割込みサービスルーチンのコード および拡張キーワード callf と callt を使用して宣言された関数は デフォルトで非バンクとなります つまり これらの関数は CODE セグメントに配置されます これは コンパイラにより自動的に処理されます パート 1 コンパイラの使用 33

60 バンク関数 (78K0/78K0S のみ ) アセンブラ言語からのバンク関数の呼出し アセンブラ言語プログラムでは 別のバンクにある C/C++ 関数の呼出しには コンパイラと同じプロトコルを使用する必要があります このプロトコルについては ページ 97 の呼出し規約を参照してください バンク関数呼出しの例を生成するには ページ 94 の C からのアセンブラルーチンの呼出し に記載されているテクニックを使用してください バンク切替えルーチン 非バンク関数呼出しは 関数ポインタが使用される場合はレジスタ HL を予約します バンク関数呼出しは レジスタ HL と E を予約します つまり レジスタのパラメータとして使用される 8 ビットのレジスタが 1 つ少ないということです このため バンク関数と非バンク関数のパラメータを渡すコストは 簡単には比較できません ただし バンク関数呼出しのさまざまな方法のコストは比較できます バンク関数の呼出し方法は 2 つあります 呼び出されるバンク関数が呼び出す関数と同じバンク内にあることをコンパイラが分かっている場合 バンクの切替えや古いバンクの保存は必要ありません ( 他の条件も満たされている場合は ) 結果的に 高速切替えルーチン?FAR_FAST_CALL_L07 と それに対応する FAR_FAST_RETURN_L07 が使用されます 古いバンクを保存 / 復元して新しいバンクに切り替えねばならない場合は これらがより高速です 切替えルーチンの高速バージョンは 呼び出す関数と呼び出される関数の両方が同じファイルにバンクおよび配置されている場合にのみ使用できます ( つまり コンパイラが両方の関数が同じバンクにあると分かっている場合 ) 関数が異なるファイルにあったり 呼び出す関数が非バンクの場合 コンパイラは呼び出された関数のバンクに切り替える前に 現在のバンクを予約しなければなりません 標準的なバンク切替えは次のようになります 標準的なバンク切替えコード クロックサイクル?FAR_CALL_L07: xch a d 2 mov a BANK_REG 5 xch a d 2 push de 4 xch a e 2 mov BANK_REG a 5 表 9: サイクルにおける標準的なバンク切替えコスト 34 IAR C/C++ コンパイラリファレンスガイド

61 関数 標準的なバンク切替えコード クロックサイクル xch a e 2 movw de #FAR_RETURN_L07 6 push de 4 push hl 4 ret 6 FAR_RETURN_L07: pop hl 4 xch a h 2 mov BANK_REG a 5 xch a h 2 ret 6 合計 61 表 9: サイクルにおける標準的なバンク切替えコスト ( 続き ) 高速バンク切替えは次のようになります 高速バンク切替えコード クロックサイクル?FAR_FAST_CALL_L07: xch a e 2 mov d a 2 xch a e 2 push de 4 movw de #FAR_FAST_RETURN_L07 6 push de 4 push hl 4 ret 6 FAR_FAST_RETURN_L07: pop hl 4 ret 6 合計 40 表 10: サイクルにおける高速バンク切替えコスト パート 1 コンパイラの使用 35

62 バンク関数 (78K0/78K0S のみ ) これは バンク関数呼出しのオーバヘッドです レジスタやスタックパラメータの初期化コストは含まれていません デフォルトのバンク切替えルーチンの修正 デフォルトのバンク切替えコードは 付属のアセンブラ言語ソースファイル L07.s26( ディレクトリ 78k\src\lib) にあります ただし わずかなバンクしか使用しない場合は ポートの特定のビットしか使用できず ポートの残りは他の目的で使用します これは コンパイラで明示的にサポートされているわけではありませんが L07.s26 ファイルを修正して行うことができます ファイルを修正したら アセンブルし直して 使用するランタイムライブラリのオブジェクトモジュールを再度配置します それをアプリケーションプロジェクトにインクルードするだけで ライブラリ内の標準ルーチンの代わりにそれが使用されます まったく異なるバンク切替え方法を使用するには 独自のバンク切替えルーチンを実装する必要があります メモリへのダウンロード 使用するデバイスとメモリには幅広い選択肢があります 使用するバンクモードシステムに応じて 異なる処理が必要な場合もあります たとえば 64KB 以上の容量を持つ単一のメモリ回路もあれば もっと小さいメモリ回路が複数ある場合もあります たとえば メモリ回路は EPROM やフラッシュメモリということもあります デフォルトでは リンカは Intel-extended フォーマットで出力を生成しますが 使用するツールで必要なフォーマットを使うためにこれを簡単に変更できます IAR Embedded Workbench IDE を使用する場合は 出力フォーマットは使用されるビルド設定 ([ リリース ] または [ デバッグ ]) によって変わります コードを物理メモリにダウンロードする際は 特別な注意が必要なこともあります たとえば 78K0 または 78K0S のバンクシステムに 0x8000 で始まる 16KB の ROM が 2 つあるとします バンクコードのサイズが 16KB を上回る場合 プロジェクトをリンクすると結果は単一の出力ファイルとなり バンクコードは 0x8000 から始まって バンク上限を超えます 現在の EPROM プログラマは 1 つのファイルを 1 つの EPROM に同時にダウンロードする必要はなく ファイルを分割してダウンロードすることによって ダウンロードは自動的に処理されます ただし 旧タイプのプログラマは常に再配置に対応しているとは限らず 3 バイトアドレスの上位バイトを無視できません つまり プログラムが見つけられるように ファイルを手動で編集して各アドレスの上位バイトを 0 に設定する必要があります 36 IAR C/C++ コンパイラリファレンスガイド

63 関数 バンクアプリケーションのデバッグ C-SPY デバッガは 78K0 と 78K0S コアのバンクモードのデバッグをサポートしています IAR Embedded Workbench IDE でバンクモードのデバッグオプションを設定するには [ プロジェクト ]>[ オプション ] を選択し 一般オプションカテゴリを選んでから [ ターゲット ] タブをクリックします 以下のオプションに適切な値を入力してください レジスタアドレスでは バンクレジスタとして使用される SFR アドレスを指定します バンクアドレスは バンク開始アドレスを指定します バンク数は バンクの数を指定します バンクサイズ (KB) では バンクのサイズを指定します 他のデバッガを使用したバンクモードのデバッグ 使用しているエミュレータがバンクモードをサポートしていない場合の一般的なテクニックはやりとりするアプリケーションの関数のサブセットを切り離すことです ( フルまたはそれ以下のバンク 1 つ ) それから 78K0/78K0S standard( 標準 ) コードモデルを使用して これらの関数をグループとしてコンパイル リンクおよびデバッグします さまざまな関数のグループ化に対して この手順を繰り返します そして 最終的なバンクシステムをターゲットのハードウェア上でテストする際に ほとんどの C/C++ プログラミングに関連する問題はすでに解決されています パート 1 コンパイラの使用 37

64 バンク関数 (78K0/78K0S のみ ) 38 IAR C/C++ コンパイラリファレンスガイド

65 コードおよびデータの配置 この章では リンカのメモリ処理方法とセグメントの概念について説明します また それらがどのようにメモリと関数の型に対応しているか ランタイムライブラリとやりとりするかについても解説します メモリ内のセグメントの配置方法 すなわちリンカコマンドファイルのカスタマイズについて説明します 本章の対象読者は アプリケーションのセグメントをハードウェアシステムの適切なメモリ領域にマッピングするシステム設計者です セグメントとメモリ 組込みシステムでは さまざまなタイプの物理メモリが数多くあります また たいてはコードおよびデータが物理メモリのどこに配置されているかが重要です このため 開発ツールがこれらの要件を満たすことが大切です セグメントとは? セグメントとは メモリ内の物理位置にマッピングされるデータやコードを含む論理エンティティです 各セグメントは 複数のセグメントパートから構成されます 通常は 静的記憶寿命を持つ各関数または変数がセグメントパートに配置されます セグメントパートとはリンク可能な最小単位であり リンカではこれを使用して 参照するユニットのみをインクルードすることができます セグメントは RAM または ROM のいずれかに配置できます RAM に配置されるセグメントは中身を持たず 空間を占有するだけです コンパイラは 様々な目的のために事前に定義されたセグメントを複数持っています それぞれのセグメントにはセグメントの内容を示す名前と 内容のタイプを記述するセグメントメモリタイプがあります 事前定義されたセグメントのほかに 独自のセグメントを定義できます コンパイル時には 各セグメントに内容が割り当てられます IAR XLINK リンカは リンカコマンドファイルに指定された規則に従って セグメントを物理メモリ範囲に配置する役割を果たします 既成のリンカコマンドファイルが用意されていますが 必要があれば使用するターゲットシステムおよびアプリケーションの要件に応じて 簡単に修正できます リンカから見ると すべてのセグメントは同等であることを念頭に置くことが重要です セグメントは 単に名前を持つメモリの一部です 個々のセグメントについて詳しくは セグメントリファレンス を参照してください パート 1 コンパイラの使用 39

66 メモリでのセグメントの配置 セグメントメモリタイプ XLINK は 各セグメントにセグメントメモリタイプを割り当てます 場合によっては 個々のセグメント名とそれらが属するセグメントメモリタイプが同じことがあります ( たとえば CODE など ) こうした場合には 個々のセグメント名をセグメントメモリタイプと混同しないように注意してください デフォルトでは コンパイラは 以下の XLINK セグメントメモリタイプを使用します セグメントメモリタイプ CODE CONST DATA 説明実行可能コード用 ROM に配置されるデータ用 RAM に配置されるデータ用 表 11: XLINK セグメントメモリタイプ XLINK は 上記以外のセグメントメモリタイプをいくつかサポートしています ただし これらは他のタイプのマイクロコントローラをサポートするためにあります セグメントについて詳しくは セグメントリファレンス を参照してください メモリでのセグメントの配置メモリへのセグメントの配置は IAR XLINK リンカが行います セグメントを配置可能な位置を指定するコマンドラインオプションを含む リンカコマンドファイルが使用されます こうすることで アプリケーションがターゲットのチップに合うように徹底します 適切なリンカコマンドファイルを使用してコードをリビルドするだけで 同一ソースコードをさまざまな派生品で使用できます 特に リンカコマンドファイルでは以下のことを指定します メモリ内のセグメントの配置 最大スタックサイズ 最大ヒープサイズここでは メモリ内でのセグメント配置方法について説明します つまり ターゲットシステムのメモリレイアウトに合うように リンカコマンドファイルをカスタマイズする必要があるということです 方法を示すために 架空の例を使用します リンカコマンドファイルのカスタマイズ config ディレクトリには サポートされている全デバイスの既成のリンカコマンドファイル ( ファイル拡張子 xcl) が含まれています このファイルには リンカで必要な情報が含まれており すぐに使用できます 付属のコマンド 40 IAR C/C++ コンパイラリファレンスガイド

67 コードおよびデータの配置 ファイルに加える必要がある唯一の変更は ターゲットシステムのメモリマップに合うようにカスタマイズすることです たとえば アプリケーションが追加外部 RAM を使用する場合は 外部 RAM のメモリエリアについての情報を追加する必要があります たとえば ターゲットシステムのメモリレイアウトが次のような場合を想定します 範囲 0x0000 0x7FFF タイプ ROM 0x8000 0x9FFF ROM ( バンクコード ) 0xA000 0xFFFF RAM 表 12: ターゲットシステムのメモリレイアウト ( 例 ) ROM は CONST と CODE セグメントメモリタイプに使用できます RAM メモリは DATA タイプのセグメントを含むことができます リンカコマンドファイルをカスタマイズする主な目的は アプリケーションコードとデータがメモリ範囲の境界を超えないように検証することです これは アプリケーション障害の原因となります 元のファイルは変更しないように注意してください 作業ディレクトリにコピーを作成し そのコピーを修正することをお勧めします リンカコマンドファイルの内容 まず リンカコマンドファイルには 3 つの異なるタイプの XLINK コマンドラインオプションがあります 使用する CPU: -c78000 これは ターゲットのマイクロコントローラを指定します ファイルで使用される定数の定義 これらは XLINK オプション -D を使用して定義します ディレクティブの配置 ( リンカコマンドファイルで最も大きな部分です ) セグメントは -Z と -P オプションを使用して配置できます 前者はセグメントパートを見つかった順に配置し 後者はメモリを効率的に使用できるように再配置します -P オプションは セグメントを配置する部分が連続していない場合に便利です リンカコマンドファイルでは すべての数値は 16 進表記で指定します ただし プレフィックス 0x とサフィックス h はどちらも使用されません 注 : 付属のリンカコマンドファイルには 内容を説明するコメントが含まれています 詳細は IAR リンカおよびライブラリツールリファレンスガイド を参照してください パート 1 コンパイラの使用 41

68 メモリでのセグメントの配置 連続する配置への -Z コマンドの使用 -Z コマンドは セグメントを 1 つの連続する塊にしておかねばならないときや セグメント内のセグメントパートの順序を保持する場合 または可能性は低いですがセグメントを特定の順序に配置しなければならないときに使用してください 連続したまとまりで配置しなければならない一般的なセグメントは アプリケーションコードを保持するセグメントです 以下は -Z コマンドを使用してセグメント MYSEGMENTA を配置し セグメント MYSEGMENTB をメモリ範囲 0x0000-0x7FFF の CONST メモリ (ROM) に配置する様子を示します -Z(CONST)MYSEGMENTA,MYSEGMENTB=0000-7FFF 同じメモリ領域に連続して異なるタイプのセグメントを 2 つ配置するには 2 番目のセグメントに範囲を指定しないでください 次の例では まず MYSEGMENTA セグメントをメモリに配置します 続いて メモリ範囲の残りを MYCODE で使用することができます -Z(CONST)MYSEGMENTA=0000-7FFF -Z(CODE)MYCODE 2 つのメモリ範囲は重複することができます これによって 配置要件の異なるセグメントでメモリ空間の部分を共有できるようになります たとえば次のようになります -Z(CONST)MYSMALLSEGMENT= FF -Z(CONST)MYLARGESEGMENT=6000-6FFF 厳密に必要というわけではありませんが 各メモリ範囲の最後を常に指定するようにしてください こうすると セグメントが使用可能なメモリに収まらない場合に IAR XLINK リンカでワーニングが表示されます パックされた配置への -P コマンドの使用 -P コマンドは セグメント ( またはセグメントパート ) を必ずしも連続して配置しない点で -Z とは異なります -P の場合は 以前の配置の後に残された穴にセグメントパートを入れることができます これに適した一般的なセグメントは 点数を保持するセグメントや切替えテーブルなど 連続した塊で配置しなくてもいいセグメントです 次の例に XLINK -P オプションを使用してメモリ領域を効率的に使用する方法を示します このコマンドは データセグメント MYDATA を架空のメモリ範囲の DATA メモリ ( すなわち RAM) に配置します -P(DATA)MYDATA=A000AFFF,D000-DFFF アプリケーションのメモリ範囲 0xE000-0xFFFF に追加の RAM 領域がある場合 それを元の定義に追加するだけですみます -P(DATA)MYDATA=A000AFFF,E000-FFFF 42 IAR C/C++ コンパイラリファレンスガイド

69 コードおよびデータの配置 これで リンカは MYDATA セグメントの一部を最初の範囲に その他の部分を 2 番目の範囲に配置できます -Z コマンドを使用した場合は リンカはすべてのセグメントパートを同じ範囲に配置しなければなりません 注 : コピー初期化セグメント (BASENAME_I と BASENAME_ID) は -Z を使用して配置する必要があります バンク配置での -P コマンドの使用 (78K0/78K0S のみ ) バンクセグメントの配置での -P コマンドの例 ( いくつかの異なるメモリバンクへ分割しなければならないコード ) は ページ 29 の例 : -P コマンドを使用したバンク配置 を参照してください データセグメント ここでは 異なるタイプのデータを保存するときに使用するセグメントについて説明します 静的 スタック ヒープ 配置済のデータセグメントがあります データセグメントのしくみについて詳しく理解するには コンパイラで使用可能な異なるメモリタイプ ( および 78K0R の場合は異なるデータモデル ) について知っておく必要があります これらの詳細について確認するには データ記憶 を参照してください 静的メモリセグメント 静的メモリは グローバルまたは静的として宣言された変数を含むメモリです ( データ記憶 を参照 ) 静的として宣言された変数は 以下のカテゴリに分類できます ゼロ以外の値に初期化された変数 演算子または #pragma location ディレクティブを使用することで配置された変数 const として宣言された ROM に保存可能な変数 no_init キーワードを使用して定義された変数 つまり 初期化してはならない変数です静的メモリセグメントの場合 以下のことを熟知しておく必要があります セグメントの名称設定 メモリタイプがセグメントグループと セグメントグループの一部であるセグメントにどう対応しているか 初期化済みデータを保持するセグメントの制限 静的メモリセグメントの各グループのセグメントの配置およびサイズに関する制限 パート 1 コンパイラの使用 43

70 データセグメント セグメントの名称設定 セグメント名は セグメントグループ名とサフィックス (NEAR_Z など ) という 2 つの部分からなります 各メモリタイプにはセグメントグループがあり グループの各セグメントは異なるカテゴリの宣言されたデータを保持します セグメントグループ名は メモリタイプと対応するキーワードに由来します たとえば NEAR や near などです 次の表は メモリタイプと対応するセグメントグループを示します メモリタイプ セグメントグループ メモリ範囲 Near NEAR 0x0000-0xFFFF (78K0 と 78K0S) 0xF0000-0xFFFFF (78K0R) Far (78K0R のみ ) FAR 0x xFFFFF Saddr SADDR 0xFE20-0xFF1F (78K0 と 78K0S) 0xFFE20-0xFFF1F (78K0R) 表 13: メモリタイプと対応するセグメントグループ 宣言されたデータの一部は ROM のような不揮発性メモリ内に配置され その他のデータは RAM に配置されます このため 各セグメントの XLINK セグメントメモリタイプを知っておくことが重要です セグメントメモリタイプの詳細については ページ 40 のセグメントメモリタイプを参照してください 次の表は 異なるサフィックスと XLINK セグメントメモリのタイプ それらが宣言されたどのカテゴリのデータを指定するかを示します 宣言データのカテゴリサフィックスセグメントメモリタイプ 非初期化データ N DATA ゼロで初期化されるデータ Z DATA ゼロ以外で初期化されるデータ I DATA 上記のイニシャライザ ID CONST 定数 C CONST 初期化されない絶対アドレスのデータ A 表 14: セグメント名のサフィックス サポートされている全セグメントのリストは ページ 253 のセグメントの概要を参照してください 例 以下の例は 宣言データがどのように特定のセグメントに割り当てられるかを示します 44 IAR C/C++ コンパイラリファレンスガイド

71 コードおよびデータの配置 near int j; near int i = 0; no_init near int j; near int j = 4; システム起動時にゼロに初期化される near 変数は セグメント NEAR_Z に配置されます near 非初期化変数は セグメント NEAR_N に配置されます ゼロ以外の near 初期化変数は RAM 内のセグメント NEAR_I に 対応するイニシャライザのデータは ROM 内のセグメント NEAR_ID に配置されます 初期化データ アプリケーションが起動すると システム起動コードは以下のステップの通りに静的およびグローバル変数を初期化します 1 ゼロに初期化される変数のメモリがクリアされます 2 ROM のブロックを RAM 内の変数の場所にコピーすることにより ゼロ以外の変数を初期化します つまり サフィックス ID を持つ ROM セグメントのデータが 対応する I セグメントにコピーされます これは 両方のセグメントを連続するメモリに配置するときに効果があります ただし どちらかのセグメントをより小さく分割する場合は 次のことに注意してください もう一方のセグメントがまったく同じように分割されている シーケンスのギャップを表すメモリの読取りや書込みが可能であるたとえば セグメントに次の範囲が割り当てられると コピーは失敗します NEAR_I NEAR_ID 0x1000-0x10FF と 0x1200-0x12FF 0x4000-0x41FF ただし 次の例ではリンカはセグメントの内容を同じ順序で配置します つまり コピーは正しく機能します NEAR_I NEAR_ID 0x1000-0x10FF と 0x1200-0x12FF 0x4000-0x40FF と 0x4200-0x42FF ID セグメントは すべてのセグメントグループに対して メモリ内のどの部分にも配置できます これは 対応するアクセス方法を使用してアクセスされないためです 範囲のギャップもコピーされます 3 最後に グローバル C++ オブジェクトがあれば構築されます パート 1 コンパイラの使用 45

72 データセグメント デフォルトのリンカコマンドファイル内の静的メモリのデータセグメント 78K0 と 78K0S コアのデフォルトのリンカコマンドファイルには 静的データセグメントを配置するための以下のディレクティブが含まれています // 最初に ROM に配置されるセグメントが定義されています : -Z(CODE)NEAR_ID,SADDR_ID=1000-7FFF -P(CODE)CONST,SWITCH=0080-7FFF // 次に RAM データセグメントがメモリに配置されます : -Z(DATA)NEAR_I,NEAR_Z=FB00-FE1F -Z(DATA)WRKSEG,SADDR_I,SADDR_Z,SADDR_N=FE20-FEDF -P(DATA)NEAR_N=FB00-FE1F すべてのデータセグメントが オンチップ RAM で使用される領域に配置されます スタック スタックは 関数がローカルで使用する変数やその他の情報を保存するために使用されます ( データ記憶 を参照 ) スタックは メモリの連続したブロックであり プロセッサのスタックポインタレジスタ SP によって位置が示されます スタックを保持するために使用するデータセグメントを CSTACK といいます システム起動コードは スタックポインタをスタックセグメントの最後の位置に初期化します スタックのメモリ領域の割当ては コマンドラインインタフェースを使用して IDE を使用するときとは違う方法で行われます IDE でのスタックサイズの割当て [ プロジェクト ]>[ オプション ] を選択します [ 一般オプション ] カテゴリで [ スタック / ヒープ ] タブをクリックします [ スタックサイズ ] テキストボックスに 必要なスタックサイズを追加します コマンドラインからのスタックサイズの割当て CSTACK セグメントのサイズは リンカコマンドファイルで定義されます デフォルトのリンカファイルは リンカファイルの先頭にスタックサイズを表す定数を設定します -D_CSTACK_SIZE=size 注 : 通常は この行の先頭にはコメント文字 // が付けられています ディレクティブを有効にするには コメント文字を削除してください 46 IAR C/C++ コンパイラリファレンスガイド

73 コードおよびデータの配置 アプリケーションで必要なサイズを指定してください サイズは 0x の表記なしに 16 進数で書き込まれます スタックセグメントの配置 リンカファイルの下の方では 実際のスタックセグメントをスタックで使用可能なメモリ領域に定義します -Z(DATA)CSTACK+_CSTACK_SIZE=FB00-FE1F 注 : この範囲ではスタックのサイズは指定されません 使用可能なメモリ範囲が指定されます スタックサイズについて コンパイラは 内部データスタック CSTACK をさまざまなユーザアプリケーション処理に使用します 必要なスタックサイズは これらの処理の内容によって大きく異なります スタックサイズが大きすぎる場合は RAM が無駄に消費されます スタックサイズが小さすぎる場合には 2 つのことが発生します これは スタックのメモリ上の位置により異なり いずれの場合もアプリケーション障害が発生します これらの障害は プログラム変数が上書きされ動作が不安定になるか スタックの位置がメモリエリアを超えアプリケーションが異常終了するかのいずれかです 注 : 内部データスタックの最大サイズは 使用可能な near メモリのサイズと等しくなります つまり 使用するコードモデルに関係なく最大 64KB です ヒープ ヒープには C 関数 malloc ( あるいは その関連関数の 1 つ ) か C++ の演算子 new を使用して割り当てられた動的データが格納されます アプリケーションで動的メモリ割当てを使用する場合には 以下の内容に精通しておく必要があります ヒープに使用されるリンカセグメント (78K0R Compiler の DLIB と CLIB のランタイムライブラリで異なります ) ヒープサイズの割当て 使用するビルドインタフェースによって異なります メモリでのヒープセグメントの配置 78K0R の DLIB のヒープセグメント 78K0R Compiler と DLIB ランタイムライブラリを使用していて 特定のメモリのヒープにアクセスするには 標準の関数 malloc free calloc および realloc へのプレフィックスとして 適切なメモリ属性を使用します たとえば 次のようになります near_malloc パート 1 コンパイラの使用 47

74 データセグメント 標準関数のいずれかにプレフィックスを付けて使用すると その関数はデフォルトのメモリタイプ near にマップされます それぞれのヒープは メモリ属性をプレフィックスに持つ _HEAP という名前のセグメントに配置されます 使用可能なヒープについては ページ 77 のヒープを参照してください 78K0/78K0S および 78K0R の CLIB のヒープセグメント CLIB ランタイムライブラリと 78K0R Compiler を併用している場合や 78K0/78K0S Compiler を使用している場合は必ず ヒープに割り当てられたメモリはセグメント HEAP に配置されます これは 動的メモリ割当てが実際に使用される場合に限って アプリケーションにインクルードされます IDE でのヒープサイズの割当て [ プロジェクト ]>[ オプション ] を選択します [ 一般オプション ] カテゴリで [ スタック / ヒープ ] タブをクリックします 必要なヒープサイズを [ ヒープサイズ ] テキストボックスに追加します コマンドラインからのヒープサイズの割当て ヒープセグメントのサイズは リンカコマンドファイルで定義されます デフォルトのリンカファイルは リンカファイルの先頭にヒープサイズを表す定数を設定します -D_NEAR_HEAP_SIZE=size -D_FAR_HEAP_SIZE=size 注 : 通常は これの行の先頭にはコメント文字 // が付けられています ディレクティブを有効にするには コメント文字を削除してください アプリケーションで必要なサイズを指定してください ヒープセグメントの配置実際のヒープセグメントは ヒープで使用可能なメモリ領域に割り当てられます : -Z(DATA)HEAP+_HEAP_SIZE=A000-FE1F -Z(DATA)NEAR_HEAP+_NEAR_HEAP_SIZE=F1F00-FFE1F -Z(DATA)FAR_HEAP+_FAR_HEAP_SIZE=[80000-EFFFF]/10000 /10000 の構文によって アドレス範囲が 0x10000 バイトのページに分割されます 詳細は IAR リンカおよびライブラリツールリファレンスガイドを参照してください 注 : これらの範囲は ヒープサイズを指定しません 使用可能なメモリの範囲が指定されます 48 IAR C/C++ コンパイラリファレンスガイド

75 コードおよびデータの配置 ヒープサイズと標準 I/O 使用する DLIB ランタイムライブラリが FILE 記述子を使用するよう設定されている場合 (Full など ) ファイル処理のための入出力のバッファが割り当てられます この場合 stdio ライブラリのヘッダファイルで I/O バッファのサイズが 512 バイトに設定されます ヒープが小さすぎる場合は I/O がバッファされず I/O がバッファされた場合よりも大幅に低速になります IAR C-SPY デバッガのシミュレータドライバを使用してアプリケーションを実行する場合には 速度低下が現れない可能性がありますが アプリケーションを 78K マイクロコントローラで実行すると 速度低下を明確に認識できます 標準 I/O ライブラリを使用する場合は ヒープサイズを 1KB など標準 I/O バッファの必要に応じたサイズに設定してください 配置済データ #pragma location 演算子を使用した場合など アドレスに明示的に配置された変数は NEAR_A か FAR_A (78K0R) セグメントに配置されます セグメントの個々のセグメントパートは メモリ空間内の位置を認識しており リンカコマンドファイルで指定する必要はありません ユーザ定義セグメント #pragma location 演算子を使用して独自のセグメントを作成する場合 -Z または -P セグメント制御ディレクティブを使用して セグメントをリンカコマンドファイルに定義する必要があります コードセグメント ここでは コードの保存に使用するセグメントと 割込みベクタテーブルについて説明します サポートされている全セグメントのリストは ページ 253 のセグメントの概要を参照してください 起動コード セグメント RCODE には システムのセットアップ時に使用されるコード (cstartup) およびランタイムライブラリコードが含まれています システムセットアップコードは リセットの後にチップが実行コードを開始する場所に配置システム 78K マイクロコントローラの場合 これはアドレス 0x0080 (78K0 と 78K0S) か 0x000C0 (78K0R) です デフォルトのリンカコマンドファイルでは 以下のいずれかの行によって RCODE セグメントが配置されます -P(CODE)RCODE=00801FFF -P(CODE)RCODE=000C007FFF パート 1 コンパイラの使用 49

76 コードセグメント 通常のコード メモリタイプ属性なしに宣言された関数は 使用するコードモデルに応じて 異なるセグメントに配置されます デフォルトのコード配置 標準コード つまり standard (78K0/78K0S) または near (78K0R) コードモデルを使用するユーザが作成するすべてのコードと callt および interrupt を使用して宣言された関数は CODE セグメントに配置されます デフォルトのリンカコマンドファイルでは 次のように定義されています -Z(CODE)CODE= FFF バンクコード (78K0/78K0S のみ ) バンクコードモデルを使用する場合 ユーザが作成するコードはすべてデフォルトで BCODE セグメントに配置されます ここでは -P リンカディレクティブを使用して さまざまなコードバンクにバンクコードが分散されます リンカコマンドファイルでは 次のように定義されています -P(CODE)BCODE=[_CODEBANK_START-_CODEBANK_END]*_CODEBANK_BANKS リンカ定義 _CODEBANK_START _CODEBANK_END および _CODEBANK_BANKS を使用することで バンク開始アドレス バンク終了アドレス バンク数がそれぞれ定義されます この定義は たとえば次のようになります -D_CODEBANK_START=8000 -D_CODEBANK_END=9FFF -D_CODEBANK_BANKS=4 また コードバンク切替えのために SFR レジスタアドレスも定義する必要があります -D_CODEBANK_REG=FF00 Far コード (78K0R のみ ) Far コードモデルを使用する場合 ユーザが作成するコードはすべてデフォルトで XCODE セグメントに配置されます デフォルトのリンカコマンドファイルでは 次のように定義されています -Z(CODE)XCODE=[08000-EFFFF]/10000 注 : /10000 の構文によって アドレス範囲が 0x10000 バイトのページに分割されます 詳細は IAR リンカおよびライブラリツールリファレンスガイドを参照してください 50 IAR C/C++ コンパイラリファレンスガイド

77 コードおよびデータの配置 CALLF によって宣言された関数 (78K0 のみ ) 拡張キーワード callf を使用して宣言するすべての関数は セグメント FCODE に配置されます このセグメントは メモリ領域 0x0800-0x0FFF に制限されます リンカディレクティブは次のようになります -Z(CODE)FCODE=0800-0FFF 割込みおよび CALLT ベクタ 割込みベクタテーブルには リセットルーチンなど割込みルーチンへのポインタが含まれます このテーブルは セグメント INTVEC に配置されます このセグメントをアドレス範囲 0x0-0x003F (78K0/78K0S) か 0x0-0x0007F (78K0R) に配置する必要があります 78K0/78K0S リンカディレクティブは次のようになります -Z(CODE)INTVEC= F callt で宣言された関数のベクタは セグメント CLTVEC に配置されます このセグメントをアドレス範囲 0x0040-0x007F (78K0/78K0S) か 0x x000BF (78K0R) に配置してください 78K0/78K0S リンカディレクティブは次のようになります -Z(CONST)CLTVEC= F interrupt と callt により宣言された関数は コードセグメント CODE に配置されます ( ページ 50 の通常のコードを参照 ) C++ 動的初期化 C++ では すべてのグローバルオブジェクトは main 関数が呼び出される前に作成されます オブジェクトの作成には コンストラクタの実行が関係することがあります DIFUNCT セグメントには 初期化コードをポイントするアドレスのベクタが含まれます システムが初期化されると ベクタ内のすべてのエントリが呼び出されます 次に例を示します -Z(CONST)DIFUNCT=0000-7FFF その他の情報については ページ 257 の DIFUNCT を参照してください コードおよびデータ配置のリンクされた結果の検証リンカには コードおよびデータ配置の管理を容易にする機能がいくつかあります たとえば リンク時のメッセージやリンカマップファイルなどです パート 1 コンパイラの使用 51

78 コードおよびデータ配置のリンクされた結果の検証 長すぎるセグメントのエラーおよび範囲エラー 再配置可能なセグメントに配置されたすべてのコードやデータは リンク時に絶対アドレスが解決されます すべてのセグメントが予約されたメモリ範囲に収まるかどうかは リンク時まで分かりません セグメントの内容がリンカコマンドファイルに定義されたアドレス範囲に収まらない場合は XLINK でセグメント長の超過エラーが表示されます 一部の命令は 特定の条件がリンク後も保持されない限り機能しません たとえば 分岐は特定の距離の範囲内であるか アドレスが偶数でなければなりません XLINK は ファイルがリンクされたときに条件が存続することを検証します 条件が満たされない場合 XLINK は範囲エラーまたはワーニングを表示して エラーの説明を出力します これらのエラーのタイプの詳細は IAR リンカおよびライブラリツールリファレンスガイド を参照してください リンカマップファイル XLINK は詳細なクロスリファレンスのリストを出力できます このリストには オプションで次の情報を含めることができます すべてのセグメントをダンプ順にリストしたセグメントマップ プログラム内のすべてのモジュールのすべてのセグメント ローカルシンボル エントリ (public シンボル ) をリストしたモジュールマップ 出力に含まれないすべてのシンボルもリストできます 各モジュールからのメモリ使用率 ( バイト単位 ) でリストしたモジュールサマリ 各モジュールのすべてのエントリ ( グローバルシンボル ) を含むシンボルリスト IDE でオプション [ リンカリストの生成 ] か コマンドラインのオプション -X を使用し そのサブオプションを使用してリンカ一覧を生成します 通常は 範囲エラーなどのエラーがリンク処理中に発生した場合 XLINK は出力ファイルを生成しません 範囲エラーがあった場合でも出力ファイルを生成するには IDE でオプション [ 範囲チェックを無効化 ] か コマンドラインのオプション -R を使用します オプションおよびリンカの一覧について詳しくは IAR リンカおよびライブラリツールリファレンスガイド IAR Embedded Workbench IDE ユーザガイド を参照してください 52 IAR C/C++ コンパイラリファレンスガイド

79 DLIB ランタイムライブラリ この章では アプリケーションを実行するランタイムライブラリについて説明します 特に DLIB ランタイムライブラリと このライブラリを修正 ( オプションの設定 デフォルト以外のライブラリモジュールの使用 自作ライブラリのビルド ) し アプリケーション用に最適化する方法を説明します また システムの初期化と終了 アプリケーションで関数 main の呼出し前の処理を制御する方法 初期化処理をカスタマイズ方法についても説明します さらに ロケールやファイル I/O などの機能の設定方法 C-SPY ランタイムサポートの取得方法 互換性のないモジュールがリンクされるのを回避する方法について説明します DLIB ランタイム環境は C++ 言語を使用する場合のデフォルトです DLIB は C 言語と C++ 言語の両方に使用できます 一方 CLIB が使用できるのは C 言語のみです CLIB ランタイムライブラリの詳細については CLIB ランタイムライブラリ を参照してください ランタイムライブラリの概要ランタイムライブラリは アプリケーションを実行するための環境です ランタイムライブラリは ターゲットハードウェア ソフトウェア環境 アプリケーションコードによって異なります IAR DLIB ランタイムライブラリは デバッガではそのまま使用できます ただし ハードウェアでアプリケーションを実行するには ランタイムライブラリを適応させる必要があります ここでは 以下の概要を説明します ランタイムライブラリとそのコンポーネント ライブラリの選択 ランタイムライブラリの機能ランタイムライブラリは 標準テンプレートライブラリを含め ISO/ANSI C と C++ をサポートしています ランタイムライブラリは これらの規格で定 パート 1 コンパイラの使用 53

80 ランタイムライブラリの概要 義された関数およびライブラリインタフェースを定義するインクルードファイルを持ち ランタイム環境を構成します 提供されるランタイムライブラリには ( 製品パッケージに応じて ) ビルド済ライブラリとソースファイルの両方があり これらはそれぞれ 製品のサブディレクトリ 78k\lib と 78k\src\lib に格納されています ランタイムライブラリには 以下のようなターゲットシステム固有のサポートも含まれています ハードウェア機能のサポート 組込み関数 ( レジスタ操作関数など ) による低レベルプロセッサ処理へ直接アクセス インクルードファイルでの周辺ユニットレジスタと割込みの定義 ランタイムライブラリサポート ( 起動 / 終了コード 一部のライブラリ関数との低レベルインタフェース ) 一部の関数用の特殊なコンパイラサポート ( 浮動小数点演算関数など ) ランタイムライブラリのサポートおよびヒープのサイズは 個々のハードウェア / アプリケーションの要件に応じて調整する必要があります ライブラリの詳細については ライブラリ関数 を参照してください ライブラリの選択 最もコード効率の高いランタイムライブラリを設定するには アプリケーションやハードウェアの要件を特定する必要があります 必要な機能が多いほど コードのサイズも大きくなります IAR Embedded Workbench には ビルド済ランタイムライブラリが付属しています これを以下の方法でカスタマイズすることで 必要なランタイムライブラリを構成できます scanf の入力フォーマッタや printf の出力フォーマッタや スタックとヒープのサイズなどを指定するライブラリオプションを設定する cstartup.s26 などの特定のライブラリ関数を 自分でカスタマイズした関数でオーバライドする ロケール ファイル記述子 マルチバイト文字など特定の標準ライブラリ機能のサポートレベルを Normal/Full のいずれかのライブラリ構成を選択して指定するまた 自分でライブラリ構成を作成することもできますが ライブラリのリビルドが必要になります この機能により ランタイムライブラリを完全管理できます 注 : アプリケーションプロジェクトで ライブラリ インクルードファイル ライブラリ設定ファイルの場所を認識できる必要があります 54 IAR C/C++ コンパイラリファレンスガイド

81 DLIB ランタイムライブラリ ライブラリのビルドが必要な場合 カスタマイズしたライブラリのビルドは複雑です そのため 本当に必要かどうかを慎重に検討する必要があります 自作ライブラリのビルドは 以下の場合に必要になります 必要なコンパイラオプションの組合せまたはハードウェアサポート用のビルド済ライブラリがない場合 ロケール ファイル記述子 マルチバイト文字などをサポートする自作ライブラリ構成を定義する場合カスタマイズしたライブラリのビルド方法については ページ 62 のカスタマイズしたライブラリのビルドと使用を参照してください ライブラリ構成 ロケール ファイル記述子 マルチバイト文字などのサポートレベルの設定が可能です ランタイムライブラリの構成は ライブラリ設定ファイルで定義します このファイルでは ランタイムライブラリに含まれる機能が定義されています 設定ファイルは ランタイムライブラリのビルド構成や アプリケーションのコンパイル時に使用するシステムヘッダファイルの設定に使用します ランタイムライブラリで必要な機能が少ないほど サイズも小さくなります 以下のいずれかの DLIB ライブラリ構成を使用できます ライブラリ構成 Normal DLIB Full DLIB 表 15: ライブラリ構成 説明 ロケールインタフェースなし C ロケール ファイル記述子サポートなし printf と scanf でのマルチバイト文字なし strtod での 16 進数浮動小数点数なし フルロケールインタフェース C ロケール ファイル記述子サポート printf と scanf でのマルチバイト文字 strtod での 16 進数浮動小数点数 自分で構成を定義することもできます この場合 設定ファイルを修正する必要があります ライブラリ設定ファイルには ライブラリがどのようにビルドされたかが記述されています そのため 変更を有効にするには ライブラリをリビルドする必要があります 詳細については ページ 62 のカスタマイズしたライブラリのビルドと使用を参照してください ビルド済ライブラリは デフォルト構成を使用してビルドされています ( 表 17 ビルド済ライブラリ 57 ページを参照 ) ランタイムライブラリのリビルドに使用できる 定義済のライブラリプロジェクトテンプレートも提供されています パート 1 コンパイラの使用 55

82 ビルド済ライブラリの使用 ランタイムライブラリでのデバッグサポート ライブラリのデバッグサポートレベル ( 基本 ランタイム I/O デバッグ ) を指定できます 以下の表に各種のデバッグサポートレベルを示します デバッグサポート 基本デバッグ ランタイムデバッグ I/O デバッグ IDE のリンカオプション C-SPY のデバッグ情報 ランタイム管理モジュール付き リンカコマンドラ説明インオプション -Fubrof I/O エミュレー -rt ションモジュール付き 表 16: ランタイムライブラリでのデバッグサポートレベル C-SPY 用のデバッグサポート ( ランタイムサポートなし ) -r -Fubrof と同じですが さらにプログラムのアボート 終了 アサーション用のデバッガサポートが追加されます -r と同じですが I/O 処理用のデバッガサポートも追加されます すなわち stdin および stdout が C-SPY の [ ターミナル I/O] ウィンドウにリダイレクトされるほか デバッグ中にホストコンピュータ上のファイルにアクセス可能となります XLINK オプションの [ ランタイム管理モジュール付き ] または [I/O エミュレーションモジュール付き ] を使用してアプリケーションプロジェクトをビルドした場合 ライブラリ内の特定の関数が IAR C-SPY デバッガと通信する関数に置き換えられます 詳細については ページ 77 の C-SPY ランタイムインタフェースを参照してください IAR Embedded Workbench IDE でデバッグサポートのリンカオプションを指定するには [ プロジェクト ]>[ オプション ] を選択し [ リンカ ] カテゴリを選択してください [ 出力 ] ページで 該当する [ フォーマット ] オプションを選択します ビルド済ライブラリの使用ビルド済のランタイムライブラリは 以下の機能のさまざまな組合せについて設定されています コードモデル データモデル (78K0R のみ ) プロセッサコア 56 IAR C/C++ コンパイラリファレンスガイド

83 DLIB ランタイムライブラリ ライブラリ構成 (Normal または Full) 以下のビルド済ランタイムライブラリが使用できます : ライブラリオブジェクトコードモデルデータモデルプロセッサコアライブラリ構成ファイル dl78ks0n.r26 Standard 78K0_basic Normal dl78ks0f.r26 Standard 78K0_basic Full dl78ks1n.r26 Standard 78K0 Normal dl78ks1f.r26 Standard 78K0 Full dl78ks2n.r26 Standard 78K0S Normal dl78ks2f.r26 Standard 78K0S Full dl78kb0n.r26 Banked 78K0_basic Normal dl78kb0f.r26 Banked 78K0_basic Full dl78kb1n.r26 Banked 78K0 Normal dl78kb1f.r26 Banked 78K0 Full dl78kb2n.r26 Banked 78K0S Normal dl78kb2f.r26 Banked 78K0S Full dl78knn3n.r26 Near Near 78K0R Normal dl78knn3f.r26 Near Near 78K0R Full dl78knf3n.r26 Near Far 78K0R Normal dl78knf3f.r26 Near Far 78K0R Full dl78kfn3n.r26 Far Near 78K0R Normal dl78kfn3f.r26 Far Near 78K0R Full dl78kff3n.r26 Far Far 78K0R Normal dl78kff3f.r26 Far Far 78K0R Full 表 17: ビルド済ライブラリ ライブラリの名前は次のように作成されます : <library><cpu><code_model><data_model><core><lib_conf>.r26 さらに <library> は IAR DLIB ランタイムライブラリの dl <cpu> は 78k <code_model> は s b n または f のいずれかで それぞれ standard banked near far コードを指します <data_model> は n または f のどちらかで それぞれ near と far データモデルを示します これは 78K0R Compiler にのみ適用されます パート 1 コンパイラの使用 57

84 ビルド済ライブラリの使用 <core> は または 3 のいずれかで それぞれ 78K0_basic 78K0 78K0S 78K0R を指します <lib_conf> は n か f のどちらかで それぞれ normal と full を示します注 : ライブラリ構成ファイルは ライブラリと同じベース名を持っています IDE は 選択するオプションに応じて 正しいライブラリオブジェクトファイルとライブラリ構成ファイルを含みます 詳細については IAR Embedded Workbench IDE ユーザガイド を参照してください コマンドラインからアプリケーションをビルドする場合 目的のランタイムライブラリを取得するために以下の項目を指定する必要があります XLINK コマンドラインで使用するライブラリオブジェクトファイル dl78ks1n.r26 コンパイラ アセンブラで使用するインクルードパス -I 78k\inc\dlib コンパイラ用のライブラリ設定ファイル --dlib_config C:\...\dl78ks1n.h ライブラリオブジェクトファイルやライブラリ設定ファイルは 78k\lib\dlib サブディレクトリにあります ビルド済ライブラリのカスタマイズ ( リビルドなし ) IAR コンパイラに付属のビルド済ライブラリは そのまま使用できます また リビルドせずにライブラリの一部をカスタマイズすることもできます その場合には 以下の 2 とおりの方法があります 以下のオプションを設定する printf および scanf で使用されるフォーマッタ スタックおよびヒープのサイズ ライブラリモジュールを自作ライブラリでオーバライドするカスタマイズ可能な項目は 以下のとおりです カスタマイズ可能な項目 printf scanf のフォーマッタ起動 / 終了コード低レベル I/O ファイル I/O 低レベル環境関数低レベルシグナル関数 参照先ページ 59 の printf scanf のフォーマッタの選択ページ 64 のシステムの起動と終了ページ 68 の標準 I/O ストリームページ 71 のファイル I/O ページ 74 の環境の操作ページ 75 のシグナル関数 表 18: カスタマイズ可能な項目 58 IAR C/C++ コンパイラリファレンスガイド

85 DLIB ランタイムライブラリ カスタマイズ可能な項目低レベル時間関数 参照先ページ 76 の時間関数 ヒープ スタック セグメントのサイズページ 39 のコードおよびデータの配置 表 18: カスタマイズ可能な項目 ( 続き ) ライブラリモジュールのオーバライド方法については ページ 61 のライブラリモジュールのオーバライドを参照してください printf scanf のフォーマッタの選択すべての printf- および scanf 関連の関数 (wprintf および wscanf バリアントを除く ) のデフォルトフォーマッタをオーバライドするために必要な作業は 該当するライブラリオプションを設定することだけです ここでは 使用可能なオプションについて説明します 注 : ライブラリをリビルドする場合は これらの関数をさらに最適化できます ページ 70 の printf scanf の構成シンボルを参照してください PRINTF フォーマッタの選択 printf 関数は _Printf というフォーマッタを使用します デフォルトのバージョンのフォーマッタはサイズが非常に大きく 多くの組込みアプリケーションで不要な機能を提供しています メモリ消費量を削減するため C/EC++ ライブラリでは 3 つの別バージョンも提供されています 以下の表に 各種フォーマッタの機能の概要を示します フォーマット機能 _PrintfFull _PrintfLarge _PrintfSmall _PrintfTiny 基本指定子 c d i o p s u X x % 使用するライブラリ構成により異なります ありありありあり マルチバイト文字サポート なし 浮動小数点数指定子 a A あり なし なし なし 浮動小数点数指定子 e E f F あり あり なし なし g G 変換指定子 n あり あり なし なし フォーマットフラグ空白 + - あり あり あり なし # 0 サイズ修飾子 h l L s t Z あり あり あり なし フィールド幅 精度 (* を含む ) あり あり あり なし long long のサポート あり あり なし なし 表 19: printf のフォーマッタ パート 1 コンパイラの使用 59

86 printf scanf のフォーマッタの選択 フォーマット機能をさらに調整する方法については ページ 70 の printf scanf の構成シンボルを参照してください IDE での printf のフォーマッタの指定 デフォルト (Full) 以外のフォーマッタを使用するには [ プロジェクト ]>[ オプション ] を選択し [ 一般オプション ] カテゴリを選択します [ ライブラリオプション ] ページで該当オプションを選択します コマンドラインからの printf のフォーマッタの指定 デフォルト (_PrintfFull) 以外のフォーマッタを使用するには 使用しているリンカコマンドファイルに以下の行のいずれかを追加します -e_printflarge=_printf -e_printfsmall=_printf -e_printftiny=_printf SCANF フォーマッタの選択 printf 関数と同様に scanf でも _Scanf という一般的なフォーマッタを使用します デフォルトのバージョンのフォーマッタはサイズが非常に大きく 多くの組込みアプリケーションで不要な機能を提供しています メモリ消費量を削減するため 標準 C/C++ ライブラリでは 2 つの別バージョンも提供されています 以下の表に 各種フォーマッタの機能の概要を示します フォーマット機能 _ScanfFull _ScanfLarge _ScanfSmall 基本指定子 c d i o p s u X x % マルチバイト文字サポート 使用するライブラリ構成により異なります ありありあり 浮動小数点数指定子 a A あり なし なし 浮動小数点数指定子 e E f F g G あり なし なし 変換指定子 n あり なし なし スキャンセット [ ] あり あり なし 代入抑制 * あり あり なし long long のサポート あり なし なし 表 20: scanf のフォーマッタ フォーマット機能をさらに調整する方法については ページ 70 の printf scanf の構成シンボルを参照してください 60 IAR C/C++ コンパイラリファレンスガイド

87 DLIB ランタイムライブラリ IDE での scanf のフォーマッタの指定 デフォルト (Full) 以外のフォーマッタを使用するには [ プロジェクト ]>[ オプション ] を選択し [ 一般オプション ] カテゴリを選択します [ ライブラリオプション ] ページで該当オプションを選択します コマンドラインでの scanf フォーマッタの指定 デフォルト (_ScanfFull) 以外のフォーマッタを使用するには 使用しているリンカコマンドファイルに以下の行のいずれかを追加します -e_scanflarge=_scanf -e_scanfsmall=_scanf ライブラリモジュールのオーバライドライブラリには キャラクタベース I/O 用関数や cstartup など 自作モジュールでオーバライドする可能性のあるモジュールが含まれています オーバライドは ライブラリ全体をリビルドせずに行うことができます ここでは アプリケーションのビルドプロセスに自分で作成したモジュールを含める手順を説明します 自作モジュールでオーバライドできるライブラリファイルは 78k\src\lib ディレクトリにあります 注 : デフォルトの I/O ライブラリモジュールを自作モジュールでオーバライドする場合は そのモジュールの C-SPY でのサポートは無効になります たとえば モジュール write を自作モジュールに置き換えた場合は C-SPY の [ ターミナル I/O] ウィンドウはサポートされません IDE を使用したライブラリモジュールのオーバライド この手順は ライブラリ内のすべてのソースファイルに対して使用できます すなわち この例の library_module.c の代わりに ライブラリ内のあらゆるモジュールを使用できます 1 該当するlibrary_module.cファイルをプロジェクトのディレクトリにコピーします 2 このファイルを変更 ( またはデフォルトファイルをひな型として使用してルーチンを自作 ) し 元のモジュールと同じモジュール名を使用します このためには 新しいファイルを元のファイルと同じ名前で保存する方法が最も簡単です 3 カスタマイズしたファイルをプロジェクトに追加します 4 プロジェクトをリビルドします パート 1 コンパイラの使用 61

88 カスタマイズしたライブラリのビルドと使用 コマンドラインを使用したライブラリモジュールのオーバライド この手順は ライブラリ内のすべてのソースファイルに対して使用できます すなわち この例の library_module.c の代わりに ライブラリ内のあらゆるモジュールを使用できます 1 該当するlibrary_module.cファイルをプロジェクトのディレクトリにコピーします 2 このファイルを変更 ( またはデフォルトファイルをひな型として使用してルーチンを自作 ) し 元のモジュールと同じモジュール名を使用します このためには 新しいファイルを元のファイルと同じ名前で保存する方法が最も簡単です 3 修正したファイルを プロジェクトの他のファイルと同一のオプションを使用してコンパイルします icc78k library_module.c これにより library_module.r26 という名前で代替オブジェクトが作成されます 注 : コードモデル インクルードパス ライブラリ構成ファイルは library_module とその他のコードで同じでなければなりません 4 library_module.r26 を 直接指定するか拡張リンカコマンドを使用して XLINK コマンドラインに追加します 次に例を示します xlink library_module.r26 dl78ks0n.r26 library_module.r26 は コマンドラインでライブラリの前に指定してください これにより 指定したモジュールがライブラリ内のモジュールの代りに使用されます XLINK を実行して アプリケーションをリビルドします これにより library_module.r26 がライブラリ内のモジュールの代わりに使用されます XLINK オプションについては IAR リンカおよびライブラリツールリファレンスガイドを参照してください カスタマイズしたライブラリのビルドと使用状況によっては ( ページ 55 のライブラリのビルドが必要な場合を参照 ) ライブラリのリビルドが必要になることがあります このような場合は 以下を行う必要があります ライブラリプロジェクトをセットアップする 必要なライブラリ修正をする カスタマイズしたライブラリをビルドする 62 IAR C/C++ コンパイラリファレンスガイド

89 DLIB ランタイムライブラリ カスタマイズしたライブラリをアプリケーションプロジェクトで使用する注 : IAR コマンドラインビルドユーティリティ (iarbuild.exe) を使用して コマンドラインで IAR Embedded Workbench プロジェクトをビルドします ただし コマンドラインでライブラリをビルドするための make ファイルやバッチファイルは提供されていません ビルドプロセスと IAR コマンドラインユーティリティについては IAR Embedded Workbench IDE ユーザガイドを参照してください ライブラリプロジェクトのセットアップ IDE では ランタイムライブラリ構成のカスタマイズに使用できるライブラリプロジェクトテンプレートが提供されています このライブラリテンプレートは ライブラリ構成が Full に設定されています ( 表 15 ライブラリ構成, 55 ページを参照 ) IDE で 作成したライブラリプロジェクトの [ 一般オプション ] をアプリケーションに応じて変更します ( ページ 6 のプロジェクト構成の基本設定を参照 ) 注 : オプションの設定について 1 つ重要な制限があります ファイルレベルでオプションを設定 ( ファイルレベルでオーバライド ) すると ファイルを適用対象とする上位レベルのオプションは 一切このファイルに適用されなくなります ライブラリ機能の修正ロケール ファイル記述子 マルチバイト文字などのサポートを修正する場合は ライブラリ設定ファイルを修正し 自作のライブラリをビルドする必要があります これには ランタイムライブラリの一部の追加 / 削除が含まれます ライブラリの機能は 構成シンボルで決定されます これらのシンボルのデフォルト値は DLib_defaults.h ファイルで定義されています このファイルはリードオンリーで 設定可能な値が記述されています ライブラリには 独自のライブラリ設定ファイル dl78kcustom.h もあり これは特定のライブラリを full のライブラリ設定でセットアップします 詳細については 表 18 カスタマイズ可能な項目 (58 ページ ) を参照してください ライブラリ設定ファイルは ランタイムライブラリのビルドや システムヘッダファイルの調整に使用します ライブラリ設定ファイルの修正 ライブラリプロジェクトで ファイル dl78kcustom.h を開き アプリケーション要件に従って構成シンボルの値を設定してカスタマイズします 終了したら 適切なプロジェクトオプションを設定してライブラリプロジェクトをビルドします パート 1 コンパイラの使用 63

90 システムの起動と終了 カスタマイズしたライブラリの使用 ライブラリをビルドしたら アプリケーションプロジェクトで使用できるように設定する必要があります IDE で以下の手順を実行する必要があります 1 [ プロジェクト ]>[ オプション ] を選択し [ 一般オプション ] カテゴリで [ ライブラリ構成 ] タブをクリックします 2 [ ライブラリ ] ドロップダウンリストから [ カスタム DLIB] を選択します 3 [ ライブラリファイル ] テキストボックスで ライブラリファイルを指定します 4 [ 設定ファイル ] テキストボックスで ライブラリ設定ファイルを指定します システムの起動と終了 ここでは アプリケーションの起動と終了時のランタイムライブラリの動作について説明します 起動と終了を処理するコードは 78k\src\lib ディレクトリのソースファイル cstartup.s26, cexit_dlib.s26, と low_level_init.c にあります システム起動コードのカスタマイズ方法については ページ 67 のシステム初期化のカスタマイズを参照してください システム起動システムの起動時 main 関数が入力される前に初期化シーケンスが実行されます このシーケンスでは ターゲットハードウェアと C/C++ 環境で必要とされる初期化を実行します ハードウェアの初期化は 以下のように実行されます 64 IAR C/C++ コンパイラリファレンスガイド

91 DLIB ランタイムライブラリ 図 3: ターゲットハードウェアの初期化フェーズ CPU は リセットされると システム起動コード内のプログラムエントリラベル program_start にジャンプします 関数 low_level_init を定義している場合 この関数が呼び出され アプリケーションで低レベルの初期化を実行できます C/C++ の初期化は 以下のように実行されます 図 4: C/C++ 初期化フェーズ 静的変数とグローバル変数が初期化されます つまり ゼロ初期化変数がクリアされ 他の初期化変数の値が ROM から RAM メモリにコピーされます このステップは low_level_init がゼロを返す場合には 省略されます 詳細はページ 45 の初期化データを参照してください 静的 C++ オブジェクトが生成されます main 関数が呼び出され アプリケーションが起動します パート 1 コンパイラの使用 65

92 システムの起動と終了 システム終了 以下の図には 組込みアプリケーションの終了を制御するための各種の方法を示します 図 5: システム終了フェーズ アプリケーションは 以下の 2 つの方法で正常終了できます main 関数から戻る exit 関数を呼び出す ISO/ANSI C 規格では 2 つの方法は同等であると規定されているため システム起動コードは main から戻る際に exit 関数を呼び出します exit 関数には main のリターン値がパラメータとして引き渡されます デフォルトの exit 関数は C で記述されています この関数は これらの動作を実行する小さなアセンブラ関数 _exit を呼び出します アプリケーション終了時に実行するように登録した関数を呼び出します これには C++ の静的 / グローバル変数のデストラクタと 標準 C 関数 atexit で登録された関数が含まれます 開かれているすべてのファイルを閉じます exit を呼び出します exit の最後まで到達したら システムを停止します アプリケーションは abort または _Exit 関数を呼び出すことによっても終了できます abort 関数は 単に exit を呼び出してシステムの停止を行うだけで 終了処理は実行しません _Exit 関数も abort 関数とほとんど同じですが _Exit では 終了ステータス情報を渡すための引数をとります 終了時にアプリケーションで追加処理 ( システムのリセットなど ) を実行する場合には 独自の exit(int) 関数を記述することができます 66 IAR C/C++ コンパイラリファレンスガイド

DRX-1-JPN

DRX-1-JPN IAR C/C++ 開発ガイドコンパイルおよびリンク Renesas 製 RX マイクロプロセッサファミリ DRX-1-J 版権事項 Copyright 2009 2010 IAR Systems AB. IAR Systems AB が事前に書面で同意した場合を除き このドキュメントを複製することはできません このドキュメントに記載するソフトウェアは 正当な権限の範囲内でインストール 使用 およびコピーすることができます

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

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

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

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

PowerPoint Presentation

PowerPoint Presentation EWARM 8.1x イントロダクション IAR Systems 1 主な機能アップデート インフォメーションセンタ 編集 ビルド画面 プロジェクトオプション デバッグ画面 Appendix インストール手順 IAR Systems 2 主な機能アップデート IAR Systems 3 C11 / C++14 をサポート コンパイラおよびライブラリが最新の C 言語規格 ISO/IEC 9899:2011

More information

ブート領域、フラッシュ領域の分割方法 RL78ファミリ用Cコンパイラ CC-RL

ブート領域、フラッシュ領域の分割方法 RL78ファミリ用Cコンパイラ CC-RL ブート領域 フラッシュ領域の分割方法 RL78 ファミリ用 C コンパイラ CC-RL 2016 年 10 月 5 日 Rev.2.00 ソフトウエア事業部 ソフトウエア技術部 ルネサスシステムデザイン株式会社 R20UT3475JJ0200 アジェンダ はじめにページ 3 概要ページ 4 ブート領域 フラッシュ領域共通ページ 12 ブート領域ページ 19 フラッシュ領域ページ 38 デバッグツールページ

More information

MMUなしプロセッサ用Linuxの共有ライブラリ機構

MMUなしプロセッサ用Linuxの共有ライブラリ機構 MMU なしプロセッサ用 Linux の共有ライブラリ機構 大谷浩司 高岡正 近藤政雄 臼田尚志株式会社アックス はじめに μclinux には 仮想メモリ機構がないので共有ライブラリ機構が使えない でもメモリ消費抑制 ストレージ消費抑制 保守性の向上のためには 欲しい 幾つかの実装があるが CPU ライセンス 機能の制限のためにそのまま利用できない RidgeRun 社 (Cadenux 社 )

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 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

PowerPoint プレゼンテーション

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

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション ARM 用統合開発環境 EWARM アドオンツール C-RUN のご紹介 2015.1 IAR システムズ株式会社 www.iar.com C-RUN 概要 www.iar.com C-RUN とは? 統合開発環境 EWARM のデバッグ機能が強化されました C-RUN はデバッグ効率アップを目的としたアドオンツールです 単体テスト時の動的解析が簡単 & 安価に可能です 従来の解析ツール 開発プロセスの変更が必要

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

RL78開発環境移行ガイド RL78ファミリ間の移行 (コンパイラ編:コンパイラオプション・アセンブラオプション)(CA78K0R→CC-RL)

RL78開発環境移行ガイド RL78ファミリ間の移行 (コンパイラ編:コンパイラオプション・アセンブラオプション)(CA78K0R→CC-RL) RL78 開発環境移行ガイド RL78 ファミリ間の移行 ( コンパイラ編 : コンパイラ アセンブラ ) (CA78K0R CC-RL) 2016/12/28 R20UT3418JJ0101 ソフトウェア事業部ソフトウエア技術部ルネサスシステムデザイン株式会社 はじめに 本資料は RL78 ファミリ用 C コンパイラ CA78K0R 用のプロジェクトを RL78 ファミリ用 C コ ンパイラ CC-RL

More information

Setting up HeapAgent if you’re using

Setting up HeapAgent if you’re using SmartHeap for SMP 入門 / プラットフォームガイド 対応 OS: Windows Server 2003 Windows XP Windows 2000 Windows NT Intel Version 7 SmartHeap は Compuware 株式会社の商標です また HeapAgent は同社の登録商標です Microsoft Windows および Win32 は Microsoft

More information

AquesTalk プログラミングガイド

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

More information

プログラミング実習I

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

More information

PowerPoint Presentation

PowerPoint Presentation Armv8-M セキュアマイコンプログラミングテクニック 技術チーム / 殿下 信二 このセッションの目的 Armv8-M セキュアマイコンの使い方の基礎を学ぶ Cortex-M マイコンと Armv8-M セキュアマイコンの違い 簡単です Armv8-M セキュアマイコンプログラミング なぜセキュアマイコンが必要ですか? 製品が偽造 模造 過剰生産されるリスクの低減 IoT 製品のメリット ( コネクティビティ

More information

Microsoft PowerPoint - OS07.pptx

Microsoft PowerPoint - OS07.pptx この資料は 情報工学レクチャーシリーズ松尾啓志著 ( 森北出版株式会社 ) を用いて授業を行うために 名古屋工業大学松尾啓志 津邑公暁が作成しました 主記憶管理 主記憶管理基礎 パワーポイント 27 で最終版として保存しているため 変更はできませんが 授業でお使いなる場合は松尾 (matsuo@nitech.ac.jp) まで連絡いただければ 編集可能なバージョンをお渡しする事も可能です 復習 OS

More information

使用する前に

使用する前に この章では Cisco Secure ACS リリース 5.5 以降から Cisco ISE リリース 2.4 システムへのデー タ移行に使用される Cisco Secure ACS to Cisco ISE Migration Tool について説明します 移行の概要 1 ページ Cisco Secure ACS から データ移行 1 ページ Cisco Secure ACS to Cisco ISE

More information

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

生成された C コードの理解 コメント元になった MATLAB コードを C コード内にコメントとして追加しておくと その C コードの由来をより簡単に理解できることがよくありま [ 詳細設定 ] [ コード外観 ] を選択 C コードのカスタマイズ より効率的な C コードを生成するベストプラクテ MATLAB コードを使用した C コードの生成クイックスタートガイド (R2012a) 最初のスタンドアロン C コードの生成 スタンドアロン C コードを生成するには MATLAB Coder のペインを [ ビルド ] に切り替えて [C/C++ スタティックライブラリ ] [C/C++ ダイナミックライブラリ ] または [C/C++ 実行ファイル ] のいずれかを選択しま MATLAB Coder

More information

10-vm1.ppt

10-vm1.ppt オペレーティングシステム ~ 仮想記憶 (1) ~ 山田浩史 hiroshiy @ cc.tuat.ac.jp 2015/06/19 OS の目的 裸のコンピュータを抽象化 (abstraction) し より使いやすく安全なコンピュータとして見せること OS はハードウェアを制御し アプリケーションの効率的な動作や容易な開発を支援する OS がないと メモリをアプリケーション自身が管理しなければならない

More information

Microsoft PowerPoint - 09.pptx

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

More information

Source Insight

Source Insight ソースインサイト プログラムエディタ Source Insight のご紹介 ソースを理解しながら 効率の良いコーディング エクセルソフト株式会社営業部 エクセルソフト株式会社 Copyright 2008 XLsoft K.K. All Rights Reserved. - 1 - 目次 プログラムエディタ Source Insight のご紹介 ソースを理解しながら 効率の良いコーディング 目次

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

21 章のお話

21 章のお話 21 章のお話 オブジェクトヘッダ 型オブジェクトポインター (4byte, 8byte) 型の構造体へのポンタ 同期ブロックインデックス (4byte, 8byte) ロックとか COM で利用する フィールド マネージヒープ NextObjPtr マネージヒープ NextObjPtr オブジェクト A を割り当てたい! 同期ブロック 同期ブロックインデックス ~ フィールドまでが入るようにする

More information

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

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

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

Using VectorCAST/C++ with Test Driven Development

Using VectorCAST/C++ with Test Driven Development ホワイトペーパー V2.0 2018-01 目次 1 はじめに...3 2 従来型のソフトウェア開発...3 3 テスト主導型開発...4 4...5 5 TDD を可能にするテストオートメーションツールの主要機能...5 5.1 テストケースとソースコード間のトレーサビリティー...5 5.2 テストケースと要件間のトレーサビリティー...6 6 テスト主導型開発の例...7 2 1 はじめに 本書では

More information

改版履歴 版数 改版日付 改版内容 /03/14 新規作成 2013/03まで製品サイトで公開していた WebSAM DeploymentManager Ver6.1 SQL Server 2012 製品版のデータベース構築手順書 ( 第 1 版 ) を本 書に統合しました 2

改版履歴 版数 改版日付 改版内容 /03/14 新規作成 2013/03まで製品サイトで公開していた WebSAM DeploymentManager Ver6.1 SQL Server 2012 製品版のデータベース構築手順書 ( 第 1 版 ) を本 書に統合しました 2 第 1 版 改版履歴 版数 改版日付 改版内容 1 2013/03/14 新規作成 2013/03まで製品サイトで公開していた WebSAM DeploymentManager Ver6.1 SQL Server 2012 製品版のデータベース構築手順書 ( 第 1 版 ) を本 書に統合しました 2 目次 1. 使用しているデータベース (DPMDBI インスタンス ) を SQL Server

More information

CLUSTERPRO MC RootDiskMonitor 1.0 for Windows インストールガイド 2013(Mar) NEC Corporation はじめに 製品導入の事前準備 本製品のインストール 本製品の初期設定 本製品のアンインストール

CLUSTERPRO MC RootDiskMonitor 1.0 for Windows インストールガイド 2013(Mar) NEC Corporation はじめに 製品導入の事前準備 本製品のインストール 本製品の初期設定 本製品のアンインストール CLUSTERPRO MC RootDiskMonitor 1.0 for Windows インストールガイド 2013(Mar) NEC Corporation はじめに 製品導入の事前準備 本製品のインストール 本製品の初期設定 本製品のアンインストール 改版履歴 版数 改版 内容 1.0 2012.9 新規作成 2.0 2013.3 FAQ 集 はじめての RootDiskMonitor テスト手順書

More information

Rational Roseモデルの移行 マニュアル

Rational Roseモデルの移行 マニュアル Model conversion from Rational Rose by SparxSystems Japan Rational Rose モデルの移行マニュアル (2012/1/12 最終更新 ) 1. はじめに このガイドでは 既に Rational( 現 IBM) Rose ( 以下 Rose と表記します ) で作成された UML モデルを Enterprise Architect で利用するための作業ガイドです

More information

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く

char int float double の変数型はそれぞれ 文字あるいは小さな整数 整数 実数 より精度の高い ( 数値のより大きい より小さい ) 実数 を扱う時に用いる 備考 : 基本型の説明に示した 浮動小数点 とは数値を指数表現で表す方法である 例えば は指数表現で 3 書く 変数 入出力 演算子ここまでに C 言語プログラミングの様子を知ってもらうため printf 文 変数 scanf 文 if 文を使った簡単なプログラムを紹介した 今回は変数の詳細について習い それに併せて使い方が増える入出力処理の方法を習う また 演算子についての復習と供に新しい演算子を紹介する 変数の宣言プログラムでデータを取り扱う場合には対象となるデータを保存する必要がでてくる このデータを保存する場所のことを

More information

Microsoft PowerPoint - 1_コンパイラ入門セミナー.ppt

Microsoft PowerPoint - 1_コンパイラ入門セミナー.ppt インテルコンパイラー 入門セミナー [ 対象製品 ] インテル C++ コンパイラー 9.1 Windows* 版インテル Visual Fortran コンパイラー 9.1 Windows* 版 資料作成 : エクセルソフト株式会社 Copyright 1998-2007 XLsoft Corporation. All Rights Reserved. 1 インテル コンパイラー入門 本セミナーの内容

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション ARM 用統合開発環境 IAR Embedded Workbench for ARM 動的解析アドオン機能 C-RUN のご紹介 2015/4 IAR Systems K.K. C-RUN とは? 統合開発環境 IAR Embedded Workbench for ARM (EWARM) のデバッグ機能が強化されました C-RUNはデバッグ効率アップを目的とした動的解析アドオン機能です 単体テスト時の動的解析が簡単

More information

RH850の割り込み/例外実現方法 CC-RHアプリケーションガイド

RH850の割り込み/例外実現方法 CC-RHアプリケーションガイド RH850の割り込み / 例外実現方法 CC-RH アプリケーションガイド R20UT3546JJ0101 2018.10.12 ソフトウェア開発統括部 ソフトウェア技術部ルネサスエレクトロニクス株式会社 アジェンダ 概要ページ 03 割り込み / 例外発生時に実行する関数の定義ページ 10 直接ベクタ方式のベクタの定義ページ 17 テーブル参照方式のベクタの定義ページ 25 その他 割り込み制御ページ

More information

Microsoft Word - no02.doc

Microsoft Word - no02.doc 使い方 1ソースプログラムの入力今回の講義では C++ 言語用の統合環境ソフトといわれるプログラムを利用します デスクトップにある CPad for C++ のアイコン ( 右参照 ) をダブルクリ ックしましょう ( 同じアイコンで Java_pad とかい エディタ部 てあるものもありますので気をつけてください ) これで 起 動します 統合環境を立ち上げると エディタ部とメッセージ部をもった画面が出てきます

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション コンピュータアーキテクチャ 第 13 週 割込みアーキテクチャ 2013 年 12 月 18 日 金岡晃 授業計画 第 1 週 (9/25) 第 2 週 (10/2) 第 3 週 (10/9) 第 4 週 (10/16) 第 5 週 (10/23) 第 6 週 (10/30) 第 7 週 (11/6) 授業概要 2 進数表現 論理回路の復習 2 進演算 ( 数の表現 ) 演算アーキテクチャ ( 演算アルゴリズムと回路

More information

Nero ControlCenter マニュアル

Nero ControlCenter マニュアル Nero ControlCenter マニュアル Nero AG 著作権および商標情報 Nero ControlCenter マニュアルとその内容のすべては 著作権によって保護されており Nero AG が版権を所有しています 無断転載を禁止します このマニュアル内容は 国際著作権条約により保護されています Nero AG の書面による明確な許可なしに 本マニュアルの一部または全部の複製 配布 複写を禁止します

More information

intra-mart WebPlatform/AppFramework

intra-mart WebPlatform/AppFramework intra-mart WebPlatform/AppFramework Ver.7.2 ポータルシステム管理者操作ガイド 2010/04/01 初版 i 変更履歴 変更年月日 変更内容 2010/04/01 初版 ii 第 1 章ポートレット管理 1 1.1 ポートレット管理とは 2 1.2 ポートレットアプリケーション一覧 3 1.2.1 概要 3 1.3 ポートレットアプリケーションの登録 4

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

CLUSTERPRO MC StorageSaver for BootDisk 1.2 (for Windows) インストールガイド 2014(Mar) NEC Corporation はじめに 製品導入の事前準備 本製品のインストール 本製品の初期設定 本製品のアンインストール

CLUSTERPRO MC StorageSaver for BootDisk 1.2 (for Windows) インストールガイド 2014(Mar) NEC Corporation はじめに 製品導入の事前準備 本製品のインストール 本製品の初期設定 本製品のアンインストール CLUSTERPRO MC StorageSaver for BootDisk 1.2 (for Windows) インストールガイド 2014(Mar) NEC Corporation はじめに 製品導入の事前準備 本製品のインストール 本製品の初期設定 本製品のアンインストール 改版履歴 版数改版内容 1.0 2014.3 新規作成 i はしがき 本書は CLUSTERPRO MC StorageSaver

More information

Prog2_12th

Prog2_12th 2018 年 12 月 13 日 ( 木 ) 実施クラスの継承オブジェクト指向プログラミングの基本的な属性として, 親クラスのメンバを再利用, 拡張, または変更する子クラスを定義することが出来る メンバの再利用を継承と呼び, 継承元となるクラスを基底クラスと呼ぶ また, 基底クラスのメンバを継承するクラスを, 派生クラスと呼ぶ なお, メンバの中でコンストラクタは継承されない C# 言語では,Java

More information

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

作業環境カスタマイズ 機能ガイド(応用編) Customize Feature Guide by SparxSystems Japan Enterprise Architect 日本語版 作業環境カスタマイズ機能ガイド ( 応用編 ) (2018/05/16 最終更新 ) 1 はじめに このドキュメントでは Enterprise Architect を利用して作業を行う場合に より快適に作業を行うためのカスタマイズ可能な項目について説明します

More information

OpenLAB Data Store Release Notes

OpenLAB Data Store Release Notes Agilent OpenLAB Data Store バージョン A.02.02 リリースノートおよび更新履歴 注意 Agilent Technologies, Inc. 2014 本マニュアルは米国著作権法および国際著作権法によって保護されており Agilent Technologies, Inc. の書面による事前の許可なく 本書の一部または全部を複製することはいかなる形式や方法 ( 電子媒体による保存や読み出し

More information

CLUSTERPRO MC StorageSaver for BootDisk 2.1 (for Windows) インストールガイド 2016(Mar) NEC Corporation はじめに 製品導入の事前準備 本製品のインストール 本製品の初期設定 本製品のアンインストール

CLUSTERPRO MC StorageSaver for BootDisk 2.1 (for Windows) インストールガイド 2016(Mar) NEC Corporation はじめに 製品導入の事前準備 本製品のインストール 本製品の初期設定 本製品のアンインストール CLUSTERPRO MC StorageSaver for BootDisk 2.1 (for Windows) インストールガイド 2016(Mar) NEC Corporation はじめに 製品導入の事前準備 本製品のインストール 本製品の初期設定 本製品のアンインストール 改版履歴 版数 改版 内容 1.0 2015.3 新規作成 2.0 2016.3 バージョンアップに伴い改版 i はしがき

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 4 回再帰的構造体 プログラミングを 余談 : 教えることの難しさ 丁寧に説明しないと分かってもらえない 説明すると 小難しくなる学生が目指すべきところプログラム例を説明されて理解できる違うやり方でも良いので自力で解決できる おっけー 動けば良い という意識でプログラミング 正しく動くことのチェックは必要 解答例と自分のやり方との比較が勉強になる 今日のお題 再帰的構造体

More information

マネージドクラウド with bit-drive 仮想マシンサービス 管理者マニュアル [ 管理者さま向け ] 2018 年 10 月 15 日 Version 3.0 bit- drive 2018/10/15 Version 3.0 マネージドクラウド with bit-drive 仮想マシン

マネージドクラウド with bit-drive 仮想マシンサービス 管理者マニュアル [ 管理者さま向け ] 2018 年 10 月 15 日 Version 3.0 bit- drive 2018/10/15 Version 3.0 マネージドクラウド with bit-drive 仮想マシン マネージドクラウド with bit-drive 仮想マシンサービス 管理者マニュアル [ 管理者さま向け ] 2018 年 10 月 15 日 Version 3.0 bit- drive 1/36 著作権情報 本ドキュメントは 著作権法で保護された著作物で その全部または一部を許可なく複製したり複製物を配布 したり あるいは他のコンピュータ用に変換したり 他の言語に翻訳すると 著作権の侵害となります

More information

AquesTalk Win Manual

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

More information

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ Oracle Un お問合せ : 0120- Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよびSOA 対応データ サービスへ ) を網羅する総合的なデータ統合プラットフォームです Oracle

More information

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

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

More information

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

Microsoft PowerPoint - C++_第1回.pptx OpenFoam のための C/C++ 第 1 回メモリ管理 田中昭雄 1 目的 この勉強会の資料があれば OpenFoam カスタマイズ時に C/C++ で迷わない 2 予定 第 1 回メモリ管理 第 2 回 OpenFOAM で勉強するクラス 第 3 回 OpenFOAM で勉強するテンプレート 第 4 回 OpenFOAM カスタマイズ 第 5 回未定 第 6 回未定 3 今回のテーマ C++

More information

DBMSリポジトリへの移行マニュアル

DBMSリポジトリへの移行マニュアル DBMS Repository Guide by SparxSystems Japan Enterprise Architect 日本語版 (2018/05/16 最終更新 ) 1 1. はじめに Enterprise Architect コーポレート版では 外部のデータベース管理ソフトウェア ( 以下 DBMS) 上にプロジェクトを配置することができます これにより DBMS が持つ堅牢性 安定性

More information

メソッドのまとめ

メソッドのまとめ メソッド (4) 擬似コードテスト技法 http://java.cis.k.hosei.ac.jp/ 授業の前に自己点検以下のことがらを友達に説明できますか? メソッドの宣言とは 起動とは何ですか メソッドの宣言はどのように書きますか メソッドの宣言はどこに置きますか メソッドの起動はどのようにしますか メソッドの仮引数 実引数 戻り値とは何ですか メソッドの起動にあたって実引数はどのようにして仮引数に渡されますか

More information

困ったときのQ&A

困ったときのQ&A Help i 1 ii iii v iv 2 C Alt Delete v iv vii vi vii vi viii ix x http://121ware.com/support/ 0120-977-121 x xi xii xii xii 1 2 3 4 5 xiii xiv xv xvi xvii xviii xix xx P A R T 1 P A R T 2 xxi P A R T 3

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

統合開発環境CubeSuite+ V へのバージョンアップのお知らせ

統合開発環境CubeSuite+ V へのバージョンアップのお知らせ ツールニュース RENESAS TOOL NEWS 2013 年 04 月 16 日 : 130416/tn1 統合開発環境 CubeSuite+ V2.00.00 への バージョンアップのお知らせ 統合開発環境 CubeSuite+ を V1.03.00 から V2.00.00 へバージョンアップしました 1. アップデート対象バージョン CubeSuite+ 共通部分 V1.00.00~V1.03.00

More information

User Support Tool 操作ガイド

User Support Tool 操作ガイド User Support Tool - 操作ガイド - User Support Tool とは? User Support Tool は ファームウェアを更新するためのユーティリティソフトウェアです 本書では User Support Tool を使用して プリンタのファームウェアを更新する方法を解説しています ご使用前に必ず本書をお読みください 1 準備する 1-1 必要なシステム環境...P.

More information

概要 プログラミング論 変数のスコープ, 記憶クラス. メモリ動的確保. 変数のスコープ 重要. おそらく簡単. 記憶クラス 自動変数 (auto) と静的変数 (static). スコープほどではないが重要.

概要 プログラミング論 変数のスコープ, 記憶クラス. メモリ動的確保. 変数のスコープ 重要. おそらく簡単. 記憶クラス 自動変数 (auto) と静的変数 (static). スコープほどではないが重要. 概要 プログラミング論 変数のスコープ, 記憶クラス. メモリ動的確保. 変数のスコープ 重要. おそらく簡単. 記憶クラス 自動変数 (auto) と静的変数 (static). スコープほどではないが重要. http://www.ns.kogakuin.ac.jp/~ct13140/progc/ C-2 ブロック 変数のスコープ C 言語では, から をブロックという. for( ) if( )

More information

CLUSTERPRO MC RootDiskMonitor 2.3 for Windows インストールガイド 2018(Jun) NEC Corporation はじめに 製品導入の事前準備 本製品のインストール 本製品の初期設定 本製品のアンインストール 本製品のアップデートインストール

CLUSTERPRO MC RootDiskMonitor 2.3 for Windows インストールガイド 2018(Jun) NEC Corporation はじめに 製品導入の事前準備 本製品のインストール 本製品の初期設定 本製品のアンインストール 本製品のアップデートインストール CLUSTERPRO MC RootDiskMonitor 2.3 for Windows インストールガイド 2018(Jun) NEC Corporation はじめに 製品導入の事前準備 本製品のインストール 本製品の初期設定 本製品のアンインストール 本製品のアップデートインストール 改版履歴 版数 改版 内容 1.0 2015.3 新規作成 2.0 2016.3 Microsoft.NET

More information

Cコンパイラパッケージお知らせ

Cコンパイラパッケージお知らせ 201406-2 CubeSuite+ 版 RX ファミリ用 C/C++ コンパイラパッケージ V1 および High-performance Embedded Workshop 版 RX ファミリ用 C/C++ コンパイラパッケージ ご使用上のお願い CubeSuite+ 版 RX ファミリ用 C/C++ コンパイラパッケージ V1 および High-performance Embedded Workshop

More information

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

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード] 第 3 回 Java 基本技術講義 クラス構造と生成 33 クラスの概念 前回の基本文法でも少し出てきたが, オブジェクト指向プログラミングは という概念をうまく活用した手法である. C 言語で言う関数に似ている オブジェクト指向プログラミングはこれら状態と振る舞いを持つオブジェクトの概念をソフトウェア開発の中に適用し 様々な機能を実現する クラス= = いろんなプログラムで使いまわせる 34 クラスの概念

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 総機 1 ( 月 1) 14: 発展事項 2014-07-13 1 今日の内容 これまでの講義で説明していない事項についていくつか簡単に紹介する 文法 標準入出力ファイル 異常終了 短絡評価 文字定数の型 キャスト 変数の宣言位置 グローバル変数 静的変数 (static) const 変数 プリプロセッサ ディレクティブ マクロ ファイルの読み込み 数学関数のエラーチェック

More information

NEC COBOL Enterprise Edition Developer クライアントライセンス V2.0 COBOL Enterprise Edition Developer クライアントライセンス V2.0 (1 年間保守付 ) COBOL Enterprise Edition Develo

NEC COBOL Enterprise Edition Developer クライアントライセンス V2.0 COBOL Enterprise Edition Developer クライアントライセンス V2.0 (1 年間保守付 ) COBOL Enterprise Edition Develo NEC COBOL Enterprise Edition Developer クライアントライセンス V2.0 COBOL Enterprise Edition Developer クライアントライセンス V2.0 (1 年間保守付 ) COBOL Enterprise Edition Developer クライアントライセンス V2.0 (1 年間時間延長保守付 ) セットアップカード ごあいさつ

More information

Application Note Application Note No. ESC-APN Document No.: ESC-APN adviceluna Linux デバッグ手順 (MIPS コア編 ) はじめに adviceluna Linux デバッグ手順 ( 以

Application Note Application Note No. ESC-APN Document No.: ESC-APN adviceluna Linux デバッグ手順 (MIPS コア編 ) はじめに adviceluna Linux デバッグ手順 ( 以 No. ESC-APN-026-02 Document No.: ESC-APN-026-02 adviceluna Linux デバッグ手順 (MIPS コア編 ) はじめに adviceluna Linux デバッグ手順 ( 以下 本書 ) は adviceluna にて下記 Linux 環境をデバッグする手順を説明した文書です Application Shared Library Loadable

More information

Microsoft Word - 13_ver6_Win7SP1.doc

Microsoft Word - 13_ver6_Win7SP1.doc NEC Express5800 シリーズ Windows 7 Service Pack 1 適用について Microsoft Windows は 米国 Microsoft Corporation の米国およびその他の国における登録商標または商標です その他 記載されている会社名 製品名は 各社の登録商標または商標です 本書の内容は将来予告なしに変更することがあります 無断転載を禁じます 本書または本書に記述されている製品や技術に関して

More information

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

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

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

ColorNavigator 7使い方ガイド(ColorNavigator 6アップグレード編)

ColorNavigator 7使い方ガイド(ColorNavigator 6アップグレード編) 使い方ガイド (ColorNavigator 6 アップグレード編 ) カラーマネージメントソフトウェア Version 7.0 重要 ご使用前には必ずこの使い方ガイドをよくお読みになり 正しくお使いください この使い方ガイドを含む最新の製品情報は 当社のWebサイトから確認できます www.eizo.co.jp 本書について 本書は これまで ColorNavigator 6 をお使いで ColorNavigator

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション プログラミング応用演習 第 4 回再帰的構造体 前回の出席確認演習 #include int main() { FILE *fp; int c, linecount, length, maxlength; fp=fopen("/usr/share/dict/words","r"); if (fp == NULL) return 1; linecount=0; length=0;

More information

I

I I II III IV V VI VII VIII IX X XI XII XIII XIV XV XVI XVII XVIII XIX XX XXI XXII XXIII XXIV XXV XXVI XXVII XXVIII 1 1. 2 3 2. 4 1 5 6 7 8 9 10 1 2 3 11 3. 12 13 14 1 2 3 15 4 5 16 1 2 3 17 4 18 4. 1 2

More information

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

SuperH RISC engine C/C++ コンパイラ Ver.7 不具合内容 - 過去のお知らせ SuperH RISC engine C/C++ コンパイラ Ver.7 台における不具合内容を以下に示します のチェックツールをルネサスエレクトロニクス株式会社のホームページ SuperH RISC engine C/C++ コンパイラ Ver.7 不具合内容 - 過去のお知らせ SuperH RISC engine C/C++ コンパイラ Ver.7 台における不具合内容を以下に示します 1. 2. 4. のチェックツールをルネサスエレクトロニクス株式会社のホームページより入手できます http//tool-support.renesas.com/jpn/toolnews/shc/shcv7/dr_shcv7_4.html

More information

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

More information

Microsoft Word - ESX_Setup_R15.docx

Microsoft Word - ESX_Setup_R15.docx 解決!! 画面でわかる簡単ガイド : 仮想環境データ保護 (VMWARE ESX) ~ 仮想マシン 丸ごと バックアップ環境の設定手順 ~ 解決!! 画面でわかる簡単ガイド CA ARCserve Backup r15 仮想環境データ保護 (VMware ESX) ~ 仮想マシン 丸ごと データ保護環境の設定手順 ~ 2011 年 4 月 CA Technologies 1 目次 はじめに... 3

More information

Color MultiWriter 9900C/9800C ユーザーズマニュアル

Color MultiWriter 9900C/9800C ユーザーズマニュアル l l l l l i ii iii iv v vi vii viii ix x xi xii xiii xiv xv xvi xvii xviii xix xx xxi xxii xxiii xxiv xxv xxvi 1.1 1 2 3 1 1 4 5 1 1 6 7-1 1.2 1 8 1.3 1 9 1 1.3.1 10 1 2 11 1 1 1.3.2 12 13 1 1 14 1.4

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 2 ( 月 4) 11: 動的メモリ確保 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2014-06-22 1 まとめ : ポインタを使った処理 内容 説明 呼び出し元の変数を書き換える第 9 回 文字列を渡す 配列を渡す 第 10 回 ファイルポインタ

More information

Prog1_10th

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

More information

Data-Add User Manual.book

Data-Add User Manual.book Data-Add ULEAD DATA-ADD ユーザーガイド 1 目次 Ulead Data-Add へようこそ... 2 Ulead Data-Add って何?... 2 動作条件... 2 Ulead Data-Add のインストール... 2 環境設定のカスタマイズ... 3 オプション... 3 Data-Add を使ってファイルやフォルダをディスクにコピーする... 4 ファイルシステム...

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

改版履歴 Ver. 日付履歴 1.0 版 2014/5/30 目次 0 はじめに 本文中の記号について Windows Server Failover Cluster をインストールするための準備 Windows Server Failover

改版履歴 Ver. 日付履歴 1.0 版 2014/5/30 目次 0 はじめに 本文中の記号について Windows Server Failover Cluster をインストールするための準備 Windows Server Failover NX7700x シリーズ Windows Server 2008 R2 Enterprise/ Windows Server 2008 R2 Datacenter Windows Server Failover Cluster インストール手順書 1.0 版 2014/5/30 Microsoft Windows Windows Server は 米国 Microsoft Corporation の米国およびその他の国における登録商標または商標です

More information

プログラミング実習I

プログラミング実習I プログラミング実習 I 03 変数と式 人間システム工学科井村誠孝 m.imura@kwansei.ac.jp 3.1 変数と型 変数とは p.60 C 言語のプログラム中で, 入力あるいは計算された数や文字を保持するには, 変数を使用する. 名前がついていて値を入れられる箱, というイメージ. 変数定義 : 変数は変数定義 ( 宣言 ) してからでないと使うことはできない. 代入 : 変数には値を代入できる.

More information

NEC Express5800 シリーズ COBOL Enterprise Edition クライアントライセンス V1 COBOL Enterprise Edition クライアントライセンス V1 (1 年間保守付き ) COBOL Enterprise Edition クライアントライセンス

NEC Express5800 シリーズ COBOL Enterprise Edition クライアントライセンス V1 COBOL Enterprise Edition クライアントライセンス V1 (1 年間保守付き ) COBOL Enterprise Edition クライアントライセンス NEC Express5800 シリーズ COBOL Enterprise Edition クライアントライセンス V1 COBOL Enterprise Edition クライアントライセンス V1 (1 年間保守付き ) COBOL Enterprise Edition クライアントライセンス V1 (1 年間時間延長保守付き ) セットアップカード ごあいさつ このたびは COBOL Enterprise

More information

困ったときのQ&A

困ったときのQ&A Help i 1 ii iii v iv 2 C Alt Delete v iv vii vi vii vi viii ix x x xi 1 2 3 4 5 xii xiii xiv xv xvi xvii c c c xviii xix P A R T 1 P A R T 2 xx P A R T 3 xxi P A R T 4 xxii xxiii P A R T 1 2 1 1 2 3

More information

講習No.12

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

More information

Microsoft PowerPoint - OS08.pptx

Microsoft PowerPoint - OS08.pptx この資料は 情報工学レクチャーシリーズ松尾啓志著 ( 森北出版株式会社 ) を用いて授業を行うために 名古屋工業大学松尾啓志 津邑公暁が作成しました 管理 割り当て パワーポイント 27 で最終版として保存しているため 変更はできませんが 授業でお使いなる場合は松尾 (matsuo@nitech.ac.jp) まで連絡いただければ 編集可能なバージョンをお渡しする事も可能です 復習 復習 管理 ユーザに独立した論理アドレス空間を提供

More information

BricRobo V1.5 インストールマニュアル

BricRobo V1.5 インストールマニュアル 株式会社富士通コンピュータテクノロジーズ 目次 1 はじめに... 1 1.1 本書の目的... 1 1.2 関連文書... 1 1.2.1 上位文書... 1 1.2.2 参考文書... 1 1.3 問い合わせ先... 1 2 インストールファイル... 2 3 準備... 3 3.1 動作環境... 3 3.2 Enterprise Architect の入手... 3 4 インストール...

More information

NetworkVantage 9

NetworkVantage 9 DevPartner エラー検出 はじめてのエラー検出 (Unmanaged VC++ 版 ) 本書は はじめてエラー検出を使用する際に参考していただくドキュメントです 詳細な情報につきましては 製品に付属しているオンラインドキュメントならびにオンラインヘルプをご参照ください なお 本書は Visual Studio 2010 をベースとして説明しております Visual Studio 6.0 の場合は

More information

ことばを覚える

ことばを覚える 業務部門の担当者による担当者のための業務アプリケーションの作り方 ( その 4) 現在在庫の適正化のための 在庫管理ツールの構築 コンテキサー操作演習 20121113 コンテキサーチュートリアル ( バージョン 2.2 用 ) コンテキサーのバージョンは 2.2.12 以降で行ってください 目次 ステップ1 在庫棚卸パネルの作成 --- 9 ステップ2 在庫品目パネルの作成 --- 17 ステップ3

More information

7th CodeGear Developer Camp

7th CodeGear Developer Camp A6 Delphi テクニカルセッション RTL ソースを利用する Delphi デバッグ技法 CodeGear R&D 有澤雄志 Copyright 2007 CodeGear. All Rights Reserved. 本文書の一部または全部の転載を禁止します 1 アジェンダ RTL の利用準備 IDE から使ってみる Copyright 2007 CodeGear. All Rights Reserved.

More information

<< 目次 >> 1 PDF コンバータのインストール ライセンスコードの入力 PDF にフォントを埋め込みたい場合の設定 PDF オートコンバータ EX で使用しない場合 PDF コンバータ単体で使用する場合の説明 PDF コンバータのアン

<< 目次 >> 1 PDF コンバータのインストール ライセンスコードの入力 PDF にフォントを埋め込みたい場合の設定 PDF オートコンバータ EX で使用しない場合 PDF コンバータ単体で使用する場合の説明 PDF コンバータのアン PDF コンバータ V5.X インストール ガイド Page0 > 1 PDF コンバータのインストール... 2 2 ライセンスコードの入力... 6 3 PDF にフォントを埋め込みたい場合の設定... 9 4 PDF オートコンバータ EX で使用しない場合 PDF コンバータ単体で使用する場合の説明... 10 5 PDF コンバータのアンインストール... 16 6 お問合せ...

More information

Microsoft PowerPoint - 11.pptx

Microsoft PowerPoint - 11.pptx ポインタと配列 ポインタと配列 配列を関数に渡す 法 課題 : 配列によるスタックの実現 ポインタと配列 (1/2) a が配列であるとき, 変数の場合と同様に, &a[0] [] の値は配列要素 a[0] のアドレス. C 言語では, 配列は主記憶上の連続領域に割り当てられるようになっていて, 配列名 a はその配列に割り当てられた領域の先頭番地となる. したがって,&a[0] と a は同じ値.

More information

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版  

intra-mart Accel Platform — IM-共通マスタ スマートフォン拡張プログラミングガイド   初版   Copyright 2012 NTT DATA INTRAMART CORPORATION 1 Top 目次 1. 改訂情報 2. IM- 共通マスタの拡張について 2.1. 前提となる知識 2.1.1. Plugin Manager 2.2. 表記について 3. 汎用検索画面の拡張 3.1. 動作の概要 3.1.1. 汎用検索画面タブの動作概要 3.2. 実装の詳細 3.2.1. 汎用検索画面タブの実装

More information

Microsoft Word - Cubesuite+_78K0R.doc

Microsoft Word - Cubesuite+_78K0R.doc TK-78K0R シリーズ CubeSuite+ 対応追加マニュアル テセラ テクノロジー株式会社 Rev :1.0 2011/7/19-1 - 目次 1 本書の概要...3 2 PC 動作環境の説明...4 3 USB ドライバーダウンロードとインストール...6 4 CubeSuite+ プロジェクトへの変換... 11 5 設定の確認... 13 6 ビルド デバッガ起動... 15 7 78K0R

More information

Microsoft Word - tool01.doc

Microsoft Word - tool01.doc 5 月号付属基板開発ツールと Stmicroelectronics 社提供 のサンプル プログラム 使いこなすためのポイント江崎雅康 ARM Cortex M3 付属基板のプログラミング 要点 DWM 誌 5 月号付属基板 CQ-STARM はUSBダウンローダDFU(Device Firmware Upgrade) を搭載しています miniusbケーブル1 本でユーザプログラムの書き込みができるのが特徴です

More information

モデム コマンドに関するガイドライン

モデム コマンドに関するガイドライン HP Tablet PC シリーズ 製品番号 : 335883-291 2003 年 10 月 このガイドでは お使いの Tablet PC のモデムでサポートされている AT コマンドセットを選択 アクセス および使用する方法について説明します 2003 Hewlett-Packard Development Company, L.P. MicrosoftおよびWindowsは 米国 Microsoft

More information

CLUSTERPRO MC ProcessSaver 2.1 for Windows 構築ガイド 2016(Mar) NEC Corporation はじめに 責任範囲 適用範囲 概要 事前準備 クラスタ設定

CLUSTERPRO MC ProcessSaver 2.1 for Windows 構築ガイド 2016(Mar) NEC Corporation はじめに 責任範囲 適用範囲 概要 事前準備 クラスタ設定 CLUSTERPRO MC ProcessSaver 2.1 for Windows 構築ガイド 2016(Mar) NEC Corporation はじめに 責任範囲 適用範囲 概要 事前準備 クラスタ設定 改版履歴 版数 改版 内容 1.0 2015.03 新規作成 2.0 2016.03 CLUSTERPRO 対応バージョン修正 i はしがき 本書では CLUSTERPRO MC ProcessSaver

More information

memo

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

More information

Microsoft Word - ESX_Restore_R15.docx

Microsoft Word - ESX_Restore_R15.docx 解決!! 画面でわかる簡単ガイド : 仮想環境データ保護 (VMWARE ESX)~ 仮想マシン 丸ごと 復旧手順 ~ 解決!! 画面でわかる簡単ガイド CA ARCserve Backup r15 仮想環境データ保護 (VMware ESX) ~ 仮想マシン 丸ごと 復旧手順 ~ 2011 年 4 月 CA Technologies 1 目次 はじめに... 3 仮想マシンの復旧... 5 まとめ...

More information

書式に示すように表示したい文字列をダブルクォーテーション (") の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf(" 情報処理基礎 "); printf("c 言語の練習 "); printf

書式に示すように表示したい文字列をダブルクォーテーション () の間に書けば良い ダブルクォーテーションで囲まれた文字列は 文字列リテラル と呼ばれる プログラム中では以下のように用いる プログラム例 1 printf( 情報処理基礎 ); printf(c 言語の練習 ); printf 情報処理基礎 C 言語についてプログラミング言語は 1950 年以前の機械語 アセンブリ言語 ( アセンブラ ) の開発を始めとして 現在までに非常に多くの言語が開発 発表された 情報処理基礎で習う C 言語は 1972 年にアメリカの AT&T ベル研究所でオペレーションシステムである UNIX を作成するために開発された C 言語は現在使われている多数のプログラミング言語に大きな影響を与えている

More information

CLUSTERPRO MC ProcessSaver 1.0 for Windows 構築ガイド 2012(Sep) NEC Corporation はじめに責任範囲適用範囲概要事前準備クラスタ設定

CLUSTERPRO MC ProcessSaver 1.0 for Windows 構築ガイド 2012(Sep) NEC Corporation はじめに責任範囲適用範囲概要事前準備クラスタ設定 CLUSTERPRO MC ProcessSaver 1.0 for Windows 構築ガイド 2012(Sep) NEC Corporation はじめに責任範囲適用範囲概要事前準備クラスタ設定 改版履歴 版数改版内容 1.0 2012.09 新規作成 i はしがき 本書では CLUSTERPRO MC ProcessSaver 1.0 for Windows ( 以後 ProcessSaver

More information