Files
2025-10-14 09:52:32 +09:00

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.