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 92] Re: スタックの 拡張方法



後藤と申します

#Palm/Pilot用Progはいまだに作ったことはないのですが。。。

>>>>> From: "Shuji Fukumoto" <fukumoto@wakuwaku.ne.jp>

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

私はHackMasterの構造の理解もしてないので、その前提で、一般的な
話しをさせていただきますが、組み込みシステムなどの割り込み
ハンドラなどを作っていると上記方法はよくつかわれます。


>     // A7がスタック?
>     ULong saveStack, newStack, p;
>     newStack = (ULong) MemPtrNew (dStackSize);
>     if (newStack != 0)
>     {
>      p = newStack - dStackSize;
           ^^^^^^^^^^^^^^^^^^^^^^
誤pasteか? とも思いますが、ここは newStack + dStackSizeでは?
#スタックとはpushするとスタックポインタ値は減っていくものですので。

このままだと p はよからぬ場所をポイントしてしまいますよね。
そのままスタックが使われてしまうと、かなりヤバイです。
よからぬところを破壊して全体が動かなくなる可能性大。


>      saveStack = __getA7 ();
>      __setA7 (p);
>     }
> 
>     outHandled = handleFieldDown (&event, FrmGetActiveForm (), inField);
> 
>     if (newStack)
>     {
>      __setA7 (saveStack);
>      MemPtrFree ((Ptr) newStack);
>     }
> 

あとの部分は、コンパイラが関数エントリ時に link a5,0 などを使用して
a5レジスタ相対でローカル変数をアクセスしていることが確認できれば
きっと問題はないこととと思います。
アセンブラコードで確認すればよいと思います。


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

スタックをすり替えればよいという考え方はあっていると思います。
ただ、Hackのことも考慮するとちょっと事情は違うのかもしれませんし、
その弊害の可能性については、ちょっと想像がつきません。


--- Regards,
 Shun-ichi Goto  <gotoh@taiyo.co.jp>
   R&D Group, TAIYO Corp., Tokyo, JAPAN


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

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