(toppers-users 3651) Re: TOPPERS/ASP cq_starm_gccの終了処理が変な気がしています。

杉本明加 asuka.choronos @ gmail.com
2011年 10月 23日 (日) 15:32:08 JST


こいさん様

杉本です.

ご指摘のとおり,★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の設計意図なのでしょうか。
>
>  以上
>
>
>
>