Renesas Synergy™

FAQ 1008095 : スタック・ポインタ(sp)に設定する値の目安はありますか?

回答

次の点に注意して値を設定してください。

なお、コンパイラが出力するマクロを参照すると、 ある関数の使用するスタック・サイズを知ることができます。
詳細については、ユーザーズ・マニュアル C言語編の章「プログラムの呼び出し」の 「C言語関数の呼び出し」、またはこちらを参照してください。

  • スタック・フレームは、spに設定した値から下位方向に生成されます。

     

  • spは、必ず4バイト境界の位置を指すように設定してください。
    Cコンパイラはスタック相対でメモリを参照する場合、 スタック・ポインタが4バイト境界の位置を指していることを想定して、コードを生成しています。

     

  • なるべくgpと離れたデータ・セクション(bss属性セクション)に配置してください。
    gpと近いと、プログラムのデータ領域を破壊するおそれがあります。
sp設定例)
-----------------------------------
    .set STACKSIZE, 0x3f0
    .bss
    .lcomm __stack, STACKSIZE, 4

    mov #__stack+STACKSIZE, sp 
-----------------------------------

上記例では、アプリケーションで使用するスタック・フレームのサイズを、 0x3f0バイトと指定して領域を確保します。
"__stack"は、スタック・フレームの最下位(先頭)を指すラベルとなります。


スタック見積もりツールで、関数スタックのサイズを出力することが可能です。 (V3.00未満:stack850、V3.00以降:stk850)

 

 

適用製品

V850用コンパイラパッケージ [CA850]
他にご質問がございましたら、リクエストを送信してください