(toppers-users 4714) Re: TOPPERS/ASP3ディスパッチ部におけるフリーズについて

Hiroaki TAKADA hiro @ ertl.jp
2017年 12月 26日 (火) 09:30:11 JST


株式会社ヌマタ様

# メールが行き違いになりました。

詳しい状況をお知らせくださり,ありがとうございます。

> ・ 割り込み優先順位を全て同一にする

これは,多重割込みが原因ではないということですね… まれにしか起
こらない現象ということであれば,多重割込みが最も疑わしいわけです
が,そうでないとすると…

行き違いになった先ほどのメールに書きましたが,フリーズした時の
状況を調べるのが,原因解明につながりそうに思います。繰り返しで
すが,フリーズした時に割込みが受け付けられないのか,そうだとす
れば,その時の割込みコントローラ(GIC)の状態を調べるのが近道
だと思います。

高田広章
名古屋大学

On 2017/12/26 9:15, kaneko-nao wrote:
> 名古屋大学
> 高田広章 様
> 
> 早々のご連絡、ありがとうございます。株式会社ヌマタです。
> 取り急ぎ、ご質問の回答に加え、弊社で行ってきた対応を列記します。
> 
>> (1) slp_tsk() で割り込み待ちをしているということですが,その時
>> に,他に動作しているタスクが無い状況があるでしょうか?(ディス
>> パッチャ内のアイドル処理を実行しているかどうか)
> 
> 当初、ディスパッチャ内のアイドル処理へ行かないよう、
> アイドルタスクを追加しましたが、フリーズ場所がアイドルタスク内
> となる以外、結果は同じでした。
> 
>> (2) もし可能なら,Release 3.1.0 でも同じ問題が発生するか,調べ
>> てくださると助かります
> 
> 元々、Release 3.1.0で発生し、3.2.0にバージョンアップをし、
> 現在に至ります。
> 
> 
> ■その他、弊社での対応(全てNGでした)
> ・ タスクスタックサイズの増加
> ・ slp_tsk( ) - iwup_tsk( ) の構成をポーリング方式に変更
> これは、CPU PORTに接続したLEDを利用し、割り込み内のiwup_tsk( )前に
> LEDを点灯し、タスク内のslp_tsk( ) 後にLEDを消灯する、という方法で状況を
> 見ていたところ、フリーズする際は、必ずLEDが点灯したまま(タスクが起床
> していない)であったため、ポーリング方式を検討しました。
> ・ 割り込み優先順位を全て同一にする
> ・  アイドルタスクの追加(前述)
> 
> その他、細かな試みは多数行いましたが改善せず、その後、割り込みを
> 1個1個削減しながら様子を見たところ、割り込みが1個の場合に限り、
> 正常動作することが分かるに至った次第です。
> 
> 以上、ご検討のほど、よろしくお願いいたします。
> 
> 株式会社ヌマタ
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> -----Original Message----- From: Hiroaki TAKADA
> Sent: Monday, December 25, 2017 5:51 PM
> To: users @ toppers.jp ; kaneko-nao
> Subject: (toppers-users 4709) Re: TOPPERS/ASP3ディスパッチ部におけるフリーズについて
> 
> 株式会社ヌマタ様
> 
> ご報告,ありがとうございます。
> 
> TOPPERS/ASP3 のディスパッチャのロジックは,ASP のものと考え方を
> 変えており,何か問題が残っている可能性は無いとは言えません。ま
> た,Release 3.1.0 と 3.2.0 でもロジックの修正を行っており,歴史
> が浅いコードになります。
> 
> こちらでも調査したいと思いますが,まれにしか起こらない現象とい
> うことで,原因を絞り込むのにご協力いただけるとありがたいです。
> 
> (1) slp_tsk() で割り込み待ちをしているということですが,その時
> に,他に動作しているタスクが無い状況があるでしょうか?(ディス
> パッチャ内のアイドル処理を実行しているかどうか)
> 
> (2) もし可能なら,Release 3.1.0 でも同じ問題が発生するか,調べ
> てくださると助かります。
> 
> よろしくお願いします。
> 
> 高田広章
> 名古屋大学
> 
> On 2017/12/25 15:05, kaneko-nao wrote:
>> はじめまして。
>> 株式会社ヌマタと申します。弊社では次の環境で設計をしていますが、ディスパッチ部でフリーズをするという現象があります。
>>
>> OS:TOPPERS/ASP3 3.2.0
>> CPU:ルネサス RZA1/L
>>
>> slp_tsk( )で割り込み待ちをし、割り込み内で当該タスクをiwup_tsk( )で起床する、というタスクを複数作成していると、ディスパッチ部でフリーズをするという現象が発生しました。フリーズする箇所は、「core_support.s」の223行目の割り込み待ちのところです。フリーズの頻度は、数時間に1回程度で、24時間正常動作を続ける場合もあります。
>>
>>     ALABEL(dispatcher_1)
>> #ifdef TOPPERS_CUSTOM_IDLE
>>     toppers_asm_custom_idle
>> #else /* TOPPERS_CUSTOM_IDLE */
>>     msr        cpsr_c, #CPSR_SVC_MODE    /* 割込みを許可(スーパバイザモード)*/
>> #endif /* TOPPERS_CUSTOM_IDLE */
>>     b        dispatcher_1            /* 割込み待ち */ ←ここでフリーズ
>>
>> そこで試行錯誤の結果、割り込みを1個(OSが使用するタイマ割り込みを除く)にすればフリーズしない、ということが分かりました。現在、弊社のお取引先でも、全く同じ現象のトラブルがあるとの報告を受けておりますが、過去にこのような事例についてのご対応はおありでしょうか。ご指導を賜りたく、お願いいたします。因みに、「core_support.s」は、一切変更せずに使用しています。
>>
>>
>