Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page

CS+3デバッグツールの不具合?

CS+3+CCモードRL78G14で
文字列データとして初期化したら
volatile unsigned char ParaName[127][12]={ 
  {"Hex/Dec   "}, // Para00
  {"TimeDiv   "}, // Para01 
  {"In1 Gain  "}, // Para02


実行後のデータが
「0x94,0x76,0x94,0x76........」
と、全く違うデータに書き替えれれた??????
そしてCPUは勝手にリセットされた
WDTは入ってるがどうやらWDTでリセットされたんじゃあなさそう

文字列アクセス関数
strcpy((char __near *__near)TexBuf ,(const char __near *__near)ParaName[Para_No] );
を実行した瞬間にリセットされる

もちろん、実行前のリセット状態では
「0x48,0x65,0x78,0x2f........」
と、正常値がちゃんと入ってる

strcpyの直前の行までは正常に実行される
恐らく、ParaName[Para_No]の中身がアスキーになってないのでエラーになったのであろう
でもイキナリのリセットなのか?エラーコードも返ってこないみたい?


尚、以上の不具合はRS+3デバッグツールのプロパティで
「トレース機能を有効にする」をONにした場合に発生します
又は
プログラム解析ツールのプロパティの「動的解析を有効にする」

トレース機能を無効にしてる場合には、不具合は無く正常に動作します
文字列データの内容を書き替えられる事も有りません
strcpy関数も正常に実行されます

私がやったトレース機能設定のどこかにミスが有ったのか?
CS+のバグなのか?
CS+のマニュアルを読み返してもそのような記載は見つかりません

  • lumiheartさん

    G14のUMに
    >注5. オンチップ・デバッキングのトレース機能使用時は,FA300H-FA6FFHの領域が使用禁止になります。
    とかって書いてあるので、変数領域がトレースに上書きされていそうですねー。
    コンパイラの設定でトレースで使用される領域をよける設定をしないとダメそうですよ。

  • In reply to Kirin:

    Kirinさん ご回答有難うございます

    エッ? 

    >G14のUMに >注5. オンチップ・デバッキングのトレース機能使用時は,FA300H-FA6FFHの領域が使用禁止になります。

    コレってハードマニュアル?

    一所懸命デバッグツールマニュアルを読んでました!

    なるほど!ハードマニュアルのメモリマップのページに書いてありました

    でも、しかし

    RAMエリアのF7F00h~FFEDFhまでほとんどフルに使ってました

    なので、結局トレース機能用の空きエリアが事実上無い!

    残念!使えません

    デバッグ開始時に

    「トレース機能用RAMエリアが有りません」

    とかのメッセージが出てもよさそうなもんですが....

  • In reply to lumiheart:

    トレース機能用の空きエリアが事実上無い!
    volatile unsigned char ParaName[127][12]={ 
      {"Hex/Dec   "}, // Para00
      {"TimeDiv   "}, // Para01 
      {"In1 Gain  "}, // Para02
    

    ↑をROM に移動するだけで1.5KBほど空くと思いますがRAMに置かなければならないデータなんでしょうか?

    ここでなくても

    RAMエリアのF7F00h~FFEDFh

    32KBもRAMあるなら1KBくらいひねり出すのもそう難しいことではないと思います。

  • In reply to fujita nozomu:

    fujitaさん ご回答有難う御座います

    >↑をROM に移動するだけで1.5KBほど空くと思いますがRAMに置かなければならないデータなんでしょうか?

    ROMに移動すべくマニュアルと格闘中!

    リンカのプロパティのどこかを弄れば良いのかな?

    と、思いきや見つからない

    やっと見つけたのが

    RL78 コンパイラ CC-RL ユーザーズマニュアル r20ut3123jj0101_ccrl.pdf

    457/803ページ セクション仕様

    これってフルマニュアルでセクション指定プログラム書かなきゃいけないの?

    蛇足

    RAMに書かれてる内容をよくよく見ればfontデータまである

    つまり、無駄にRAMを消費してる!

    デフォルトでROMに書かれてるもんだと思い込んでました

    因みに、マルツとルネサスのサンプルプログラムを改造して作ってます

    サンプルのコンパイラ系のプロパティはそのままでやってました

  • In reply to lumiheart:

    ROMに移動すべくマニュアルと格闘中!

    'const' つければROMに配置されませんか?

    const volatile unsigned char ParaName[127][12]={ 
      {"Hex/Dec   "}, // Para00
      {"TimeDiv   "}, // Para01 
      {"In1 Gain  "}, // Para02
    

    ROMに配置されるのであれば、'volatile' は意図が不明にはなりますが。

  • In reply to fujita nozomu:

    fujita さん ご回答有難うございます

    「const」 を付けたら出来ました

    でも、残念ながら根本的解決には至っておりません

    constを付けたらRAMエリアに割付ける順番が変わっただけでした

    順番が変わった事によりデバッグトレース機能が占有するエリアから外に出ましたが

    その代わりにそこにはLCD表示用Fontが割り当てられました

    偶然にもそのFontがデフォルトフォントじゃあ無かった

    つまり、運が良かっただけですね

    もし、デフォルトフォントがその場所に割り当てられてしまったら?

    立ち上がる事無くリセットされてたかも?

    まぁ、非デフォルトのフォントは全部消しちゃえばそれで良いのですが(かなり大きなサイズ)

    今後の為にもう少し調査してみたいと思います

    マニュアルに気になる記述を発見!

    CC-RLコンパイラユーザーズマニュアル r20ut3123jj0101_ccrl.pdf

    617/803ページ 8.4 ROM 化

    「プログラム中で,グローバル,またはstatic な変数を宣言すると,初期値を持つ変数ならばdata 属性のセクション」

    「へ,初期値を持たない変数ならばbss 属性のセクションへというように,RAM 上のセクションに配置されます...」

    ここを読む限り

    「全てのデータはROMからRAMにコピーされる、データをROMのままで使用するオプションは無い」

    と、解釈できるのですが?

    リンカのプロパティに

    「ROMからRAMへマップするセクション」

    デフォルト設定は以下となってます

    .data=.dataR

    .sdata=.sdataR

    もしかするとこれを消すと

    RAMにコピーされずにROMのままで行けるかなと思って消してみた

    結果はデフォルトと変わらず同じアドレスにコピーされました

    これを書き換えればなんとかなるのかな?とは思うが...

    何をどうするのか?今の所マニュアル読解力不足の為不明

  • In reply to lumiheart:

    lumiheartさん

    とりあえず、現状のリンクディレクティブファイル(.dr)を張りつけてみてはいかがでしょう?

  • In reply to lumiheart:

    「全てのデータはROMからRAMにコピーされる、データをROMのままで使用するオプションは無い」
    
    と、解釈できるのですが?
    

    『CC-RLコンパイラ ユーザーズマニュアル』の「4.2.4 拡張言語仕様の使用方法」のなかの「メモリ配置領域指定(__near/__far)」に

    • __near および __far と配置セクション
      関数初期値なし変数初期値あり

      非 const 変数

      初期値あり const 変数

      および文字列データ

      __near .text .bss .data .const
      __far .textf .bssf .dataf .constf

    とあるので .const や .constf セクションに普通に配置できると思います。

    トレースRAMへの配置を制御するには CS+ のプロジェクトの「CC-RL(ビルドツール)」のプロパティ → 「リンク・オプション」のタブの「デバイス」の項目にそれらしき項目があります。

  • In reply to fujita nozomu:

    Kirinさん 有難う御座います

    >現状のリンクディレクティブファイル(.dr)を張りつけてみてはいかがでしょう?

    これって?

    「r_lk.dr」

    の事でしょうか?

    ただこれはマルツのサンプルをダウンロードした時のタイムスタンプのままなんですが?

    CC-RLで新規作成したプロジェクトには.drファイルは見つかりません

    .mapファイルならありますが

    現状では使ってないファイルが無駄に付いてるので

    このまま揚げるのはちょっと恥ずかしい

    もう少しまともなのに仕上げたらプロジェクトごっそり揚げてみたいと思います

    fujitaさん 有難う御座います

    > トレースRAMへの配置を制御するには CS+ のプロジェクトの「CC-RL(ビルドツール)」のプロパティ

    これを色々と弄ってみたのですが

    「トレースRAM領域への配置を制御する」

    「はい」にすると「トレースRAM領域への配置を禁止し、エラーを出力します」

    と、有りますが 

    「はい」にしても構わずトレース領域に配置されてエラーも出ず

  • In reply to lumiheart:

    チョコです。

    lumiheartさん,

    >「プログラム中で,グローバル,またはstatic な変数を宣言すると,

    の部分ですが,"変数"となっています。当然ながら,変数は書き換えを

    行うものですからRAMに配置されます。

    ここで問題になっているのは"変数"ではなく,"定数"です。

    したがって,fujitaさんがコメントされているように,const宣言を

    行うだけのはずです。

    マニュアルの図8.2を見ると0x02000番地に.constとありますが,

    これが定数としてROMに割り当てられたものです。

    なお,参照されている"ROM化"ですが,マイコンの場合には,最終的に

    アプリの起動をOSがサポートすることはありません。

    初期値あり変数については,その変数をアクセスするプログラムは

    RAMをアクセスするようなコードが生成されますが,RAMの値は起動時

    には不定となります。

    そこで,スタートアップ時に変数(RAM)に初期値を設定しないといけません。

    その処理を"ROM化"と呼んでいます。

    (なお,デバッグ時には,デバッガが値を直接RAMにダウンロードしてくれるので,

    気にする必要はありません。)

  • In reply to チョコ:

    チョコさん ご回答有難う御座います

    気にする必要はありませんとは言え気になる箇所

    > (なお,デバッグ時には,デバッガが値を直接RAMにダウンロードしてくれるので, 気にする必要はありません。)

    本件ではROMに書かれてるハズのfontデータがRAM領域にコピーされてRAM領域を無駄に消費しちゃってる

    (fontはconst指定されてる)

    R5F104PJFBのメモリマップではRAMはF9F00h~

    ここにconst指定されたRAMに置く必要の無い定数がコピーされてます

    その後にconst指定してない普通にRAMに置くべき変数が並んでます

    これはデバッガが勝手にコピーしてるって事?

    デバッグモードでない通常モードならF9F00hに変数がコピーされるのでしょうか?

    確認のしようが無い?

  • In reply to lumiheart:

    コンパイラコーステキストやソフトウエアマニュアルをまだ読んでおられないように感じます。まずは一通り読むことをお勧めします。

  • In reply to kijo:

    チョコです。

    > 本件ではROMに書かれてるハズのfontデータがRAM領域にコピーされてRAM領域を無駄に消費しちゃってる

    前回のコメントとこれは全く別物です。前回の内容は"ROM化"の説明で,

    初期値ありの変数についてのものです。

    "const"に指定すれば,ROMに配置されます。ただし,単純にROMに配置

    されるのではなく,ミラー領域(アドレスは個々のデバイスでことなります)に

    配置されます。このミラー領域をRAMと誤解されてはいないでしょうか。

    R5F104PJでは,RAMはF9F00H~のアドレスです。F3000H~F9EFFH

    はミラー領域であり,RAMではありません。

    "const"指定した定数はnear指定なので,F3000Hから読み出せるように

    なるだけで,実体は03000Hのところにあります。

    ミラー領域に関しては,デバイスのマニュアルのCPUアーキテクチャの章の

    "3.1.2 ミラー領域"を参照してください。

    もう一度アドレス関係をよく確認してください。

  • In reply to チョコ:

    私が見当違いの所を見てるのでしょうか?

    RAMアドレス
    F9F00h~

    デバッガ使用領域
    FA300h~FA6FFh

    RAMアドレスのfontが占有してるエリア
    ~FB0E7まで

  • In reply to lumiheart:

    lumiheartさんのレベルが掴み切れません。何が分かっていて、何が分からないのか?メモリマップを見れるようだし、"これってフルマニュアルでセクション指定プログラム書かなきゃいけないの?"などからいろいろと知識はあるようにも感じます。

    CC-RLコンパイラマニュアルを参照されているようですが、2.コマンドリファレンスの1.概要にコンパイラやリンカの役割が簡単に書かれてます。6.セクション仕様の1.セクションにセクションに関して書かれてます。マニュアルなのでパッとはわかりづらいので、ルネサス半導体セミナーRL78コンパイラコーステキストの2.2メモリマッピング2-10~2-11ページに飛びます。Cコードで int a; と変数を宣言すると、コンパイラで変数aをセクション@@DATAに配置します。int b = 1; と宣言するとbはセクション@@INIT に配置します。1はセクション@@R_INITに配置されます。const int c=1; はセクション@@CNSTに配置されます。繰り返しですが、ここまではコンパイラの仕事です。で、リンカがセクション@@BITS,,,@@INT,@@DATAをRAMになっているFFF00hから順番に配置します。同様に10000hからフラッシュになっているエリアに@@CNST,@@R_INIT,,,,を配置します。スタートアップファンクションは最初にセクション@@DATAをすべてクリアして、セクション@@INITにセクション@@R_INITの値をコピーします。

    5月4日Kirinさんの回答は、 オンチップ・デバッキングのトレース機能は,FA300H-FA6FFH領域を使用するので、ここにユーザがセクションを置いてはだめと言ってます。ソースコード内あるいはリンカのパラメータで配置を変えないとだめです。

    5月5日のlumiheartさんの書き込みによると、const volatile unsigned char ParaName...でParaNameは@@CNSTに移動したけど、セクション@@INITは引き続きFA300H-FA6FFH領域に残っているのでLCD表示用Fontが書き変わったことになります。リンカの設定でFA300H-FA6FFH領域を空けなければなりません。

    5月4日のlumiheartさんの書き込みから、セクション@@R_INITとセクション@@CNSTでRAMがいっぱいになっているように感じます。スタックエリアなどは大丈夫ですか?

    セクションの名称や配置、スタートアップはユーザが作成します。5月5日のチョコさんの回答はこれを言っていると思います。CS+でプロジェクトを作成すれば、デフォルトでセクション名設定、メモリへの配置、標準のスタートアップを組み込みをしてくれます。lumiheartさんがもとにしているサンプルがどうなっているかですね?私の周辺でも、カリスマを気取ったり、自分の存在価値を高めるため、セクション名やスタートアップの中身などをいろいろと変更して移植性や検証性をわざと悪くしていることがあります。少しずれますが、同じルネサス製なのにSHのOSEKコンフィグレータとHEWのワークスペース作成でSFRの表現がまったく異なったりします。悪意は無いと思いますが、ルネサス内でもこんなものです。アンチ統合開発環境の方の作成したソフトウエアは特に注意が必要です。

    CC-RLコンパイラやCS+のマニュアルを読むのは大変です。2日のコンパイラコースのテキストを読みましょう。チョコさんがリコメンドしているアーキテクチャの理解にはソフトウエアマニュアルが良いです。概要、メモリ空間、パイプラインは必須です。余裕があればレジスタも読みましょう。命令セットと命令の説明は飛ばして良いので50ページ以下です。

    そして、確認するのは、貼り付けているメモリのダンプファイルではなくてxxx.mapのマップファイルですよ。

    的はずれの、失礼な書き込みかもしれませんが、お許しください。

Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page