2012年2月15日水曜日

メモリが120バイトしか使えない

PIC18Fって 大体のコードがC18を使っています

でも 僕はHI-TECHを使っていました

だけど そろそろC18使いたいなと思って
使い始めたんですが

なんと 変数が120バイト以上宣言できない

18F2550ですが
例えば
char c, d, buf[118];
は大丈夫で
char c, d, buf[119];
はダメです
また
int i;
char buf[118];
は大丈夫で

int i;
char buf[119];
はダメです

変数120個 じゃなくて メモリ120バイト が上限らしい
んで それを超えると

Error [1300] stack frame too large
っていうエラーが出てくる


んで ぐぐってみると まぁ 結構同症状が出てるらしい

なんかマニュアルに書いてあるっぽかったので

見てみたら
こんなことが書いてあった

E.1 ソースコード互換性
  E.1.1 スタックフレームサイズ
    コンパイラーは拡張モードで動作する時、ローカル変数の合計サイズは関数当り、
    96 バイトに制限されています。非拡張モードの場合は 120 バイトです
なるほど
どうやら1個の関数で使えるのは最大でも120バイトらしい
うーん…
文字列からデコードさせたいとかだと
受信用に100バイト位確保して いろいろカウンタつけると
ギリギリ って感じだよなぁ

ま グローバル変数はいくらでも宣言し放題らしいので
最悪それを使うとして


ところで

#include <p18f2550.h>
void main(void) {
for ( ; ; ) ;
}
っていうコードだけでメモリを270バイト近くも使うというのはどういうことなんじゃ?
C語ってそんなに重いコードなの?
んな訳ないよなぁ

いくら2550のメモリが広大だからといって2048バイトしか無い内の300バイトは痛いよ


つーことで
C18で120バイト以上メモリを確保できない><
という問題でした

1個の関数の中では最大120個しか使えないらしい
ま、それ以上使う方法もあるっぽいんだけど

0 件のコメント:

コメントを投稿