(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>