(toppers-users 1659) Re: JSP1.4のarmv4について質問です
Shinya Honda
honda @ ertl.jp
2004年 9月 15日 (水) 01:06:45 JST
鈴木さん
酔漢さん
armv4依存部を担当しております本田です.
- seiichi_horie <seiichi_horie @ yahoo.co.jp>-san writes ---
>1. exit_and_dispatch
>ご指摘のとおりだと思います。割り込み待ちを正しく行うために、
>
>ldr r0, =schedtsk /* schedtsk を読み込む */
>ldr r1, [r0]
>cmp r1, #0
>beq dispatcher_2 /* <<== */
>ldr r2, =runtsk /* schedtsk を runtskに */
>str r1, [r2]
>
** Cut quoted 10 lines by the mail filter. **
ご指摘ありがとうございます.以前SH3で同様の問題を指摘いただいた時に
armv4もチェックするべきでした.以下の用に修正しました.
ldr r0, =schedtsk /* schedtsk を読み込む */
ldr r1, [r0]
ldr r2, =runtsk /* schedtsk を runtskに */
str r1, [r2] /* schedtsk がいない場合はruntskをNULLに */
cmp r1, #0
beq dispatcher_2
> >
> >cpu_lock状態の例外ですが、現状のままだと、
> >「μITRON4.0検定仕様書(案)」のSPC10のテストケースは通らないと思います。
> >問題ないのでしょうか?
> >
> >
> >
> テストケースは通りませんね。少し考え直してみましたが、やはりこれは問題の
> ように思います。修正するか、文書で割り込み以外の例外は管理外であると明示
> したほうがよいようです。
** Cut quoted 1 lines by the mail filter. **
仕様書の66ページを見ますと
「CPU例外ハンドラ実行開始直後は,CPU例外がCPUロック状態で発生した場合
にはCPUロック状態,CPUロック解除状態で発生した場合にはCPUロック解除状
態になっている.........」
とありますので,無条件で割込み許可(CPUロック解除状態)にしているのはバ
グです.CPU例外の入り口で例外発生時のCPUロック状態を引き継ぐよう修正し
ました.r1にspsrを保存して,0x80でandを行いロック状態, 0x13でorを取った
#define __EXCHDR_ENTRY(exchdr, stacktop) \
extern void exchdr##_entry(VP sp); \
asm(".text \n" \
#exchdr "_entry: \n" \
" ldr sp,.int_stack_"#exchdr" \n" /* スタックの切り替え*/\
" sub lr,lr,#4 \n" /* undefでもこれでいいか?*/\
" stmfd sp!, {r0 - r2,lr} \n" /* 一時的にint_stackに待避*/ \
" mrs r1, spsr \n" /* SVCモードに切り替えるため */ \
" mov r0, sp \n" /* 保存する*/ \
" mov r2,#0xd3 \n" /* CPSRの書き換え(SVCモードへ)*/ \
" msr cpsr,r2 \n" \
" ldr r2,[r0,#0x0C] \n" /* load PC*/\
" stmfd sp!,{r2} \n" /* Store PC*/\
" stmfd sp!,{r3,ip,lr} \n" /* Store r3,ip,lr*/\
" ldmfd r0!,{r2,ip,lr} \n" /* load r0,r1,r2*/\
" stmfd sp!,{r1,r2,ip,lr} \n" /* SPSR,Store r0,r1,r2*/\
" ldr r2, .interrupt_count_"#exchdr"\n" /* 多重割り込みか判定*/\
" ldr r3, [r2] \n" \
" add r0,r3,#1 \n" \
" str r0, [r2] \n" \
" mov r0,sp \n" /* 例外ハンドラへの引数 */\
" cmp r3, #0x00 \n" \
" ldreq sp,stack_"#exchdr" \n" /* スタックの変更 */\
" stmeqfd sp!,{r0} \n" /* タスクスタックの保存 */\
" and r2, r1, #0x80 \n" /* 例外発生時のCPUロック状態 */\
" orr r2, r2, #0x13 \n" /* を継承. SVCモード */\
" msr cpsr,r2 \n" \
" bl "#exchdr" \n" /* ハンドラ呼び出し */\
現在 JSP 1.4.1 のリリース作業を行っておりますので,バグや要望等があり
ましたらお知らせ下さい.
#あまり大きな変更には対応できないと思いますが.....
-------------------------------------------------------
本田 晋也(Shinya Honda)
豊橋技術科学大学大学院 工学研究科 電子情報工学専攻
名古屋大学大学院 情報科学研究科 情報システム学専攻 高田・冨山研究室
E-mail honda @ ertl.jp
WWW http://www.ertl.jp/~honda