例えば、RL78G14_80pin でCS+でソフトを作るとします。
ユーザーが使用できるRAM領域に対し、
1バイトづつ0x55を書いて0x55かどうか確認。
1バイトづつ0xAAを書いて0xAAかどうか確認。
を行いたいです。
自動的にスタートアップ関数で行われれているのでしょうか?
ユーザー側で記入する場合、どのように書けばよいか、ご存知の方教えてください。
よろしくお願いします。
こんにちは
スタートアップルーチンでRAM領域セクションを初期化(ゼロクリア)する説明が以下に掲載されています。
CS+オンラインヘルプ 8.2.6 RAM領域セクションの初期化処理
こちらを参考にしてみてはどうでしょう。ただし、こちらはCC-RLコンパイラの説明です。
RL78、78Kファミリ用Cコンパイラの場合は以下のマニュアルに同様の説明があるようです。
CubeSuite+ V2.01.00 統合開発環境 ユーザーズマニュアル RL78,78K0R コーディング編
「2. 5. 3 RAM の初期化を行う」
こんにちは、ega258さん。 RL78のスタートアップ関数は、最初に内蔵周辺機能の初期化をおこない、その後RAMに関しては初期値あり変数の初期化と初期値なし変数のクリアを行ってから、main関数を起動します。 従って、main関数起動後に実行させるプログラムとして、そのような処理を記述すればいいはずです。 ちなみに、RL78ではRAMチェックとして「安全機能として、IEC60730/60335 セルフテスト・ライブラリ」が公開されています。アプリケーションノートは以下のURLを参照してみてください。 www.renesas.com/.../r01an1062jj0120_rl78.pdf
ega258さん、CS+CC-RLにそんなのは無いですよ。
CS+CC-RLでプロジェクトを作成すると、プロジェクト・ツリーに以下のようなファイルが生成されます。
ここの"cstart.asm"が、じまさんが触れていたスタートアップルーチンです。
ここに、Cのプログラムを起動するための前処理が記述されています。
内蔵ハードウェアの初期化(hdwinit関数)を呼び出した後にでもメモリテストを入れてください。
(当然、アセンブラでの記述です。)
追伸
CC-RLのマニュアルを眺めていたら、675ページに「C 言語でのRAM 領域セクション初期化関数の例」
と言う内容がありました。これを参考にすれば,C記述でメモリテストはできそうです。
https://www.renesas.com/jp/ja/doc/products/tool/doc/013/r20ut3123jj0107-ccrl.pdf
私の応用ではほぼゼロ%で片づけられないです。 半導体の故障率はバスタブカーブを描きます。民生でも産業用でもスクリーニングをすると思いますが、納品時の故障率は10~100ppm程度でまだ初期不良領域と予想します。偶発故障期もゼロとはならず10~100FITが一般的と思います。摩耗期に入る時間は温度に大きく依存しますが一般的な使われ方で数十万時間以降になると思います。これらの数字は取引契約時に決めるはずで、数字の通りになるのが日本の品質の良さの象徴とされてます。以前に秋葉原のパーツショップ店頭買い部品を使って家電製品を製造販売しているメーカがTVで紹介されてましたが、これらの情報なしに設計製造販売していることとなり私には信じがたいことです。追加スクリーニングで初期故障が完全に取り除かれて、偶発故障期の故障率が10FITとして、製品のライフサイクルが2.7時間*365日*10年のおよそ1万時間、販売台数が1万台とすれば1台の故障が発生します。多くのお客様にとってセットの寿命は故障して使えなくなるまでなので、これ以上の使用時間も十分に可能性があり逆に設定時間内の故障してほしい部品も出てきます。セットが安全に故障してお客様に元を取ったと思っていただけるシステム設計が重要です。 これを怠ると後々に高額なコストとイメージダウンが発生してしまいます。私はあまり価値は無いと思いますが、起動時のRAMチェックが安全上重要と考えるなら実施は有効です。