(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の設計意図なのでしょうか。
>
> 以上
>
>
>
>