(toppers-users 3834) Re: call_cychdrはlock_cpuでないときに呼び出されることがあるのでしょうか。

koizumi yoshiyuki koizumiyoshiyuki @ gmail.com
2012年 1月 27日 (金) 11:28:28 JST


 こいさんです

自己レス

cpu_lock時間が短くならないか考えていました。

sample1が動作している範囲なら、起動時以外でtmevt_queueはタイマ割り込みからしかアクセスされないのでsignal_timeのi_lock_cpuはなくても良いのではと思いましたが、sta_cycやstp_cycがタイマ割り込みより高い優先度の割り込みから呼び出されたとき矛盾が発生しますね。
sta_cycやstp_cycの実処理を遅延させてタイマ割り込み内で行なう手もありとは思いますが、ここではそこまでやらないのですね。


  追伸
dispatcher()はlock_cpuで動作させ、idle_loopでロック解除しカーネル管理下の割り込みを受け付けていますが、unlock_cpuでloopさせてrun_task()の前後でlock/unlockさせたほうが割り込み禁止時間を短く出来るでしょう。
と思いましたが、dispatcherからrun_taskが呼び出されるのは、最初の一回だけなので(割り込みハンドラやタスクから起動がかかると、dispatcherとは別なところからrun_taskが呼び出されていました。)

 if(!primap_empty()) {
  /* タスクの開始 */
  run_task(search_schedtsk());
 }
 set_basepri(IIPM_ENAALL); // ロック解除
 while(true);

で良さそう(このほうが論理がわかりやすい)に思えます。又、dis_dsp()のlock/unlockは不要だと思います。ena_dsp()のロック時間も短く出来ると思います。

以上

 2012年1月24日19:33 koizumi yoshiyuki <koizumiyoshiyuki @ gmail.com>:

>  こいさんです
>
> すみません、勘違いがありました。もう少し考えます。
>
> 以上
>
> 2012年1月24日19:02 koizumi yoshiyuki <koizumiyoshiyuki @ gmail.com>:
>
>> こいさんです
>>
>> cyclic.cのcall_cychdr()はlock_cpuでないときに呼び出されることがあるのでしょうか。
>>
>> sample1が動作している範囲ではunlock_cpuから呼び出されることはないようです。
>> SSPでは周期ハンドラはタイマ割り込み延長で動作させているのだと思っています。
>>
>> call_cychdr()のi_unlock_cpu()はいらないような気がしています。
>>
>>  以上
>>
>
>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://www.toppers.jp/pipermail/users/attachments/20120127/8ff402d6/attachment.html>