モデルベース開発

事例

【XCP】最小構成のMBD事例 第2章 その168【XCP Basic㉒】

ALLOC_ODT_ENTRYは物理層の都合やODTのフォーマットによる制限がある。 CANの場合だとデータフィールド8byteが制限。 タイムスタンプ等が入ることで計測データを格納する範囲が少なくなる。 ALLOC_ODT_ENTRYを複数回投げてみた。 リソースが枯渇するまで生成は可能。
事例

【XCP】最小構成のMBD事例 第2章 その167【XCP Basic㉑】

ALLOC_ODTを送信してみた。 ODT1個あたり4byteの管理領域のリソース割り当てがされる。 試しに5個ずつODTを生成してみた。 20個のODT生成時にエラー。 エラー理由はメモリ不足。 1ODTあたり8byteの送信バッファも必要なのでそれも含めてメモリ不足。 この点含めてリソース管理が必要。
事例

【XCP】最小構成のMBD事例 第2章 その166【XCP Basic⑳】

FREE_DAQコマンドを送信。 ECU内部のDAQ list構造を真っ新にするコマンド。 "とりあえず"一番最初に投げらえる。 ALLOC_DAQコマンドを送信。 生成するDAQ listの数を指定するコマンド。 XCP Basicの場合、DAQ list毎に6byte消費。
事例

【XCP】最小構成のMBD事例 第2章 その165【XCP Basic⑲】

XCPパケット送受信処理を関数化してみた。 CAN送信は従来通り。 CAN受信でいろいろ判定を追加 タイムアウト追加。 1秒タイムアウト。 CANID判定追加 PID判定追加。 0xFE(エラー)か0xFF(正常)以外はレスポンスとして扱わない。 レスポンスのタイミングでDAQパケットが来ても無視できる。
事例

【XCP】最小構成のMBD事例 第2章 その164【XCP Basic⑱】

メモリアクセス系コマンド以外のメモリアクセスとして(Data AcQuisition)がある。 DAQは過去記事で数回にわたって説明しているのでそちらを参照。 必要なコマンドをそこそこあるので、一個ずつ試していく。 尚、XCP BasicはDynamic DAQが実装されている。 Static DAQは未実装。
事例

【XCP】最小構成のMBD事例 第2章 その163【XCP Basic⑰】

なんとSHORT_UPLOAD時にMTAも更新される仕様になっていた。 よって、続けて読み出す場合はSET_MTA無しでUPLOADを実施すればOK。 この仕様を利用してSHROT_UPLOAD→UPLOAD×n回とすると、効率的なメモリダンプが実現できる。 メモリアクセス系コマンドはこれで動作確認OKとなる。
事例

【XCP】最小構成のMBD事例 第2章 その162【XCP Basic⑯】

UPLOAD系コマンドの実験開始。 UPLOADコマンドが基本形のコマンドでその派生形としてSHORT_UPLOADがあるが、SHORT_UPLOADのとある挙動を確認するためにSHORT_UPLOADから実施。 SHORT_UPLOADでDOWNLOADで書き込んだ値が読めた。 よって、両コマンド共に動作OKとなる。
事例

【XCP】最小構成のMBD事例 第2章 その161【XCP Basic⑮】

DOWNLOADコマンドを実施。 正常応答あり。 実際に書き込まれたかはUPLOAD系コマンド実験時に確認予定。 DOWNLOAD_MAXコマンド実施 MTAは読み書き時にそのサイズ分参照アドレスが後方にズレる。 C言語のポインタ的な仕様。 MAX_CTO(今回の場合は8)-1分のサイズが無条件に書き込みサイズになる。
事例

【XCP】最小構成のMBD事例 第2章 その160【XCP Basic⑭】

XCP Basicがサポートしているメモリアクセス系コマンドを列挙。 SET_MTA。 DOWNLOAD。 DOWNLOAD_MAX。 SHORT_UPLOAD。 UPLOAD。 Python-CAN初期化とCONNECTコマンドを発行してからSET_MTAコマンド発行。 正常応答あり。
事例

【XCP】最小構成のMBD事例 第2章 その159【XCP Basic⑬】

xcp_cfg.hについかしたXCP_ENABLE_MEM_ACCESS_BY_APPLのdefine定義について説明。 XCP経由のメモリアクセスが直接アクセスからフック関数を経由する状態に切り替わる。 ecu.cの修正。 アクセス用の配列を定義。 メモリアクセス用フック関数の定義と実装。