でも 僕は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 件のコメント:
コメントを投稿