CRC演算設定時の期待値出力先の指定【RL78/G14 (R5F104JE)使用】

まず、下記簡単な経緯になります。

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+設定時およびライブラリ利用時に、気を付けて設定すべき項目はあるか?

上記以外でも、懸念される項目等ありましたら併せてご教示いただけますと幸いです。

 

以上、よろしくお願い致します。

Parents
  • NoMay様、fujita nozomu様

    お世話になっております。お二方のおかげで、課題を一段階ブレークスルーできたように思います。
    こちらの拙い情報からご推察いただきながらも、適宜ご助言いただきまして感謝申し上げます。ありがとうございます。

    あれからお二方にご教示いただいた内容を確認し、またマニュアル類も関連しそうなキーワードで改めて確認しました。
    以下、拙文ですが中途報告させていただきます。

    ① far領域指定ですが、無事に目的アドレス値を参照できました。(探していたCRC期待値でした)
       (X) *(unsigned short *)0x0000FFFCUL
       (O) *(unsigned short __far *)0x0000FFFCUL

    ② デバッガによるダウンロードは実施しておりませんでした。
      いずれ折を見て確認・勉強致します。
     (実はまだ一度もデバッグエミュレーションをしたことがないので、お恥ずかしい限りです。。。)

    ③ CRC演算における設定/処理上の留意事項が想像以上に多いことが今回わかりまして、
      大変参考になりました。(みなさんも色々と新しいことに試行錯誤されてるのが励みです。。。)
      今後も実装を続けながら、少しずつ周辺のコーディングも固めていけるように精進します。

    ④ 個人的に悲しい文言をマニュアル中に見つけてしまったので、共有させていただきます。
      セルフテストライブラリのマニュアル
      "RL78 MCUのためのIEC60730/60335セルフテスト・ライブラリ(R01AN1062JJ0130), Rev.1.30, p.28"中段

      『本ライブラリで実施しているソフトウェアCRC(stl_RL78_sw_crc_asm関数)の基準CRC値は、
       CubeSuite+で生成できません。ソフトウェアCRCのアセンブラ・コードを参考にして、
       ユーザ自身で準備する必要があります。』

      このあたりの記述はこの資料でしか見付けられなかったため、やはり時間をかけて様々な資料に
      目を通していくしかないなぁ、と調査不足の自戒も込めて思い知りました。
      大変お騒がせいたしました。
      
    //
    今回、高速CRC演算をライブラリ関数(stl_RL78_sw_crc_asm)利用で解決したかったのですが、
    CS+の設定で自動的に吐き出し/埋め込みされる期待値と互換性がないということがわかりました。(恐らく)

    汎用CRC設定で試しに確認したところ、上記①アドレス中の値とライブラリ関数(stl_RL78_peripheral_crc)利用で
    算出された計算値がピッタリ合いまして、やはりチョロっと書いてあった内容の通りなのか…とやや落胆しております。
    少なくとも、汎用CRCに関しては特段手を加えずにライブラリ利用可能な事までは結果的に理解が深まったのが幸いです。

    高速CRC実装の実験(自力の埋め込み方法含めて)は今後も合間を見て継続していく予定ですので、
    色々と至らない部分もございますが、またお目にかかる機会がございましたらご教示いただけますと幸いです。

    以上、長文失礼致しました。

Reply
  • NoMay様、fujita nozomu様

    お世話になっております。お二方のおかげで、課題を一段階ブレークスルーできたように思います。
    こちらの拙い情報からご推察いただきながらも、適宜ご助言いただきまして感謝申し上げます。ありがとうございます。

    あれからお二方にご教示いただいた内容を確認し、またマニュアル類も関連しそうなキーワードで改めて確認しました。
    以下、拙文ですが中途報告させていただきます。

    ① far領域指定ですが、無事に目的アドレス値を参照できました。(探していたCRC期待値でした)
       (X) *(unsigned short *)0x0000FFFCUL
       (O) *(unsigned short __far *)0x0000FFFCUL

    ② デバッガによるダウンロードは実施しておりませんでした。
      いずれ折を見て確認・勉強致します。
     (実はまだ一度もデバッグエミュレーションをしたことがないので、お恥ずかしい限りです。。。)

    ③ CRC演算における設定/処理上の留意事項が想像以上に多いことが今回わかりまして、
      大変参考になりました。(みなさんも色々と新しいことに試行錯誤されてるのが励みです。。。)
      今後も実装を続けながら、少しずつ周辺のコーディングも固めていけるように精進します。

    ④ 個人的に悲しい文言をマニュアル中に見つけてしまったので、共有させていただきます。
      セルフテストライブラリのマニュアル
      "RL78 MCUのためのIEC60730/60335セルフテスト・ライブラリ(R01AN1062JJ0130), Rev.1.30, p.28"中段

      『本ライブラリで実施しているソフトウェアCRC(stl_RL78_sw_crc_asm関数)の基準CRC値は、
       CubeSuite+で生成できません。ソフトウェアCRCのアセンブラ・コードを参考にして、
       ユーザ自身で準備する必要があります。』

      このあたりの記述はこの資料でしか見付けられなかったため、やはり時間をかけて様々な資料に
      目を通していくしかないなぁ、と調査不足の自戒も込めて思い知りました。
      大変お騒がせいたしました。
      
    //
    今回、高速CRC演算をライブラリ関数(stl_RL78_sw_crc_asm)利用で解決したかったのですが、
    CS+の設定で自動的に吐き出し/埋め込みされる期待値と互換性がないということがわかりました。(恐らく)

    汎用CRC設定で試しに確認したところ、上記①アドレス中の値とライブラリ関数(stl_RL78_peripheral_crc)利用で
    算出された計算値がピッタリ合いまして、やはりチョロっと書いてあった内容の通りなのか…とやや落胆しております。
    少なくとも、汎用CRCに関しては特段手を加えずにライブラリ利用可能な事までは結果的に理解が深まったのが幸いです。

    高速CRC実装の実験(自力の埋め込み方法含めて)は今後も合間を見て継続していく予定ですので、
    色々と至らない部分もございますが、またお目にかかる機会がございましたらご教示いただけますと幸いです。

    以上、長文失礼致しました。

Children
No Data