78K0のフラッシュライブラリについて

お世話になっております。

マサと申します。

かなり昔にPM+で作ったプロジェクトがありまして、それを元に治具を作ろうと考えています。

PM+試したいのですが環境がもう無いのでCS+で編集しようと思い、

https://www.renesas.com/us/ja/software-tool/migration-pmplus-to-csplus

上記URLのようにCS+で読み込ませてコンパイルすると、フラッシュライブラリのコードでエラーが出てしまいます。

(E) E2407 SRC\self_flash.asm(47) : RA78K0 error E2407: Undefined symbol reference 'PFCMD' self_flash.asm

~エラー該当箇所のコードの一部~

_FlashStart:
MOV PFCMD, #0A5H ; PFCMD register control
MOV FLPMC, #001H ; FLPMC register control ( set value )
MOV FLPMC, #0FEH ; FLPMC register control ( inverted set value )
MOV FLPMC, #001H ; FLPMC register control ( set value )
RET

必要ファイルはすべて入っているのですが、どうしてエラーがでるのか調べても記載がありませんでした。

最悪フラッシュ制御を行わずにすればよいのですが、どうしてか気になりまして投稿させていただきました。

どなたかわかる方いらっしゃるでしょうか?

補足:

PM+で確実にコンパイルが通って、デバッグした実績があるものを使用しています。

当時の環境は

PM+ Ver6.3,コンパイラは確かCA78K0Ver1.1だったかと記憶しています。

CS+の環境は

CS+ for CC Ver4.02、CA78K0Ver1.3を使用しています。

  • マサさん、こんにちは。NoMaYと申します。#もしかしたら2度目かも知れませんが、、、

    PFCMDとかFLPMCとか懐かしいです。とっさに気になったのは、ルネサスさん社内でのデバイスファイルの作成ミスで、新しいバージョンのデバイスファイル内からPFCMDの定義が消失してしまったとか?というものです。

    私の場合、今のこの状況ですと、使用しているデバイスファイルをCS+のインストールフォルダ内から探して、エディタで開いて、PFCMDの文字列を検索してヒットするか試してみます。同時に、念の為、FLPMCの文字列に対しても同じことをします。

    ちなみにデバイスは何でしょう?また、今でもそのデバイスのハードウェアマニュアルでPFCMDが公開されていますでしょうか?あるいは、今でもPFCMDという名前のままでしょうか?(デバイスの仕様変更でデバイスファイルからPFCMDの定義を抜かなければならなかった、という事情の可能性も無くは無いかも知れない、と思ったのです。)

  • NoMaY様

    お返事ありがとうございます。(以前投稿した際にご回答をいただいたような気がします)

    >PFCMDの文字列を検索してヒットするか試してみます。

    >同時に、念の為、FLPMCの文字列に対しても同じことをします。

    これは盲点でした。ありがとうございます。

    早速CS+のデバイスファイルを見たところ、PFCMDもFLPMCも存在はしていました。

    なので、定義が無いわけではないように思います。

    後、使用しているデバイスは78K0/KC2-Lの78F0583です。

     

    一応、78Kx/Kx2-Lのハードウェアマニュアルの25章にはFPCTL と、その0bit目がセルフフラッシュへの切り替えであると記載がありました。

    PFCMDがその0bit目に当たる定義なのかは不明でしたが、予想するにデバイスファイル内でPFCMDがFPCTLの0bit目を1にする定義になっているのではと考えています。

    (デバイスファイルをエディタで開くと文字化けしていたので、そこまで確認することはできませんでしが・・・)

  • マサさん、こんにちは。NoMaYです。

    78K0/Kx2-LのハードウェアマニュアルのPDFで検索してみましたが、マサさんが試されたデバイスファイルの状況とは異なって、PFCMDもFLPMCも検索にヒットしないですね、、、ひょっとしたら、(少なくとも現在では) 一般ユーザには非公開、となっているのではないでしょうか?フラッシュセルフプログラミングライブラリが提供されるようになって、そちらを使うことをルネサスとしては(というか旧NEC時代に既に?)標準のやり方とするのでPFCMDもFLPMCも一般ユーザには公開しない、という方針に変更されていた、ということではないでしょうか?

    その方針変更に従うようにデバイスファイルの内容も変更されていて、そのせいでアセンブル出来なくなっているのではないでしょうか、、、(ただ、FLPMCがアセンブルエラーにならないのは、諸般の事情もしくはポカミス、かも知れません、、、)

    ですので、この場合、私なら、一応ルネサスさんに問い合わせると共に、過去のHEXファイルを逆アセンブルするなどして、PFCMDのアドレスを調べ、EQUかsetで定義して、エラーを回避するかな、と思いました。

    あと、PFCMDは、FPCTLの0ビット目では無い、です。自分の記憶とマサさんのアセンブラコードを照らし合わせて思い起こすと、PFCMDは、FLPMC(あるいはフラッシュセルフプログラミング関係のレジスタ全般)への書き込みを許可するかどうかを制御する単独の8ビットレジスタの筈です。FLPMC自体に既に特殊な手順でなければ書き込めないようになっているのに加えて、さらにPFCMDによる書き込みガードが存在している、ということだったような記憶があります。(あくまで記憶ですけれど、、、)

  • NoMaY様

    お返事ありがとうございます。

    >フラッシュセルフプログラミングライブラリが提供されるようになって、そちらを使うことをルネサスとしては(というか旧NEC時代に既に?)標準のやり方とするのでPFCMDもFLPMCも一般ユーザには公開しない、という方針に変更されていた、ということではないでしょうか?

    なるほど、直接いじることはできなくなって、CS+ではライブラリ使用をするように変更されている可能性が高いかもなのですね。(NoMaY様へのリプが言葉足らずになっていました。申し訳ありません。FLPMCに関してもエラーが出ています。)

    >あと、PFCMDは、FPCTLの0ビット目では無い

    PFCMD、FLPMCは特殊レジスタのことを指しているのですね。てっきりbitの定義が何かだ思い込んでいました。

    今の事象に関してルネサスさんに問い合わせを掛けてみます。後はフラッシュライブラリを使用しないように改造が可能なのでそれをするか、御提案いただいた方法で回避しようと思います。

  • >あと、PFCMDは、FPCTLの0ビット目では無い

    自分でmov命令を載せているのにbitの定義とか意味不明なこと書いてますね

    申し訳ないです。