Ticket #24633

TLVを追加したカーネルがバナー出力の後に例外で停止する

Open Date: 2011-03-13 09:04 Last Update: 2011-04-05 22:45

Reporter:
Owner:
Type:
Status:
Open [Owner assigned]
MileStone:
(None)
Priority:
3
Severity:
3
Resolution:
None
File:
None

Details

わかっていること

  • 以下の経路を辿る。
    • sta_ker()
    • start_dispatch()
    • start_dispatch:
    • dispatcher:
    • bl log_dsp_enterで例外発生。
    • prc_support.Sのexc_entry:に飛ぶ。
  • 現象が発生する時、バナー出力の後の「System logging task is started on port 1.」は出ない。
  • TLV(TraceLogVisualizer)を組み込んだ状態のカーネルが起動したこともある。そしてTLVも動作し、トレースが取得できた。
  • 起動する時とそうでない時の差がどこにあるのかは現状不明。(ごめんなさい。ちょっと整理が必要です。)
  • TLVを外したカーネルでは常に期待通り動作する。

ポートした内容

  • http://www.toppers.jp/tlv.html からTLV_1.2.zipをダウンロード。( http://www.toppers.jp/download.cgi/TLV_1.2.zip )
  • ダウンロードしたファイルを展開してlogtrace/aspの内容をコピー。
  • コピーしたファイルのtrace_config.hの中で定義されているトレースログバッファのサイズをCortex-M3のRAMサイズを考慮して小さくする。
  • kernel.tfの最後に以下を追加。
    $INCLUDE"arch/logtrace/tlv.tf"$
    
  • Makefileのトレースを有効にする。
    ENABLE_TRACE = true
    
  • コンフィギュレーションファイルに以下を追加。
    #include "logtrace/trace_config.h"
    ATT_INI({ TA_NULL, TRACE_STOP, trace_initialize });
    ATT_TER({ TA_NULL, target_fput_log, trace_dump });
    
  • trace_config.hで指定されているLOG_TEX_LEAVEの引数を1つに修正。
    LOG_TEX_LEAVE(p_tcb)
    
  • trace_config.hで定義されている以下の定義をコメントアウト。(これはTLVのGUIで「指定されたリソース(CPUExceptionHandler(id==21))が見つかりません。」といった内容の例外が発生する事に対する暫定的な対策。)
    #define LOG_EXC_ENTER(excno) trace_1(LOG_TYPE_EXC|LOG_ENTER, excno)
    #define LOG_EXC_LEAVE(excno) trace_1(LOG_TYPE_EXC|LOG_LEAVE, excno)
    

Ticket History (3/6 Histories)

2011-03-13 09:04 Updated by: shintamainjp
  • New Ticket "TLVを追加したカーネルがバナー出力の後に例外で停止する" created
2011-03-13 09:13 Updated by: shintamainjp
  • Details Updated
2011-03-13 09:22 Updated by: shintamainjp
  • Details Updated
2011-03-13 09:27 Updated by: shintamainjp
  • Details Updated
2011-03-13 09:40 Updated by: shintamainjp
Comment

仮説

  • TLVを有効にした時に触らなくなる(あるいはビットを落としてしまうような)レジスタがあるのではないか?(←とすればTLVの問題?)
  • 非タスクコンテキスト状態で割り込みが入った時の挙動に問題があるのではないか?
  • シリアルドライバとの衝突があるのではないか?(←どんな?)

興味深い現象

  • 報告した通り、TLVを組み込んだカーネルでは起動しない。
  • 試しにTLVを外したカーネルをロードしてリセットすると起動する。
  • 再度TLVを組み込んだカーネルを試すと起動してしまう。(再現性は100%なので、これを元に仮説を立てると良いかも。)
  • 上記のようなステップを踏めば現状でも以下のようなトレース出力を得ることが可能。当然これはGUI上で見ることもできて便利。
    [12916027] leave from dly_tsk ercd=0.
    [12916034] enter to dly_tsk dlytim=10.
    [12916047] task 1 becomes WAITING.
    [12916054] dispatch from task 1.
    [12927007] task 1 becomes RUNNABLE.
    [12927020] dispatch to task 1.
    [12927027] leave from dly_tsk ercd=0.
    [12927034] enter to dly_tsk dlytim=10.
    [12927047] task 1 becomes WAITING.
    [12927053] dispatch from task 1.
    [12930008] task 2 becomes RUNNABLE.
    [12930020] dispatch to task 2.
    [12930027] leave from tslp_tsk ercd=-50.
    [12930033] enter to prcv_dtq dtqid=1. p_data=268444216.
    [12930043] leave from prcv_dtq ercd=-50. data=0.
    [12930050] enter to tslp_tsk tmout=100.
    [12930063] task 2 becomes WAITING.
    [12930070] dispatch from task 2.
    [12938007] task 1 becomes RUNNABLE.
    [12938020] dispatch to task 1.
    
2011-04-05 22:45 Updated by: shintamainjp
  • Component Update from (None) to toppersasp4lpc 1.6.1
  • Owner Update from (None) to shintamainjp

Attachment File List

No attachments

Edit

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » Login