バックナンバーはこちら。
https://www.simulationroom999.com/blog/model-based-of-minimum-2-backnumber/
はじめに
前回はAUTOSAR-XCPのCanIfに相当するCAN-FD対応修正部分の変更について。
実際にはすでにCAN-FD対応済みになっていたので、
CAN-FDならではの部分を説明した。
まだXCPに関連する部分の修正が残っているので、この部分を修正&確認する。
登場人物
博識フクロウのフクさん
イラスト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
AUTOSAR-XCPのパケット長変更
前回のでAUTOSAR-XCPのCAN-FD対応はOKなか。
いや、まだパケット長の調整が残ってる。
そういえば、MAX_CTOとかMAX_DTOがどうのとか言ってたね。
MAX_CTOとMAX_DTOって何だっけ?
すでに何回か説明してる気はするが・・・。
MAX_CTOとMAX_DTO
まず、CTOとDTOを復習しよう。
と言っても、ここで説明してるんだけどね。
そういや、Command Transfer ObjectとData Transfer Objectってのがあったね。
で、これらのObjectだが、論理上の最大値と物理層都合の最大値がある。
論理上?物理都合?
まず論理上の最大値は
CTOが255byte、DTOが65535byteってことになっている。
あー、物理層のことは一旦無視して、XCPというプロトコルとしたの最大値ってことね。
そして物理層都合の最大値だが、
CANの場合はCTO,DTOともに8byteになる。
それはCANのデータフィールドの最大値が8byteだからってことか。
そうそう。
で、CAN-FDのデータフィールドの最大は64byteなわけだが、
論理上の最大値を加味した際の適切なMAX_CTOとMAX_DTOは何になるだろうか?
えーっと、
CAN-FDのデータフィールドは64byte。
CTOでもDTOでも論理上の最大値より小さいから、
物理層をCAN-FDとした場合の妥当なMAX_CTOとMAX_DTOは共に64byteってことになるのか。
正解だ。
MAX_CTOとMAX_DTOはどこで修正するのか?
で、そのMAX_CTOとMAX_DTOを書き換えるわけだが、
該当する修正箇所はXcp_cfg.hの中にある、
MAX_CTOとMAX_DTOになる。
あー、define定義されてたやつだね。
現状では8byteになっているはずだから、これを64byteにすればOK。
それだけか?!
それだけ。
じゃ、修正してしまおう。
念のためCANFD_SUPPORTで#ifdefして切り分けるようにしておこう。
元々のコード
/*
XCP_MAX_DTO : [Default:CAN = 8, IP = 255]
XCP_MAX_CTO : [Default:CAN = 8, IP = 255]
Define the maximum size of a data / control packet.This will also
directly affect memory consumptions for XCP since the code will
always allocate XCP_MAX_DTO * XCP_MAX_RXTX_QUEUE bytes for
data buffers.
*/
#define XCP_MAX_DTO 8
#define XCP_MAX_CTO 8
↓修正
/*
XCP_MAX_DTO : [Default:CAN = 8, IP = 255]
XCP_MAX_CTO : [Default:CAN = 8, IP = 255]
Define the maximum size of a data / control packet.This will also
directly affect memory consumptions for XCP since the code will
always allocate XCP_MAX_DTO * XCP_MAX_RXTX_QUEUE bytes for
data buffers.
*/
#ifdef CANFD_SUPPORT
#define XCP_MAX_DTO 64
#define XCP_MAX_CTO 64
#else
#define XCP_MAX_DTO 8
#define XCP_MAX_CTO 8
#endif
#endif /* XCP_CFG_H_ */
XCP側の修正はこれだけOKっぽいかな。
まとめ
まとめだよ。
- AUTOSAR-XCPのパケット長変更を実施。
- MAX_CTOとMAX_DTOを8から64に変更すればOK。
- CTO、DTOについては過去記事で復習。
- 念のためCANFD_SUPPORTで#ifdefで切り分けられるようにしておく。
バックナンバーはこちら。
コメント