609 lines
23 KiB
Plaintext
609 lines
23 KiB
Plaintext
; --------------------------------------------------------------------------------
|
|
; @Title: TRACE32 Kernel Awareness Menu
|
|
; @Description: -
|
|
; @Author: DIE
|
|
; @Copyright: (C) 1989-2022 Lauterbach GmbH, licensed for use with TRACE32(R) only
|
|
; --------------------------------------------------------------------------------
|
|
; $Id: rcx.men 18850 2022-01-26 18:41:29Z bschroefel $
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; TRACE32 Kernel Awareness Menu
|
|
; rcX from Hilscher
|
|
; --------------------------------------------------------------------------------
|
|
;
|
|
; history
|
|
; date :changes :
|
|
; 070918 : Task Debugging added Go to Task, Break at Task : akj
|
|
; 070926 : Selective Trace added (Menu Version) : akj
|
|
; 071014 : Selective Trace Task.List Window Version (Menu removed) : akj
|
|
;
|
|
; --------------------------------------------------------------------------------
|
|
; rcX specific menu
|
|
|
|
add
|
|
menu
|
|
(
|
|
popup "&rcX"
|
|
(
|
|
popup "&Tasks"
|
|
(
|
|
menuitem "&Tasks" "Task.Tasklist"
|
|
menuitem "&Stacks " "Task.Stk"
|
|
)
|
|
popup "&Objects"
|
|
(
|
|
menuitem "&Mutexes" "Task.Mtxlist"
|
|
menuitem "&Queues" "Task.QueList"
|
|
menuitem "&Semaphores" "Task.SemList"
|
|
menuitem "S&ignals" "Task.SigList"
|
|
menuitem "&Timer" "Task.TimList"
|
|
menuitem "Tri&ple Buffer" "Task.TrpList"
|
|
)
|
|
popup "&Drivers"
|
|
(
|
|
menuitem "&Interrupt" "Task.Irqlist"
|
|
menuitem "&Uart" "Task.Uartlist"
|
|
popup "&HIF"
|
|
(
|
|
menuitem "&HIF" "Task.HIFLIST"
|
|
menuitem "&Blocks" "Task.HIFBLLIST"
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
; --------------------------------------------------------------------------------
|
|
;
|
|
; Selective Trace and Go to Task
|
|
;
|
|
; Beta state, only for InHouse !!
|
|
; Bug-Reporting are welcome to:
|
|
; Andreas.Jberg@jdt.ch
|
|
;
|
|
; --------------------------------------------------------------------------------
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; go to task HLL
|
|
; --------------------------------------------------------------------------------
|
|
; a Breakpoint (Addr to task.config(magic), and Data to selected Magic is
|
|
; programmed with Write Access premission.
|
|
; After Trigger, the Dispatcher have write the selected Task to magic (ptCurTsk).
|
|
;
|
|
; A loop steps now to the next part what creats a funktion-symbol.
|
|
;
|
|
add
|
|
menu "OSRCX_TL"
|
|
(
|
|
menuitem "[:jumpto] go to Task [HLL]"
|
|
(
|
|
local &tcb_ptr &exitCtr
|
|
|
|
&exitCtr=100
|
|
&tcb_ptr=address.offset(track.address())
|
|
if !(os.file("bp$debtr$tmp$.cmm"))
|
|
Store bp$debtr$tmp$ Break
|
|
if run()
|
|
break
|
|
Break.Delete /all
|
|
Break.Set task.config(magic) /Write /Data &tcb_ptr
|
|
on PBREAK goto i_gtbreak0
|
|
go
|
|
stop
|
|
i_gtbreak0: print " Stopped at TaskSwitch"
|
|
on PBREAK
|
|
if ((data.long(d:task.config(magic)))==&tcb_ptr)
|
|
(
|
|
setup.IMASKASM on
|
|
screen.on
|
|
print " Stopped at TaskSwitch step to HLL..."
|
|
screen.off
|
|
while (((string.scan((y.function(d:r(pc))),"\\",0))==-1)&&(&exitCtr>=1))
|
|
(
|
|
step
|
|
&exitCtr=&exitCtr-1
|
|
)
|
|
screen.on
|
|
if (&exitCtr<=1)
|
|
print " no HLL Part found !"
|
|
else
|
|
print " Task found "
|
|
)
|
|
if os.file("bp$debtr$tmp$.cmm")
|
|
(
|
|
do bp$debtr$tmp$.cmm
|
|
del bp$debtr$tmp$.cmm
|
|
)
|
|
)
|
|
; --------------------------------------------------------------------------------
|
|
; go to task ASM
|
|
; --------------------------------------------------------------------------------
|
|
;
|
|
; same as "go to task hll"
|
|
; but no steps are created to hll part.
|
|
; The stop is the dispatcher write access to ptCurTsk.
|
|
;
|
|
;
|
|
menuitem "[:jumpto] go to Task [ASM]"
|
|
(
|
|
local &tcb_ptr
|
|
|
|
&tcb_ptr=address.offset(track.address())
|
|
if !(os.file("bp$debtr$tmp$.cmm"))
|
|
Store bp$debtr$tmp$ Break
|
|
if run()
|
|
break
|
|
Break.Delete /all
|
|
Break.Set task.config(magic) /Write /Data &tcb_ptr
|
|
on PBREAK goto i_gtbreak1
|
|
go
|
|
stop
|
|
i_gtbreak1: if ((data.long(d:task.config(magic)))==&tcb_ptr)
|
|
print " Stopped at TaskSwitch"
|
|
on PBREAK
|
|
if os.file("bp$debtr$tmp$.cmm")
|
|
(
|
|
do bp$debtr$tmp$.cmm
|
|
del bp$debtr$tmp$.cmm
|
|
)
|
|
)
|
|
|
|
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Task-selective Trace
|
|
; --------------------------------------------------------------------------------
|
|
; - all task switches only
|
|
; - one Task Trace
|
|
; - two Task's trace
|
|
; - Search to Taskswitch functions
|
|
;
|
|
;
|
|
separator
|
|
enable analyzer()
|
|
menuitem "[:aconfig]Taskselective Trace..."
|
|
(
|
|
local &t1_String &t2_String
|
|
local &t1_Magic &t2_Magic
|
|
local &cst_TaskNameSize
|
|
local &cst_TaskNameOffset
|
|
|
|
&cst_TaskNameSize=8.
|
|
&cst_TaskNameOffset=8.
|
|
&t1_Magic=0
|
|
&t2_Magic=0
|
|
|
|
|
|
dialog
|
|
(&
|
|
header "Taskselectiv Trace V1.1"
|
|
; --------------------------------------------------------------------------------
|
|
; Main Buttons
|
|
; --------------------------------------------------------------------------------
|
|
pos 9.0 5.5 7.0
|
|
button "OK"
|
|
(
|
|
dialog.execute apply
|
|
continue
|
|
)
|
|
pos 25.0 5.5 7.0
|
|
button "Cancel"
|
|
(
|
|
if os.file("bp$debtr$tmp$.cmm")
|
|
(
|
|
do bp$debtr$tmp$.cmm
|
|
del bp$debtr$tmp$.cmm
|
|
)
|
|
print " DONE, of all Selective Trace settings. Old Breakpoints are reloaded"
|
|
continue
|
|
)
|
|
pos 17.0 5.5 7.0
|
|
button "Reset"
|
|
(
|
|
Break.Delete /all
|
|
if os.file("bp$debtr$tmp$.cmm")
|
|
(
|
|
do bp$debtr$tmp$.cmm
|
|
del bp$debtr$tmp$.cmm
|
|
)
|
|
dialog.set str_t1 ""
|
|
dialog.set str_t2 ""
|
|
&t1_Magic=0
|
|
&t2_Macig=0
|
|
&t1_String=""
|
|
&t2_String=""
|
|
dialog.disable fe_t1
|
|
dialog.disable fe_t2
|
|
dialog.disable str_t2
|
|
dialog.enable cb2
|
|
dialog.set cb2 "0"
|
|
dialog.enable str_t1
|
|
dialog.enable gt1
|
|
dialog.enable gt2
|
|
dialog.enable cb1
|
|
dialog.set a.cbox1
|
|
|
|
print " RESET of all Selective Trace settings. Old Breakpoints are reloaded"
|
|
)
|
|
pos 1.0 5.5 7.0
|
|
apply: defbutton "Apply"
|
|
(
|
|
local &n_selTask
|
|
; all Task-changes only
|
|
if dialog.boolean(a.cbox2)
|
|
(
|
|
if !(os.file("bp$debtr$tmp$.cmm"))
|
|
store bp$debtr$tmp$ Break
|
|
Break.Delete /all
|
|
etm.ReadWriteBreak on
|
|
Break.Set task.config(magic) /Write /TraceEnable
|
|
Analyzer.Init
|
|
etm.DataTrace Both
|
|
print " ok Analyzer programmed. Only all Task-Changes are traced now"
|
|
)
|
|
; Selective Task Trace
|
|
|
|
if dialog.boolean(a.cbox1)
|
|
(
|
|
&n_SelTask=0
|
|
etm.ReadWriteBreak on
|
|
if !(os.file("bp$debtr$tmp$.cmm"))
|
|
store bp$debtr$tmp$ Break
|
|
Break.Delete /all
|
|
if ((dialog.boolean(cb1))&&(&t1_Magic>0))
|
|
(
|
|
Break.Set Task.config(magic) /Write /Data &t1_Magic /TraceOn
|
|
&n_SelTask=&n_SelTask+1
|
|
)
|
|
if ((dialog.boolean(cb2))&&(&t2_Magic>0))
|
|
(
|
|
Break.Set Task.config(magic) /Write /Data &t2_Magic /TraceOn
|
|
&n_SelTask=&n_SelTask+1
|
|
)
|
|
if &n_SelTask>0
|
|
(
|
|
Break.Set Task.config(magic) /Write /TraceOff
|
|
Print " Ok, Analyzer programmed for Trace " format.decimal(2.,&n_SelTask) " Task's"
|
|
Analyzer.Init
|
|
etm.DataTrace Both
|
|
)
|
|
else
|
|
(
|
|
Print " Wrong Setup, no Task for Trace found."
|
|
)
|
|
)
|
|
)
|
|
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Trace-Display and Search Buttons
|
|
; --------------------------------------------------------------------------------
|
|
pos 17.0 4.5 7.0
|
|
button "[:achart]Task" "Analyzer.Chart.Task /Track"
|
|
pos 25.0 4.5 7.0
|
|
button "[:perf]Task" "Analyzer.STATistic.Task"
|
|
pos 22.5 1.0 7.0
|
|
fe_t1: button "[:find]Task"
|
|
(
|
|
Analyzer.findall ADDRESS task.config(magic) cycle write DATA.L &t1_Magic
|
|
)
|
|
pos 22.5 2.0 7.0
|
|
fe_t2: button "[:find]Task"
|
|
(
|
|
Analyzer.findall ADDRESS task.config(magic) cycle write DATA.L &t2_Magic
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Display Objects
|
|
; --------------------------------------------------------------------------------
|
|
|
|
pos 1.0 1.0 10.0
|
|
str_t1: edit ""
|
|
(
|
|
)
|
|
pos 11.0 1.0 2.5
|
|
gt1: button "GT"
|
|
(
|
|
&t1_Magic=address.offset(track.address())
|
|
gosub GetTaskName &t1_Magic
|
|
entry &t1_String
|
|
dialog.set str_t1 "&t1_String"
|
|
dialog.enable fe_t1
|
|
)
|
|
pos 16.0 1.0 1.0
|
|
cb1: checkbox "enable"
|
|
(
|
|
if dialog.boolean(cb1)
|
|
(
|
|
dialog.enable gt1
|
|
dialog.enable str_t1
|
|
)
|
|
else
|
|
(
|
|
dialog.enable gt1
|
|
dialog.disable str_t1
|
|
)
|
|
)
|
|
|
|
pos 1.0 2.0 10.0
|
|
str_t2: edit ""
|
|
(
|
|
)
|
|
pos 11.0 2.0 2.5
|
|
gt2: button "GT"
|
|
(
|
|
&t2_Magic=address.offset(track.address())
|
|
gosub GetTaskName &t2_Magic
|
|
entry &t2_String
|
|
dialog.set str_t2 "&t2_String"
|
|
dialog.enable fe_t2
|
|
)
|
|
pos 16.0 2.0 1.0
|
|
cb2: checkbox "enable"
|
|
(
|
|
if dialog.boolean(cb2)
|
|
(
|
|
dialog.enable str_t2
|
|
dialog.enable gt2
|
|
)
|
|
else
|
|
(
|
|
dialog.disable str_t2
|
|
dialog.enable gt2
|
|
)
|
|
)
|
|
|
|
pos 1.0 3.2 15.0
|
|
a.cbox1: choosebox "Selective Task Trace"
|
|
(
|
|
dialog.enable cb1
|
|
dialog.enable cb2
|
|
if dialog.boolean(cb1)
|
|
(
|
|
dialog.enable gt1
|
|
dialog.enable str_t1
|
|
)
|
|
else
|
|
(
|
|
dialog.disable gt1
|
|
dialog.disable str_t1
|
|
)
|
|
if dialog.boolean(cb2)
|
|
(
|
|
dialog.enable gt2
|
|
dialog.enable str_t2
|
|
)
|
|
else
|
|
(
|
|
dialog.enable gt2
|
|
dialog.disable str_t2
|
|
)
|
|
)
|
|
|
|
pos 1.0 4.5 15.0
|
|
a.cbox2: choosebox "Task Changes only"
|
|
(
|
|
dialog.disable str_t1
|
|
dialog.disable str_t2
|
|
dialog.disable cb1
|
|
dialog.disable cb2
|
|
dialog.disable gt1
|
|
dialog.disable gt2
|
|
)
|
|
; --------------------------------------------------------------------------------
|
|
; Boxes / Descriptions
|
|
; --------------------------------------------------------------------------------
|
|
pos 0.0 0.0 32.0 4.9
|
|
box ""
|
|
pos 0.0 0.0 14.0 3.8
|
|
box "Task's"
|
|
pos 14.0 0.0 6.0 3.8
|
|
box "Trace"
|
|
pos 20.0 0.0 12.0 3.8
|
|
box "Search"
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Close Handler (Windows Close Button)
|
|
; --------------------------------------------------------------------------------
|
|
; if the Windows-Close button is pressed,
|
|
; the dialog Window is closed, but the Practice code
|
|
; is not removed.
|
|
;
|
|
; This CLOSE Event is executed, if the Window Close Button
|
|
; is pressed. It is the same Code as in Cancel Button-Code.
|
|
|
|
CLOSE
|
|
(
|
|
if os.file("bp$debtr$tmp$.cmm")
|
|
(
|
|
do bp$debtr$tmp$.cmm
|
|
del bp$debtr$tmp$.cmm
|
|
)
|
|
print " DONE, of all Selective Trace settings. Old Breakpoints are reloaded"
|
|
continue
|
|
)
|
|
|
|
|
|
)
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Init Code
|
|
; --------------------------------------------------------------------------------
|
|
&t1_Magic=address.offset(track.address())
|
|
gosub GetTaskName &t1_Magic
|
|
entry &t1_String
|
|
dialog.set str_t1 "&t1_String"
|
|
|
|
dialog.enable str_t1
|
|
dialog.disable str_t2
|
|
dialog.enable cb1
|
|
dialog.enable cb2
|
|
dialog.enable gt1
|
|
dialog.enable gt2
|
|
dialog.enable fe_t1
|
|
dialog.disable fe_t2
|
|
dialog.set a.cbox1
|
|
dialog.set cb1
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Parking
|
|
; --------------------------------------------------------------------------------
|
|
; stop the practice execution. Now, only all
|
|
; dialog objects controlls the flow.
|
|
; The end is executed by the "continue" command
|
|
; in a dialog object. At this time, the command
|
|
; behind the "stop" instruction is executed and
|
|
; remove the Dialog.
|
|
|
|
stop
|
|
dialog.end
|
|
enddo
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; Sub Code
|
|
; --------------------------------------------------------------------------------
|
|
|
|
GetTaskName:
|
|
local &TaskMagic &TaskNameCtr &Str_TaskName
|
|
entry &TaskMagic
|
|
|
|
&TaskNameCtr=1
|
|
&Str_TaskName=""
|
|
while (&TaskNameCtr<=&cst_TaskNameSize)
|
|
(
|
|
if ((data.byte(d:&TaskMagic+&TaskNameCtr+&cst_TaskNameOffset-1))!=0x0)
|
|
(
|
|
&Str_TaskName="&Str_TaskName"+conv.char(data.byte(d:&TaskMagic+&TaskNameCtr+&cst_TaskNameOffset-1))
|
|
&TaskNameCtr=&TaskNameCtr+1
|
|
)
|
|
else
|
|
(
|
|
&TaskNameCtr=&cst_TaskNameSize+1
|
|
)
|
|
)
|
|
|
|
return &Str_TaskName
|
|
|
|
|
|
)
|
|
|
|
; --------------------------------------------------------------------------------
|
|
; .eof. Dialog
|
|
; --------------------------------------------------------------------------------
|
|
|
|
)
|
|
|
|
add
|
|
menu
|
|
(
|
|
popup "Trace"
|
|
(
|
|
popup "List"
|
|
(
|
|
separator
|
|
menuitem "&Task Switches" "Analyzer.List list.task list.time ti.back ti.ref /Track"
|
|
menuitem "&Default and Tasks" "Analyzer.List list.task def /Track"
|
|
menuitem "HLL &Only and Tasks" "Analyzer.List List.Task List.HllOnly list.time ti.back ti.ref /Track"
|
|
menuitem "&Hll with Vars and Tasks" "Analyzer.List List.Task List.HllOnly Var /Track"
|
|
)
|
|
popup "Chart"
|
|
(
|
|
menuitem "[:achart]&Tasks" "Analyzer.Chart.Task"
|
|
)
|
|
popup "Statistic"
|
|
(
|
|
menuitem "[:perf]&Tasks" "Analyzer.Statistic.Task"
|
|
)
|
|
)
|
|
enable etm()
|
|
popup "Perf"
|
|
(
|
|
separator
|
|
enable 1==1
|
|
popup "&Task Runtime"
|
|
(
|
|
enable etm()
|
|
menuitem "&Prepare"
|
|
(
|
|
Store bp$pertr$tmp$ Break
|
|
Break.Delete /all
|
|
Break.Set task.config(magic) /Write /TraceEnable
|
|
etm.DataTrace Both
|
|
print " ok, ETM is programmed"
|
|
)
|
|
enable etm()
|
|
menuitem "[:perf]Show &Numerical" "Analyzer.STATistic.TASK"
|
|
enable etm()
|
|
menuitem "[:achart]Show as &Timing" "Analyzer.CHART.TASK"
|
|
separator
|
|
menuitem "[:remove]Reset"
|
|
(
|
|
Break.Delete /all
|
|
if os.file("bp$pertr$tmp$.cmm")
|
|
(
|
|
do bp$pertr$tmp$
|
|
del bp$pertr$tmp$.cmm
|
|
)
|
|
etm.clear
|
|
print " Trigger is reseted, ETm DataTrace is setting to Both."
|
|
)
|
|
|
|
)
|
|
|
|
enable etm()
|
|
popup "Task &Function Runtime"
|
|
(
|
|
|
|
enable 0==1
|
|
menuitem "&Prepare"
|
|
(
|
|
)
|
|
|
|
menuitem "[:perf]Show &Numerical" "Analyzer.STATistic.TASKFUNC"
|
|
menuitem "[:perf]Show as &Tree" "Analyzer.STATistic.TASKTREE"
|
|
menuitem "[:perf]Show &Detailed Tree" "Analyzer.STATistic.TASKTREE ALL"
|
|
menuitem "[:achart]Show as &Timing" "Analyzer.CHART.TASKFUNC"
|
|
menuitem "[:alist]Show N&esting" "Analyzer.List List.Task FUNC TI.FUNC"
|
|
separator
|
|
enable 0==1
|
|
menuitem "[:remove]Reset"
|
|
(
|
|
Break.Delete /all
|
|
if os.file("bp$pertr$tmp$.cmm")
|
|
(
|
|
do bp$pertr$tmp$
|
|
del bp$pertr$tmp$.cmm
|
|
)
|
|
)
|
|
)
|
|
|
|
|
|
enable etm()
|
|
popup "Task &Status"
|
|
(
|
|
enable 0==1
|
|
menuitem "&Prepare"
|
|
(
|
|
)
|
|
menuitem "[:perf]Show &Numerical" "Analyzer.STATistic.TASKSTATE"
|
|
menuitem "[:achart]Show as &Timing" "Analyzer.CHART.TASKSTATE"
|
|
separator
|
|
enable 0==1
|
|
menuitem "[:remove]Reset"
|
|
(
|
|
Break.Delete /all
|
|
if os.file("bp$pertr$tmp$.cmm")
|
|
(
|
|
do bp$pertr$tmp$
|
|
del bp$pertr$tmp$.cmm
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
;.eof.
|