Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page

RI78V4の割込みハンドラ起動時の異常挙動

CS+ for C.CにてRL78/G14をRTOSで動かしているのですが,adcの割込みハンドラ発生時に

0番地に飛んでしまうことがあります。

発生タイミングの判断理由としてトレース情報をみて「CALL   !!__kernel_int_entry」の後に

0番地に移動していることを確認しております。

 

同じプログラムでも必ず起きるわけでもなく何時間も起きなかったり,

数秒で起きたりし,なぜか一度ファイルを捨てて少し前のデータから同じ処理を

追加しなおすと起きなくなるなどなかなか再現性がない状況です。

正直状況を説明するのに何が情報として必要かすら悩んでいる状況で

恐縮ですが,何か可能性等思いつくことがあればご意見いただけると幸いです。

  • In reply to NoMaY:

    NoMaYさんこんにちは

    >同じコマンドというのは~~~
    というところでの具体例としては「init_ri_stackarea」内の「bnz $RISTKCLR」や何かOS処理中にある「RET(アドレス変化なし)」コマンドがパターンとしてして一番多く,自分でコードを書いていない部分で起こることが多いです。そのため,前者の例で下に抜けるor $RISTKCLRに戻るはずのところが「bnz $RISTKCLR」ばかりのログがある状態です。

    >リエントラント性~~
    というところは多重割込みをソース上で禁止にはしていませんがそもそも発生した時点で処理の取りこぼしが発生したことになり機器動作に異常がでるため,多重割込みが発生しない時間関係になっていることが前提のプログラムを書いています。要は「(バグがなければ)多重割込みがないようにしています」というのが言いたかったことになります。

    ポインタ変数についてはデータフラッシュライブラリのサンプルプログラムからの流用部くらいでデータフラッシュが動くと現時点では邪魔なのでコメントアウトしている状況です。そのため,配列で範囲を間違えるくらいしかないのかなという認識でいるため,そこに関しては大丈夫と思っています(一応何度も確認していますので)。

    余談ですが・・・基本的にOSがなくても管理できる程度のシーケンスチックなプログラムで変数にしても書く場所は1関数のみでその値を使って順番に何かするという感じなのでグローバル変数で片付けているものがほとんどです。(勉強のために割と意味もなくOSを使っただけです。)

    >あと、いっそデバッグの為に、~~
    というところは順番に直しているうちに根本原因がわかるかもしれないので自分もそう思っています。

Top Page [◀◀]  2   3   4   5   6   7   8   9   ... [▶▶Last Page