(toppers-users 4057) Re: RXシリーズでのカーネル管理外設定時のassert

Hiroaki TAKADA hiro @ ertl.jp
2013年 2月 21日 (木) 16:07:58 JST


久保様

開発者と話した結果、当該部分を外せばよいことを確認してもらいま
した。

配布しているファイルは別途修正する予定ですが、その状態でお使い
いただけると幸いです。

高田広章
名古屋大学

(13/02/21 14:26), AKIRA KUBO wrote:
> 高田様
> 
> コニカミノルタオプティクス(株)
> 久保です。
> 
> 見解ありがとうございます。
> 
> まずは、外しておきます。
> この部分以外では、カーネル管理外含め割り込み動作も
> 問題なく動作していることをご報告させていただきます。
> 
> どうぞ宜しくお願いいたします。
> 
>> -----Original Message-----
>> From: users-bounces @ toppers.jp [mailto:users-bounces @ toppers.jp] On
>> Behalf Of Hiroaki TAKADA
>> Sent: Wednesday, February 20, 2013 5:44 PM
>> To: users @ toppers.jp
>> Subject: (toppers-users 4055) Re: RXシリーズでのカーネル管理外設定時の
>> assert
>>
>> 久保様
>>
>> TOPPERS/ASPを利用くださいまして、ありがとうございます。
>>
>> メールを読ませていただいた段階で、私の見解をお知らせします。
>>
>> ご指摘の通り、149行目の「 if(intatr == TA_NONKERNEL ){」は適切では
>> ありません。
>>
>>> (asp\include\kernel.h)
>>> ・TA_NONKERNEL -> 0x02
>>> ・TA_ENAINT    -> 0x01
>>> ・TA_EDGE      -> 0x02
>>
>> そもそも、TA_NONKERNEL は、DEF_INH に対する inhatr に対して指定する
>> ための定数です。それに対して、TA_ENAINT と TA_EDGE は、CFG_INT に対
>> する intatr に対して指定するための定数です(よって、値の重複は問題
>> ありません)。ですので、inhatr に対して TA_NONKERNEL をチェックする
>> こと自身が不適切です。
>>
>> どのように修正すべきかについては別途検討したいと思いますが、とりあえ
>> ずは、その部分のコードを外してくださって良いと思います。
>>
>> 高田広章
>> 名古屋大学
>>
>> (13/02/20 16:59), AKIRA KUBO wrote:
>>> コニカミノルタオプティクス(株)
>>> 久保と申します。
>>>
>>> お世話になります。
>>>
>>> 本日は、カーネル管理外割り込みを設定した時点での
>>> assertについて、アドバイスいただきたく、メールをお送りさせていただき
>> ます。
>>>
>>> [状況]
>>> ・TOPPERS/ASPにおいて、カーネル管理外の割込みを使用しています。
>>> ・CPUはRX63Nになります。
>>> ・RX62N用のTOPPERS/ASPをカスタマイズしています。
>>> ・このCPUの割込みレベルの最大は15で
>>>  14,15がカーネル管理外となるように設定しています。
>>> ・IRQ5の割込みレベルを15に設定しています。
>>> ・IRQ5割込み検出トリガはネガティブエッジに設定しています。
>>>
>>> [現象]
>>> シスログ(シリアル)出力にて、
>>>  「C:\.....\asp\arch\rx_rxc\prc_config.c:153: Assertion
>>>       'TMIN_INTPRI <= intpri' failed.」と出ます。
>>>
>>> [詳細/質問]
>>> 該当のファイル(prc_config.c)を確認したところ
>>> void x_config_int( INTNO intno, ATR intatr, PRI intpri){
>>> 関数の中に気になる記述を見つけました。
>>>
>>> 149行目の「 if(intatr == TA_NONKERNEL ){」
>>> というところです。
>>>
>>> [intatr]というワードで関数内を検索すると
>>> 174, 177, 180, 183, 207行目で使用されており
>>> その全てが「if( ( intatr & TA_XXX ) != 0U ){」
>>> (ただし、TA_XXXは行により異なる)
>>> という記述になっています。
>>>
>>> (ファイルを添付させていただきます。)
>>>
>>> ここに出てくるTA_XXXの定義値について
>>> 確認してみたところ以下のようになっています。
>>> (asp\include\kernel.h)
>>> ・TA_NONKERNEL -> 0x02
>>> ・TA_ENAINT    -> 0x01
>>> ・TA_EDGE      -> 0x02
>>>
>>> (asp\arch\rx_rxc\prc_kernel.h ->
>>>    カスタマイズによりasp\arch\rx_rxc\prc_kernel_rx631.h)
>>> ・TA_POSEDGE   -> TA_EDGE(0x02)
>>> ・TA_NEGEDGE   -> 0x04
>>> ・TA_BOTHEDGE  -> 0x08
>>> ・TA_LOWLEVEL  -> 0x10
>>>
>>> ※一部カスタマイズしたところはありますが
>>> 定義値やコードなどは原型のままだと認識しております。
>>>
>>> この定義値を見る限り、
>>> 149行目の判定は適切ではないと
>>> 考えているのですが、いかがでしょうか?
>>>
>>> それとも、カーネル管理外で使用する
>>> 割込みにTA_NEGEDGEなどの属性を
>>> 与えることが間違っていますか?
>>>
>>> TOPPERS/ASPにとって、よりよい姿を
>>> 教えていただきたいと考えています。
>>>
>>> 不足している情報などあれば、
>>> 提示させていただきます。
>>>
>>> なお、RX62Nでも同様の処理をしていますが、
>>> 同様の結果となっております。
>>>
>>> どうぞ宜しくお願いいたします。
>>>
>>> --------------------------------------------
>>> 久保 明 :コニカミノルタオプティクス(株)堺サイト
>>> センシング事業部
>>> 開発部 開発3課
>>> 〒590-8551 大阪府堺市堺区大仙西町3-91
>>> TEL 072-241-7651
>>> FAX 072-241-7681
>>> e-mail : akira.kubo @ konicaminolta.jp
>>>
>>>
>>>