RFPで書かないと消える可能性あります?

いつもお世話になります、NAKAといいます。

先日、社内で頼まれちょっとした実験機器をRL78/I1Eを使ったボードで作りましたが、「動かなくなっちゃた」とのことで、手元に戻ってきました。確かに"うん"とも”すん”とも動かないので、ハードを壊したのかなと思って戻ったボードを確認しましたがどこも悪くなさそうです。そこでもう一度プログラムを書き直したら、なにごとも無く動きます。よくよく考えてみると、この基板はRFPで書き込まず、CS+のデバッグでデータをDLしただけの状態だったことを思い出しました。RFPでフラッシュメモリに書き込まないと、プログラムが消えてしまう可能性もあるのでしょうか?今までは消えたことが無かったのであまり気にしてませんでした。基板を貸した先でどんな扱いを受けたかが不明ですが、社内他部署で書き直したとは思えません。よろしくお願いいたします。

Parents
  • もしかして、0xC0からの、安全機能のプロテクトswはどうしてますか?社内担当者が不用意にデバッガを接続して、パスワードエラーで、自動消去とかおこなわせていませんか?RLはプログラムの読み取りに対する、プロテクト機能が強力ですから・・・・
Reply
  • もしかして、0xC0からの、安全機能のプロテクトswはどうしてますか?社内担当者が不用意にデバッガを接続して、パスワードエラーで、自動消去とかおこなわせていませんか?RLはプログラムの読み取りに対する、プロテクト機能が強力ですから・・・・
Children
  • みなさん心配いただきありがとうございます。

    引き渡した先でデバッガーを接続した可能性は低いと思います。きっとぼくのプログラムにLOOPから抜けられない箇所があるのだと思います。以前チョコさまにアドバイスしていただいたSPIの送受信完了待ちも、割り込みによるオーバーヘッド分の速度を稼ぐため、フラグを確認するポーリングにしてありますし、
    SIO00 = data_out;
    CSIIF00 = 0;
    while(!CSIIF00){__nop();} //送信完了状態になるまで待つ
    みたいに、なんかwhileで回って抜け出せないとこがあるような気がします。もう一回見直してタイムアウト処理を追加しておきたいと思います。
    ★もう一点、甘えさせていただいてよろしいでしょうか?
    ウォッチドッグでRESETされた後って、初期化していない変数(RAM)って消えちゃうのでしょうか?(最適化されないようにvolatile宣言しておきます。)ちょっと実験したら大丈夫そうなのですが......この変数をRESET後(RESET前の値を)に使うのは危険でしょうか?

    P.S.
    先週末は良いこともありましたが、屋上家庭菜園でさくらんぼの受粉作業で花粉症が悪化したり、先年の秋、TVの深夜番組でフルーツソムリエなる人が「今まで食べた中でもっともおいしかったフルーツは?」の問いかけに「貴陽というソフトボール大のプラムです。」といっていたので、園芸店を探し回り¥2,480-もはたいて苗木をかったのに、葉芽も花芽も出ずにこの春、枯れました.........(涙)
  • NAKAさん
    RL78の場合、リセットで値が変らないのが明文化(保証)されているのは、STOPモード中だけみたいですね。(ライトアクセスがないから?)
    UM上、スタックポイントが不定と書かれているので、リセット時にどこのアドレスが破壊されていても文句は言えないのかな。
    といいつつ、実機で見る限りSP値はいつも同じだったりしますけど。。。
    あとライトアクセス中にWDTリセットが入ると、ライトされているアドレスのRAM値は不定値になります。(WDTは低速OCO動作なのでメインクロックと非同期だから)

    ということで、アンオフィシャルな見解としては、
    WDTの周期を確認して、WDTリセットが絶対に入らないタイミングでRAMアクセスしている限りはRAMは保持されます^^

    RESFを見て、パワーオンリセット時は初期化して、それ以外のリセット発生時は初期化しないようにすれば、いいと思います。
    乱数的にRAM値を使いたいなら未初期化のRAMを使ってもいいと思いますけど、ふつープログラムは最初に「何か」値を設定しますよね?!

    PS
    自分の家の庭で果物とか野菜がとれると楽しいですよねー。
    うちは日当たりが悪いので、イチゴ狩りとかブルーベリー狩りに出かけてます^^

  • Kirinさん

    いつもありがとうございます。ちょっとごちゃごちゃカッコ悪いけど、複数個変数に書き込むことにして、多数決でその値を使うなんてことすればなんとかなりそうですね!ありがとございました。

    P.S.
    ブルーベリーも育ててます。最初は家族も喜んで食べますが、毎日食べると飽きてきて、タッパーで凍らせ時々シャーベット!それまた飽きてそのままになり、去年の分を捨ててしまうことになります。いい年になると土いじりがしたくなりますよね!昔、後輩は清流でイワナ釣る時、メタリカとかドッケンなどヘビーメタルをウォークマンで聞きながらという変態がいましたが、現在僕はBABY-METALを爆音で聞きながら、家庭園芸をするのが楽しい変態DEATH!
  • わわいです
    #完全に雑談モード、返答は不要ww

    (なんかわからんけど)こうしたら動きました!、とか
    (なんかわからんけど)書き込みなおしたら動きました!、とか
    それでいいのか?ホンマにそれでいいのか?それ、仕事でやってるんちゃうんか?、もっと他にやることあるやろ、ウヤムヤで済ませてどーすんねん、、
    ともにょもにょしまくるんですがどーしてやろーかねー。。。
  • 安全装置ははずしてますか?reset後に未初期化RAMリードアクセスで、エラーなんて、かっこ悪いですよ。
  • kirinさま
    >スタックポイントが不定と書かれているので、リセット時にどこのアドレスが
    破壊されていても文句言えないのかな。
    といいつつ、実機で見る限りSP値はいつも同じだったりしますけど。。。

    これってICE接続にての確認ですか?
    うるおぼえですみません。
    確かICE自身自分が初期動作するときレジスタクリアと、
    SPを仮の値0xfe20で、固定してたと思いますが?
    ちがいましたっけ?
  • Kcdさん
    デバッガを使うとエミュレーターの初期値に変更されちゃいますけど、
    チップ単体動作時にUARTなどで内部の値を外部に吐き出させると本当のリセット値が分かります。
    RL78/G13での正解は、SP=0xFFC00でした。
    CPUコアなどで初期値に違いがあるかもしれませんけどねー。
  • kcdさま
    >安全装置ははずしてますか?reset後に未初期化RAMリードアクセスで、エラーなんて、かっこ悪いですよ。
    ⇒すみません飲み込みが悪いのでちょっと理解できてません。安全装置とは?最適化のことでしょうか?すこしヒントをいただけたら嬉しいです。

    Kirinさま
    マニュアルにウォッチドッグのRESET後はRAMは不定と明記されてましたね!すみませんマニュアルも読まずすぐ聞いちゃいました。RTCのカレンダーがRESETで狂っちゃうのがいやだなぁと思って(初期設定で初期値設定しないで、パソコンで時間を通信で設定する仕組みにしていたので)RAMの値が保持されていたら、ウォッチドッグのRESETが発生する75%の時間で発生する割り込みのなかで、カレンダー情報を読み込んでRAMに書いて起き、再スタートする場合に再度読み込んで設定することで、再起動分の時間は狂いますが目安のカレンダーとしては使えるかなと思ってました。SDカードがついてますので、こちらの適当なブロックに書いておくことにします。RXのE2-フラッシュみたいなメモリが付いていればいいのに......。
  • チョコです。
    "安全装置"とは安全機能の中の悪名高き"RAMパリティ・エラー検出機能"のことでしょう。
    ディフォルトでONなので,初期化してないRAMをリードすると,パリティ・エラーを検出して
    リセットがかかります。(第27章を参照してください。)
    これを避けるには,RAMパリティ・エラー検出機能を停止した状態で,RAMを読み出し,
    同じ値を書き戻す処理をやれば,パリティは正しくなるので,RAMパリティ・エラー検出を
    許可しても,その領域をリードしてもリセットしなくなります。
  • チョコ先生

    ありがとうございます。

    データシート確認しました。全く気にしたことのない機能でした。勉強になりました。