まず、下記簡単な経緯になります。
CS+ for CA, CX (V4.04.00)にて、安全機能のひとつのCRCを実装したく調査・実験を繰り返しておりました。
CRC計算には、ルネサス様から提供されているセルフテストライブラリ(Ver1.30)を使用しております。
( https://www.renesas.com/jp/ja/software/D6003884.html )
その中で、CRC演算を下図のように設定しているのですが、肝心の期待値をうまく参照することができずエラーとなりました。
期待値は【アドレス0x0FFFCに2byte】で、【コンパイル/HEX生成時に計算・格納される】という認識でしたが、
ダミーデータを付加して数十パターンほど試しましたが、当該アドレスの値はポインタ参照しても'0x0000'のままでした。
例:アドレス0x0FFFCの2byteを参照したいとき、【 *(unsigned short *)0x0FFFC 】として参照しています。
これまでにもCRC演算設定に関してはご質問されている方がいたため、自身で検索・対応できる範囲は参考にしてきました。(オンチップデバッグ無効など)
ここ数日はコードデータそのものを漁っていたのですが、ふとアドレス0x0FE20に、ライブラリ処理より算出されるCRC計算値と同じ値があることを見つけました。
(こちらも数十パターンで確認済みです。)
さて、前置きが長くなりましたが、下記3点について何卒ご教示ください。
① アドレス0x0FE20の値は、想定している期待値で間違いないのか?もしくは別モノか?
② アドレスのポインタ参照時に、そもそも勘違い/誤りがないか?(オフセットのようなものが働く?)
③ CS+設定時およびライブラリ利用時に、気を付けて設定すべき項目はあるか?
上記以外でも、懸念される項目等ありましたら併せてご教示いただけますと幸いです。
以上、よろしくお願い致します。
Saladbarさん、こんにちは。NoMaYです。> 高速CRC演算をライブラリ関数(stl_RL78_sw_crc_asm)利用で解決したかったのですが、stl_RL78_sw_crc_asmはハードウェアCRC演算器を内蔵していないマイコン向けのライブラリかと思うのです。RL78/G14は、ハードウェアCRC演算器(ハードウェア高速CRCとハードウェア汎用CRCが可能)を内蔵していますので、この目的自体が何かおかしいというか矛盾しているというか、そんな印象がします。RL78/G14では、以下の組み合わせではないでしょうか?(1) ハードウェアCRC演算器直接操作で高速CRCとする(CA78K0Rで高速CRC CRC-16-CCITTとして期待値を生成可能)(2) ハードウェアCRC演算器直接操作で汎用CRCとする(CA78K0Rで汎用CRC(ビット並び反転のCRC-16-CCITT)として期待値を生成可能)(3) ハードウェアCRC演算器ライブラリ(stl_RL78_peripheral_crc)操作で汎用CRCとする(CA78K0Rで汎用CRC(ビット並び反転のCRC-16-CCITT)として期待値を生成可能)なお、CA78K0Rで生成可能なSENT準拠による高速CRCに関しては、CS+のヘルプにはデバイスのユーザーズ・マニュアルに記載されていると書かれているものの、RL78/G14のハードウェア・マニュアルの高速CRCには実際にはSENTに関する記載が無くて、何なのか不明です。)[追記]ハードウェアCRC演算器を内蔵していないマイコンで、以下となるのではないでしょうか。(a) ソフトウェアCRC演算ライブラリ(stl_RL78_sw_crc)でCRCを求める(CA78K0Rでは期待値の生成不可)
NoMay様 お世話になっております。 先に結論を申し上げますと、私の考え違いが発端でした。 無事に高速CRC処理の実装/確認ができました。。。ありがとうございました。 上記(1)の方法で、高速CRC演算のコードをフローチャートの通り実装しました。 (tetnoguchi様の投稿も一部参考にしております。http://japan.renesasrulz.com/cafe_rene/f/forum18/1605/rl78-g13-crc/7037#7037) あれこれ調べるうちに、自分に認知バイアスが掛かってあらぬ方向へ迷走していました。 振り返ってみると、躓いていたのはfar指定なし状態での期待値参照だったことになります。 CRC演算器あり/なしという選択肢が出たときには、今回の件が少しでも生きてくるのではないかと思います。 最後に、重ねて厚く御礼申し上げます。 これにて一旦クローズとさせていただきます。