Top Page [◀◀] 2 3 4 5 6 7 8 9 ... [▶▶] Last Page
質問失礼致します。
初歩的な質問で申し訳ございません。
現在RL78/G10マイコンでソフトウェア開発を行っております。
[10ピン、ROM容量:2KB、RAM容量:256byte]
スタック領域範囲の確認方法をご教示いただきたいです。
CPUリセット後に逆アセンブルからスタックポインタのイニシャライズは確認する事ができました。
[ MOVW SP,#0FED4H]
しかしこのアドレスから何処までが(何Byte?)スタック領域として設けられているのか確認する方法がわからない状態です。
大変恐縮でございますが、
ご回答の程宜しくお願い致します。
チョコです。
RL78のスタック領域は未使用のRAM領域の中で、連続した一番大きい領域に設定されているはずです。
通常は、SPに設定された値-1(ここでは、0xFFED3)からその直前にある変数の直後のアドレスまでが、スタック領域として使用できます。
In reply to チョコ:
In reply to sktytr:
>スタック領域は「0xFFED3 ~ 60byte目のアドレス+1」となるという事でしょうか?
その領域がスタックとして使用可能と言うだけです。
>スタック領域は、予め領域を設定されるので、容量は不変だと認識していたのですが
CC-RL78では、変数領域で使用される領域以外をできるだけ確保しようとしているだけです。
CC-RL78のスタートアップ・ルーチン(cstart.asm)のスタックの設定部分を以下に示します。
CC-RL V1.00の場合には、38~40行目でスタック領域を64バイト確保しています。
実際のSPの設定は56~60行目で行われています。CC-RL V1.00の場合には、38~40行目で指定した_stacktopが設定されていますが、
それ以降のバージョンでは内部的に求められた__STACK_ADDR_STARTが設定されています。これが、前回の最も大きな連続した領域に
当たるものです。(最新のバージョンはV1.08です。V1.00は現在は使われていないので、38~40行目は無効になります。)
>使用するRAM容量によってスタック領域も左右するという事でしょうか?
スタックとして使用可能な領域が変化するのであって、実際のスタック領域が変化する訳ではありません。
プログラムで使用する変数領域は当然優先的に確保するので、残りをスタックに使うのはごく普通かと思われますが。
実際にスタックがどれだけ使われるかは、どこで割り込みがかかってくるか等プログラムの動作で変動します。
それらを考慮して、デバイスを選択することになるかと思います。
>ビルド時にアセンブリファイルを生成するようCS+で設定しているのですが、
cstart.asmはアセンブリファイルの生成とは無関係です。
CS+CC-RLでアプリケーション(CC-RL)で新しいプロジェクトを作成すると、
下に示すようなファイルが自動で生成されます。
2つのasmファイル(cstart.asmとhdwinit.asm)、main.c及びiodefine.hが自動的に生成されています。
この中できちんとした中身があるのは、cstart.asm(スタートアップ・ルーチン)とiodefine.h(内蔵周辺機能を制御するレジスタの定義ファイル)の2つです。
残り2つは、1からプログラムを作成するときに使う位で、殆どの人が使っている「コード生成(設計ツール)」を使うと無意味です。
単に新規のプロジェクトを作成した状態でのプロジェクトをzipファイルにしたものを添付しておきます。
RL78G10_2K.zip
>上記のようなスタック領域を確保している事が確認できる「.asm」ファイルが生成されません。「cstart.asm」のようなファイルはどうすれば生成されるのでしょうか?
もしかして、CS+CC-RLではなく、CS+CA78K0Rの環境を使ってはいないでしょうか?
CA78K0Rの場合には、cstart.asmのようなソースではなく、アセンブルした結果のライブラリの形で組み込まれるので、標準ではプロジェクトツリーに出てきません。
cstart.asmはCA78K0Rをインストールしたディレクトリで、下に示す画面イメージのところにあります。
この場合にも、RAMの一番大きな連続した空き領域がスタック領域に設定されます。
これからRL78を始めるのであれば、CA78K0Rはあまりお勧めできません。今のうちにCC-RL78にした方がいいと思います。
(CC-RL78の方がコード効率はいいですよ。)
マイコンで動的データを使うのを私は避けてます。よって、RL78の動的データの扱いもほとんど勉強してません。マニュアルやソースコードをチョット見ただけでは確信が持てないのですが、空領域をスタック領域とヒープ領域で分けることになるのではないでしょうか? SHではHEWでワークスペース作成時にヒープエリアを設定しておかないとprintfが動作しないのでRL78のライブラリーも動的データを使っていることも予想されます。