(toppers-users 3306) Re: ARM対応の割り込みによる遅延ディスパッチについて
yoshiki.matsumoto @ nts.ricoh.co.jp
yoshiki.matsumoto @ nts.ricoh.co.jp
2010年 11月 30日 (火) 09:19:11 JST
高田様
早速のご回答ありがとうございます。
コードに問題がないことは理解しました。
しかし、割込み処理からの一連の流れとしてフローチャートなどに表すと
あまり気持ち良いものではないです。
松元@リコー
Hiroaki TAKADA <hiro @ ertl.jp> wrote on 2010/11/29 22:42:09:
> 松元様
> 1つめの質問にお答えします。
> JSPカーネルでは、割込みハンドラの中でタスクを終了させる機能はあり
> ませんので、割込みハンドラの出口でディスパッチ処理を実行する場合
> に、runtskがNULLになる状況はないはずです。よって、今のコードで問
> 題は起こらないものと思います。
> ただ、良いコードかどうかは別問題と思います。
> 高田広章
> 名古屋大学
> (10/11/29 16:41), yoshiki.matsumoto @ nts.ricoh.co.jp wrote:
> > はじめまして。
> > リコーの松元と申します。
> >
> > TOPPERS/JSP 1.4/1.4.1の ARM対応の割り込みによる遅延ディスパッチに
> > ついて質問があります。
> >
> > ディスパッチ処理(dispatcher_1)では、最優先タスクが設定されていない場合
> > 割込み処理による実行タスクを待ちます(dispatcher_2)。
> >
> > dispatcher_1:
> > /*
> > * ここではシステムモード・割込み禁止状態でなければならない.
> > */
> > ldr r0, =schedtsk /* schedtsk を読み込む */
> > ldr r1, [r0]
> > ldr r2, =runtsk /* schedtsk を runtskに */
> > str r1, [r2] /* schedtsk がいない場合はruntskをNULLに
*/
> > cmp r1, #0
> > beq dispatcher_2
> > dispatcher_3:
> > ldr sp, [r1,#TCB_sp] /* タスクスタックを復帰 */
> > ldr pc, [r1,#TCB_pc] /* 実行再開番地を復帰 */
> > dispatcher_2:
> > mov r3,#1
> > str r3, [r6]
> > /* sleepモードを持つCPUなら書き換える */
> > mrs r0, cpsr /* FIQを継承 */
> > and r0, r0, #CPSR_FIQ_BIT
> > orr r0, r0, r4
> > msr cpsr, r0 /* 割込み待ち */
> > WAIT_INTERRUPT
> > mrs r0, cpsr /* FIQを継承 */
> > and r0, r0, #CPSR_FIQ_BIT
> > orr r0, r0, r5
> > msr cpsr, r0 /* 割込み禁止 */
> > mov r3,#0
> > str r3, [r6]
> > b dispatcher_1
> >
> > タスクからのディスパッチ処理(dispatch)ではレジスタ R4-R6にそれぞれ以下
の
> > 値が設定されていますが、割込みからのディスパッチ処理では R4-R6は設定
> > されていません。
> > ldr r6, =interrupt_count /* r6<-interrupt_count */
> > mov r5, #(CPSR_SVC|CPSR_IRQ_BIT) /* 割り込み禁止(システム
モード)
> > */
> > mov r4, #(CPSR_SVC) /* 割り込み許可(システム
モード)
> > */
> > もし、割込みからディスパッチ処理が呼ばれて最優先タスクが設定されていな
い
> > 場合は、動作が不定になると思われます。
> >
> > 最初の質問は
> > 割込みからディスパッチ処理を実行する場合(reqflg≠0)は必ず最優先タスクが
> > 設定されており dispatcher_2は絶対に実行されないと考えてよいのでしょう
か?
> >
> > もう一点質問があります。
> > ディスパッチ処理のソースに記述されたコメントについて、システムモードと
は
> > ARMで言う所のスーパーバイザモードとの理解でよいのでしょうか?
> >
> > 以上
> > よろしくお願いいたします.
> >
> >