(toppers-users 3652) Re: TOPPERS/ASP cq_starm_gccの終了処理が変な気がしています。
koizumi yoshiyuki
koizumiyoshiyuki @ gmail.com
2011年 10月 23日 (日) 19:57:29 JST
杉本さんへ
ヒント有難うございます。
無限ループに至らない原因が判明しました。exit_kernelは以下のようになっています。
assert(0)で無限ループにしようとしていると思われます。
void void)
{
call_terrtn();
target_exit();
assert(0);
}
しかし、target_exit()は
extern void target_exit(void) NoReturn;
と定義されているため、最適化を指定したコンパイラはassert(0)以後は必要ないとオブジェクトを落としません。ここはコンパイラ依存で処理されます。
後の動作は、前に説明した用にスタックは切り替わっているので、変な動作になっています。
extern void target_exit(void);
NoRetuenを削除したら、assert(0)で無限ループになりました。
設計側の意図としてはどのように考えているのですかね。
独り言
extern void xxxxxx(void) NoReturn;
を知りませんでした。前に、別な所で見て、なんだろうと思ったのですが、その時調べなかったのが敗因でした。
以上
2011年10月23日15:32 杉本明加 <asuka.choronos @ gmail.com>:
> こいさん様
>
> 杉本です.
>
> ご指摘のとおり,★Aに戻ってはいけません.
>
> おそらくASP 1.3.2をお使いだと思いますが,target_exitと
> prc_terminateにも無限ループによる処理停止がありませんね.
> (target_exitはJSPでのsys_exitにあたります)
>
> ちなみに多くのターゲット依存部ではどちらかで無限ループで
> 処理を停止します.もしくはを停止する手段があれば該当する
> 機能を呼び出します,例えばMAC OS Xではexit関数を
> 使っています.
>
> 気になるのは,assertの処理です.exit_kernelの最後で
> assert(0)からTOPPERS_assert_abortが呼び出されます.
> 実装ではabort関数を呼んでいますが,その辺りは
> どのように動作していますでしょうか?もしかするとそこで
> プログラムが正常に終了する意図になっているのかもしれません.
>
>
> ちなみに,ASP 1.7.0用のCortex-M3用のターゲット依存部では
> target_exitで無限ループしています.簡単に対処するならばそれで
> 問題ないかと思います.
>
> 以上,よろしくお願いします.
>
> 2011年10月23日14:03 koizumi yoshiyuki <koizumiyoshiyuki @ gmail.com>:
> > こいさんです
> >
> > TOPPERS/ASP cq_starm_gccでsample1を動作させ、「Q」キーで終了させた後スタックが壊れて暴走しています。
> >
> > TOPPERAS/ASPの終了処理はどうなるべきなのでしょうか。
> >
> JSPのcq_frk_nxp_armではsys_exit()で無限ループになっています。ASPにはsys_exit()はありませんでした。終了の仕方がJSPとASPでは変わったのでしょうか。
> >
> >
> システムの終了処理は実装依存なので、適当に処理すればよいのでしょうか、OSの終了処理としては、OS設定した環境を元に戻して(割り込みコントローラや、モードなど)無限ループにして於くのが良いと思います。
> > 現状
> > sample1(){
> > ---
> > SVC_PERROR(ext_ker());
> > }
> >
> > ext_ker(){
> > ----
> > call_exit_kernel();
> > ---- ★A
> > }
> >
> > call_exit_kernel()はアセンブラ記述でモード切替た後exit_kernelにブランチ。
> >
> > exit_kernel(void){
> > }
> >
> >
> exit_kernel関数を終了したとき★Aに戻って欲しい作りのように見えますが、call_exit_kernelでモードの切り替えと共にスタックが切り替わるので★Aには戻れないはずです。又、たとえスタックが切り替わらなくても、exit_kernelからの戻りと、ext_kerからの戻り方はコンパイラ依存な為、こちらも不味い気がしています。
> > システムの終了はどうなるのがTOPPERSの設計意図なのでしょうか。
> >
> > 以上
> >
> >
> >
> >
>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://www.toppers.jp/pipermail/users/attachments/20111023/b41d2fee/attachment.html>