Palm ML for Japanese

Palm ML for Japanese

注意:MLの運営自体は終了しました、現在は、過去ログの公開のみを行っています。

[HOME] [palm-ml一覧] [palm-tech-ml一覧] [pilot-ml一覧] [pilot-tech-ml一覧]

検索式: [検索方法]

表示件数: 表示形式: ソート:

検索対象: palm-ml palm-tech-ml pilot-ml pilot-tech-ml


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[pilot-tech-ml 90] スタックの拡張 方法



こんばんは、福本です。

 以前から「Drag&Drop」のモジュールからJ-OSを呼び出すとスタックが溢れて飛ん
でしまう問題が有ったのですが、シャワーを浴びているとき(^^)にふとある方法を思
い付いて実験してみました。で、以前「Tango」が使えなかったというユーザーの方
に試してもらったのですが、うまく動作したようでした。ただ、繰り返し呼び出すと
フリーズしたそうです。このフリーズはどこに関係するのか分からないので、この方
法が完全だとはまだ言い切れないのです。

 そこで今回とった方法についてご意見を戴けたらと思います。その方法は、「新規
にスタックスペースを確保して、すり替える」というものです。具体的には、

    // A7がスタック?
    ULong saveStack, newStack, p;
    newStack = (ULong) MemPtrNew (dStackSize);
    if (newStack != 0)
    {
     p = newStack - dStackSize;
     saveStack = __getA7 ();
     __setA7 (p);
    }

    outHandled = handleFieldDown (&event, FrmGetActiveForm (), inField);

    if (newStack)
    {
     __setA7 (saveStack);
     MemPtrFree ((Ptr) newStack);
    }

という具合にhandleFieldDown()を呼び出す前にメモリを確保して、現在のA7レジス
タをすり替えています。皆がこの方法を取ると大変なことになりそうですが...

 ちなみに __getA7()と__setA7は、CodeWarriorのライブラリソースを見てて見つけ
ました(^^)。

 アセンブラの知識はほとんど無いのですが、考え方は有っていますよね?

 いかがでしょうか?
----------------------------------
 Shuji Fukumoto
 fukumoto@wakuwaku.ne.jp
 PXY00620@niftyserve.or.jp
 http://www.wakuwaku.ne.jp/shuji/
 Hiroshima JAPAN
----------------------------------


[PR]WebSylpheed拡張版
[PR]アニメとかゲームとか
[PR]フィギュアの色々
[PR]テレフォンカードの色々
[PR]ペットのこと色々
[PR]ランドセルは天使のはね
[PR]天使のはねランドセルのセイバン

[HOME] [palm-ml一覧] [palm-tech-ml一覧] [pilot-ml一覧] [pilot-tech-ml一覧]