バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回はUPLOADコマンドをやるかと見せ家変えてSHORT_UPLOADコマンドを実施。
SHORT_UPLOADの特殊な効果を確認するためあえて順番を入れ替えた。
というわけで今回はUPLOADコマンドを試すことになるが、
その時にSHORT_UPLOADの特殊な効果が見れる・・・はず。
登場人物
博識フクロウのフクさん
イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1
エンジニア歴8年の太郎くん
イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1
UPLOADコマンドの前のSET_MTA
なんか順番が入れ替わった感じになった気もするけど、
次こそはUPLOADコマンドだね。
そうね。
アドレス4から7byte分に対してDOWNLOAD_MAXで書き込んでるから
これをUPLOADで
0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB
が、読み出せればOKって感じか。
うん。
それでDOWNLOAD_MAXとUPLOADの両コマンドが正しい挙動をしている確認となるね。
じゃー、アドレス4にMTAを・・・。
SET_MTAはいらないよ。
移動させるために・・・。
SET_MTAはいらないよ。
SET_MTAを送信・・・。
だから要らないんだってば!!
要らねぇのかよ!!!!
なぜSET_MTAが不要なのか?
で、なんでSET_MTAが要らないの?
いまMTAがどこ参照してるかわからないよ?
前回SHORT_UPLOADでアドレス0を指定してサイズ4で読み出したじゃん?
そうね。
SHORT_UPLOADでアドレス0を指定した段階でMTAの参照アドレスも0になって、
4byte読み出しであったことで4byte分参照アドレスが後方へ移動して
現在のMTAはアドレス4を参照している状態になってる。
ほう!
SHORT_UPLOADでもMTAの参照アドレスが変わるのか!!
これが、前回から言ってたSHORT_UPLOADの特殊な効果ってやつか。
そうそう。
今回はアドレス4から7byte読み出しをするわけだけど、
すでにMTAはアドレス4にあるんで、SET_MTAを発行せずにそのままUPLOADコマンドを発行すればOKだ。
意外と便利な仕様になってるもんだねー。
UPLOADコマンドの発行
で、アドレス4からサイズ7byteの読み出しの電文は?
これだね。
0xF5, 0x07
随分短いね。
まぁコマンドIDとサイズだけだからそうなるのか。
じゃー、それを送ってみよう。
send_msg = can.Message(arbitration_id=1, extended_id=0, data=[0xF5, 0x07, ])
print('Send msg : %s' % send_msg)
bus.send( send_msg )
recv_msg = bus.recv(timeout=1)
print('Recv msg : %s' % recv_msg)
Send msg : Timestamp: 0.000000 ID: 0001 S DLC: 2 f5 07
Recv msg : Timestamp: 1635334304.114905 ID: 0002 S DLC: 8 ff 55 66 77 88 99 aa bb Channel: 1
XCP Basicのコンソール画面
-> UPLOAD size=7
<- 0xFF data=55 66 77 88 99 AA BB
おー!
ちゃんとDOWNLOAD_MAXで書き込んだデータが返ってきた!
この仕様を利用して、
SHORT_UPLOAD→UPLOAD×n回
みたいなことをして効率的なメモリダンプが出来たりするね。
なるほど。
メモリダンプか。
確かにこういう仕様の方が便利そうだね。
これで、メモリアクセス系コマンドは問題無く使えることがわかった。
XCPコマンドのログ
XCPのメモリアクセス系のログはJupyterNotebook形式でログを取ってある。
実際に動作させて実験したい人は使ってみると良いだろう。
まとめ
まとめだよ。
- なんとSHORT_UPLOAD時にMTAも更新される仕様になっていた。
- よって、続けて読み出す場合はSET_MTA無しでUPLOADを実施すればOK。
- この仕様を利用してSHROT_UPLOAD→UPLOAD×n回とすると、効率的なメモリダンプが実現できる。
- よって、続けて読み出す場合はSET_MTA無しでUPLOADを実施すればOK。
- メモリアクセス系コマンドはこれで動作確認OKとなる。
バックナンバーはこちら。
コメント