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

kaneko-nao kaneko-nao @ numata.co.jp
2017年 12月 26日 (火) 09:15:00 JST


名古屋大学
高田広章 様

早々のご連絡、ありがとうございます。株式会社ヌマタです。
取り急ぎ、ご質問の回答に加え、弊社で行ってきた対応を列記します。

>(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」は、一切変更せずに使用しています。
>
>