Files
Gen4_R-Car_Trace32/2_Trunk/demo/arm/kernel/emcos/emcos.t32
2025-10-14 09:52:32 +09:00

1345 lines
62 KiB
Plaintext

;@Extension.Container.Version.1
;-- DO NOT CHANGE THE LINE ABOVE --
IF (VERSION.BUILD.BASE()<138311.)
(
PRINTF %ERROR "%s: Software too old, please contact support@lauterbach.com." "eMCOS"
ENDDO
)
PMACRO.EXPLICIT
PRIVATE &sParamline &sPpf &sCmd &sParameters &sAccess &sAccessSpaces &sAccessMachine &sOptionAccess &sOptionAccessMisc &sName &sMachine &sArguments &nVariant
PRIVATE &bTaskConfig &bExtLoad &bCleanup
ENTRY &sCmd %LINE &sParamline
&sParameters=STRing.SCANAndExtract("&sParamline","PARAMETERS=","")
&sAccess=STRing.SCANAndExtract("&sParamline","ACCESS=","")
&sAccessSpaces=STRing.SCANAndExtract("&sParamline","ACCESSSPACES=","")
&sAccessMachine=STRing.SCANAndExtract("&sParamline","ACCESSMACHINE=","")
&sName=STRing.SCANAndExtract("&sParamline","NAME=","")
&sMachine=STRing.SCANAndExtract("&sParamline","MACHINE=","")
&sArguments=STRing.SCANAndExtract("&sParamline","ARGUMENTS=","")
&sParameters=STRing.Replace("&sParameters","""","",0.)
IF ("&sArguments"!="")
&sArguments=&sArguments
IF ("&sAccess"!="")
&sOptionAccess="/ACCESS &sAccess"
IF ("&sAccessSpaces"!="")
&sOptionAccessMisc="/ACCESSSPACES &sAccessSpaces"
IF ("&sAccessMachine"!="")
&sOptionAccessMisc="&(sOptionAccessMisc) /ACCESSMACHINE &sAccessMachine"
&sName=STRing.Replace("&sName","""","",0.)
&bTaskConfig=STRing.SCAN("task.config,ext.config",STRing.LoWeR("&sCmd"),0.)>=0.
&bExtLoad=STRing.SCAN("ext.load",STRing.LoWeR("&sCmd"),0.)>=0.
&bCleanup=STRing.SCAN("task.res,ext.res,ext.delete",STRing.LoWeR("&sCmd"),0.)>=0.
&sPpf=OS.PresentPracticeFile()
IF (&bTaskConfig||&bExtLoad)
(
GOSUB execute_container_selection "&sParameters" "&sAccess" "&sMachine" "&sArguments"
RETURNVALUES &nVariant
IF ("&nVariant"!="32.")&&("&nVariant"!="64.")
(
IF CPUIS64BIT()
&nVariant="64."
ELSE
&nVariant="32."
)
IF STRing.ComPare("&sArguments","*32BIT*")
&nVariant="32."
ELSE IF STRing.ComPare("&sArguments","*64BIT*")
&nVariant="64."
)
IF (&bTaskConfig)
(
PRIVATE &sMachineName
&sMachineName="eMCOS"
TASK.RESet
IF (&nVariant==32.)
(
GOSUB extension_32bit "&sParameters" "&sOptionAccess"
IF !STRing.Compare("&sArguments","*MENU=NONE*")
GOSUB menu_32bit "&sMachineName" ""
GOSUB autoload_32bit ""
)
ELSE IF (&nVariant==64.)
(
GOSUB extension_64bit "&sParameters" "&sOptionAccess"
IF !STRing.Compare("&sArguments","*MENU=NONE*")
GOSUB menu_64bit "&sMachineName" ""
GOSUB autoload_64bit ""
)
)
ELSE IF (&bExtLoad)
(
PRIVATE &sMachineName &sInfix &sOptionName &sOptionMachine
&sInfix=""
&sMachineName="eMCOS"
IF ("&sName"!="")
(
&sInfix=STRing.UPpeR("&(sName).")
&sMachineName="&(sName)"
&sOptionName="/NAME &sMachineName"
)
ELSE IF PRACTICE.FUNCtion.AVAILable(SYStem.Option.MACHINESPACES)
(
IF SYStem.Option.MACHINESPACES()
&sInfix=TASK.TRANSPOSE.INFIX(OS.FILE.BASENAME("&sPpf",".**"))+"."
)
IF ("&sMachine"!="")
(
&sOptionMachine="/MACHINE &sMachine"
)
IF (&nVariant==32.)
(
GOSUB extension_32bit "&sParameters" "&sOptionAccess &sOptionAccessMisc &sOptionName &sOptionMachine"
IF !STRing.Compare("&sArguments","*MENU=NONE*")
GOSUB menu_32bit "&sMachineName" "&sInfix"
GOSUB autoload_32bit "&sOptionMachine"
)
ELSE IF (&nVariant==64.)
(
GOSUB extension_64bit "&sParameters" "&sOptionAccess &sOptionAccessMisc &sOptionName &sOptionMachine"
IF !STRing.Compare("&sArguments","*MENU=NONE*")
GOSUB menu_64bit "&sMachineName" "&sInfix"
GOSUB autoload_64bit "&sOptionMachine"
)
)
ELSE IF (&bCleanup)
(
PRIVATE &sMachineName &sOptionMachine
&sMachineName="eMCOS"
IF ("&sName"!="")
(
&sMachineName="&(sName)"
)
IF ("&sMachine"!="")
(
&sOptionMachine="/MACHINE &sMachine"
)
GOSUB menu_delete "&sMachineName"
GOSUB autoload_delete "&sOptionMachine"
)
ENDDO
extension_32bit: ; (options)
(
PARAMETERS &sParameters &sOptions
EXTension.LOAD &sParameters &sOptions
(
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
AAAH6AAAAAYAAAANAAAAAAAAAAAAAAAAaHR0cHM6Ly9zdm4uaW50ZXJuLmxhdXRlcmJhY2guY29t
L3N2bi9rZXJuZWxzcmMvYnJhbmNoZXMvbmlnaHRseQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABodHRwczovL3N2bi5pbnRlcm4u
bGF1dGVyYmFjaC5jb20vc3ZuL2tlcm5lbHNyYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJhdW1l
aXN0ZXIAAAAAAABlZGstbGludXg2NGJpdC03AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAR0NDIDkuNS4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfoAAAABgAAAA0AAABOAAAn0gAAB+gA
AAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAATfOZU1DT1MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAG1jb3NfZGVidWdf
ZGJnbWtjYnMAbWNvc19ta2NiX3B0cl90YWJsZQBta2NiX3QAAC5jbHMAAAAAY2xzY2JfdAAucnVu
bmluZwAAAAAudGNiAAAAAHRjYl90AAAALnRpZAAAAAAuc3AALm1pZ3JhdGFibGUAbWlncmF0YWJs
ZV90Y2JfdAAAAAAuYXR0cl9zdGF0ZQAuY3ByaQAAAC5lbnRyeQAALmV4aW5mAAAucHJvY2VzcwAA
AABwcm9jZXNzX3QAAAAuc3BhY2UudWF0YgAudWxzdGFjay5zdGthZGRyAAAAAC51bHN0YWNrLnN0
a3N6AAAucGlkAAAAAHBvc2l4X3Byb2NfdAAAAAAuZmxhZ3MAAC5waW5mbwAALnByb2NpZABQSU5G
TwAAAC5uYW1lAAAAcG9zaXhfZ2xvYmFsX3Byb2NfZGVzY190LnBvc2l4X3Byb2NfYXJyYXkAAABQ
REUAdGNiX2NvcmUwAAAAdGhyZWFkX2VudHJ5X2RiZwAAAABhcl90YXNrX2VudHJ5AAAAcG9zaXhf
ZGVzYwAATWF4UHJvYwBUb3BQSQAAAFVBVEIAAAAAcGlkIAAAAABuYW1lICAgICAgICAgICAgAAAA
AGNwdSAgIAAAIHByaSAAAABzdGF0ZSAgAHR5cGUgICAgAAAAAGVudHJ5IAAAVEFTSy5UaHJlYWQg
JXgAAFRBU0suVAAAJTh4ACU0ZC4AAAAAJTNkLgAAAABydW5uaW5nAG5vbmV4aXN0AAAAAGRvcm1h
bnQAd2FpdAAAAAByZWFkeQAAAHB0X3RocmVhZF9lbnRyeQBwb3NpeAAAAHRrX3Rhc2tfZW50cnkA
AAB0LWtlcm5lbAAAAABvc2VrAAAAAGVtY29zAAAATGlzdCAlYQBhAAAAKCVzKQAAAAAlcwAAJTJk
LgAAAABtAAAAc29tZXRoaW5nIGFkZGl0aW9uYWwKAAAAU29ycnk6IHRocmVhZCBub3QgZm91bmQu
AAAAAG1hZ2ljICAgIAAAACB0aWQgAAAAVEhSRUFEAABUAAAAVGhyZWFkAABfX1JUT1NfRU1DT1Nf
X1RBU0tfVAAAAABwcm9jZXNzAFRBU0suUHJvY2VzcyAleABUQVNLLlAAAG5vdGV4aXN0AAAAAGlu
aXRpYWxpemluZwAAAAB0ZXJtaW5hdGVkAABzeXN0ZW0AAG5vcm1hbAAAaWxsZWdhbCgweCV4KQAA
AHRocmVhZHMKAAAAAG1hZ2ljICAgICAgdGlkICAgbmFtZQoAACAlNGQuICAAIHBpZCAAAABuYW1l
ICAgICAgICAgICAgICAgICAgICAgICAgAAAAAHN0YXRlICAgIAAAAHR0YiAAAAAAU29ycnk6IHBy
b2Nlc3Mgbm90IGZvdW5kLgAAAFNvcnJ5OiBubyBwcm9jZXNzZXMgZm91bmQuAABQUk9DRVNTAFAA
AABQcm9jZXNzAF9fUlRPU19FTUNPU19fVEFTS19QAAAAAE1URCBWZXJzaW9uICAlcyAgJXMgICVz
ICAKCgBta2NicyAgICAgICAgICAgJTh4ICAAAABubyBhY2Nlc3MgAABtYWdpYyAgICAgICAgICAg
JTh4ICAAAABudW0gY29yZXMgICAgICAgICAgICAlM2QuCgAAbnVtIHRjYnMgcGVyIGNvcmUgICAg
JTNkLgoAAFRFU1QAAAAAYXJndW1lbnQgICAgICAgIHZhbHVlICAgICBjb250ZW50ICAgc3ltYm9s
AABGY3RUYXNrQ29uZmlnOiBwYXIxOiAweFBUUkZPUk1BVCA9ICVzAAAAbWFnaWMAAABtYWdpYzoA
AGludmFsaWQgY29yZQAAAABtYWdpY3NpemUAAABtYWdpY2JlZ2luAABtYWdpY2VuZAAAAAB1bmtu
b3duIHRvcGljAAAAVEFTSy5DT05GSUcAX19SVE9TX01ZUlRPU19fRlVOQwBfbWFpbgAAAF90aHJl
YWQAYXJfdGFza19lbnRyeV8AAGNwc3IAAAAAcjAAAHIxAAByMgAAcjMAAHI0AAByNQAAcjYAAHI3
AAByOF91c3IAAHI5X3VzcgAAcjEwX3VzcgByMTFfdXNyAHIxMl91c3IAcjEzX3VzcgByMTRfdXNy
AHBjAABoYXJkd2FyZXRocmVhZAAALS0tICBUQVNLICBtYWdpYyA9ICU4eAAAICBuYW1lID0gJXMg
IC0tLQAAAABfX1JUT1NfRU1DT1NfX0FMAAAAAF9fUlRPU19FTUNPU19fQVMAAAAAX19SVE9TX0VN
Q09TX19BVAAAAABlTUNPUwAAAEFSTQBEQVRBAAAAAgAAAAAAADMkAAAAAAAAAAMAWwAAAAQAMAAA
EUQAAAADAFsAAAAEADAAABMoAAAzQAAAM0wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAM1QAADNcAAAzYAAAM2gAAAr0AAAAAgAAAAAAADRQAAAAAAAAAAMAQgAAAAQAwAAAF/AAAAAC
AAAAAAAANGwAAAAAAAAAAwBCAAAABADAAAAWvAAANIgAADSQAAA0lAAANJwAABPoAAAzQAAANBQA
ADQcAAA0PAAANEgAAAAAAAAAAQBQAAAAADVMAAAbvAAANUQAADVEAAAz8AAAM/AAABuIAAA19AAA
AAMAAAAXAAAAAAAANgAAAB2IAAA2NAAAAAAAAAAEAAA2PAAAAAAAAAAEAAA2QAAAAAAAAAAEAAA2
RAAAAAAAAAAEAAA2SAAAAAAAAAAEAAA2TAAAAAAAAAAEAAA2UAAAAAAAAAAEAAA2VAAAAAAAAAAE
AAA2WAAAAAAAAAAEAAA2XAAAAAAAAAAEAAA2ZAAAAAAAAAAEAAA2bAAAAAAAAAAEAAA2dAAAAAAA
AAAEAAA2fAAAAAAAAAAEAAA2hAAAAAAAAAAEAAA2jAAAAAAAAAAEAAA2lAAAAAAAAAAEAAAAAAAA
AAAAAAAAAAA2mAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAndAAAJ9AAADbUAAAnTAAANugAAChYAAA2
/AAAKTwAADPwAAA3EAAANxgAAAAAVDMyRQ==
)
RETURN
)
menu_32bit: ;(header, infix)
(
PMACRO.LOCK
(
PRIVATE &sHeader &sInfix &sMenuName
PARAMETERS &sHeader &sInfix
&sMenuName=TASK.TRANSPOSE.INFIX("&sHeader")
IF MENU.EXIST("TASK.&(sMenuName)")
MENU.Delete.NAME TASK.&(sMenuName)
IF MENU.EXIST("EXT.&(sMenuName)")
MENU.Delete.NAME EXT.&(sMenuName)
MENU.ReProgram
(&+
; --------------------------------------------------------------------------------
; @Title: eMCOS specific menu
; @Description: -
; @Keywords: emcos menu awareness
; @Author: DIE
; @Copyright: (c) 1989-2014 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: emcos.m 7861 2022-07-29 13:45:42Z amerkle $
NAME "TASK.&sMenuName"
IF !MENU.EXIST("TASK.&sMenuName")
(
add
menu
(
popup "&eMCOS"
(
default
menuitem "Display &Threads" "TASK.&(sInfix)Thread"
menuitem "Display &Processes" "TASK.&(sInfix)Process"
separator
popup "&Stack Coverage"
(
menuitem "&List Stacks" "TASK.&(sInfix)STacK.view"
menuitem "Add Task" "TASK.&(sInfix)STacK.ADD"
menuitem "Remove Task" "TASK.&(sInfix)STacK.ReMove"
menuitem "Reset Coverage"
(
if icd()||simulator()
(
PRIVATE &yes
dialog.yesno "Overwrite unused stack space" "with stack fill pattern?"
entry &yes
if !&yes
enddo
)
TASK.&(sInfix)STacK.Init
)
)
)
popup "Trace"
(
popup "[:alist]List"
(
separator
menuitem "&Task Switches" "Trace.List List.TASK"
menuitem "&Default and Tasks" "Trace.List List.TASK DEFault"
)
)
popup "Perf"
(
separator
popup "&Task Runtime"
(
menuitem "&Prepare"
(
if t.method.analyzer()
(
Analyzer.AutoInit on
)
if trace.flow()
(
Break.Delete /TraceEnable
Break.Set task.config(magic) /Write /TraceEnable
)
Trace.Init
)
menuitem "[:perf]Show &Numerical" "Trace.STATistic.TASK"
menuitem "[:achart]Show as &Timing" "Trace.CHART.TASK"
menuitem "[:achart]Tracking with Trace &List"
(
Trace.List List.TASK DEFault /Track
Trace.CHART.TASK /Track
)
)
popup "Task &Function Runtime"
(
menuitem "&Prepare"
(
if t.method.analyzer()
(
Analyzer.AutoInit on
Analyzer.STATistic.PreFetch on
)
if trace.flow()
(
Break.Delete /TraceData
Break.Set task.config(magic) /Write /TraceData
)
Trace.Init
)
menuitem "[:perf]Show &Numerical" "Trace.STATistic.TASKFUNC"
menuitem "[:perf]Show as &Tree" "Trace.STATistic.TASKTREE"
menuitem "[:perf]Show &Detailed Tree" "Trace.STATistic.TASKTREE ALL"
menuitem "[:achart]Show as &Timing" "Trace.CHART.TASKFUNC"
menuitem "[:alist]Show N&esting" "Trace.List List.TASK FUNC TI.FUNC"
)
popup "Task &Status"
(
menuitem "&Prepare"
(
if t.method.analyzer()
(
Analyzer.AutoInit on
)
)
menuitem "[:perf]Show &Numerical" "Trace.STATistic.TASKSTATE"
menuitem "[:achart]Show as &Timing" "Trace.CHART.TASKSTATE"
menuitem "[:achart]Tracking with Trace &List"
(
Trace.List List.TASK DEFault /Track
Trace.CHART.TASKSTATE /Track
)
)
popup "CPU Load"
(
menuitem "Set Idle Task..."
(
dialog
(
header "Set Idle Task"
pos 0. 0. 24. 3.
box "Name of idle task"
pos 1. 1. 22. 1.
idletask: defedit "BKGR" ""
pos 3. 3. 7. 1.
defbutton "OK"
(
PRIVATE &idletask
&idletask=dialog.string(idletask)
GROUP.CreateTASK "idle" "&idletask"
GROUP.COLOR "idle" NONE
GROUP.COLOR "other" RED
dialog.end
)
pos 14. 3. 7. 1.
button "Cancel" "dialog.end"
)
)
menuitem "[:perf]Show Numerical"
(
IF !GROUP.EXIST(idle)
(
DIALOG.OK "Please set idle task first!"
ENDDO
)
GROUP.MERGE "idle"
GROUP.MERGE "other"
Trace.STATistic.TASK
)
menuitem "[:aprochart]Show Profiling"
(
IF !GROUP.EXIST(idle)
(
DIALOG.OK "Please set idle task first!"
ENDDO
)
GROUP.MERGE "idle"
GROUP.MERGE "other"
Trace.PROfileChart.TASK
)
menuitem "Disable CPU Load View"
(
GROUP.SEParate "idle"
GROUP.SEParate "other"
)
menuitem "Enable CPU Load View"
(
IF !GROUP.EXIST(idle)
(
DIALOG.OK "Please set idle task first!"
ENDDO
)
GROUP.MERGE "idle"
GROUP.MERGE "other"
)
)
)
//popup "&Help"
//(
// menuitem "[:manual]eMCOS Awareness Manual" "HELP __RTOS_EMCOS_"
//)
)
menu "task.&(sInfix)t"
(
default
menuitem "Display detailed"
(
PRIVATE &magic
&magic=address.offset(track.address())
TASK.&(sInfix)Thread &magic
)
menuitem "Display thread struct"
(
PRIVATE &address
&address=track.address()
Var.View %Open %String (tcb_t*)(&address)
)
separator
menuitem "Display Stack Frame"
(
PRIVATE &magic
&magic=address.offset(track.address())
Frame /Locals /Caller /TASK &magic
)
menuitem "Display Registers"
(
PRIVATE &magic
&magic=address.offset(track.address())
Register /Task &magic
)
menuitem "Switch Context"
(
PRIVATE &nAddress
&nAddress=ADDRESS.OFFSET(TRACK.ADDRESS())
Register.TASK &nAddress
)
separator
menuitem "Add to Stack Cov"
(
PRIVATE &nAddress
&nAddress=ADDRESS.OFFSET(TRACK.ADDRESS())
TASK.&(sInfix)STacK.ADD &nAddress
)
menuitem "Rm from Stack Cov"
(
PRIVATE &nAddress
&nAddress=ADDRESS.OFFSET(TRACK.ADDRESS())
TASK.&(sInfix)STacK.RM &nAddress
)
separator
menuitem "Dump thread entry"
(
PRIVATE &address
&address=track.address()
Data.dump &address /Long /dialog
)
)
menu "task.&(sInfix)p"
(
default
menuitem "Display detailed"
(
PRIVATE &magic
&magic=address.offset(track.address())
TASK.&(sInfix)Process &magic
)
menuitem "Display process struct"
(
PRIVATE &address
&address=track.address()
Var.View %Open %String (posix_proc_t*)(&address)
)
menuitem "Dump process entry"
(
PRIVATE &address
&address=track.address()
Data.dump &address /Long /dialog
)
)
)
)
)
PMACRO.UNLOCK
RETURN
)
autoload_32bit: ;(options)
(
PARAMETERS &sOptions
RETURN
)
extension_64bit: ; (options)
(
PARAMETERS &sParameters &sOptions
EXTension.LOAD &sParameters &sOptions
(
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
AAAAAAAAAAAAAAAAYmF1bWVpc3RlcgAAAAAAAGVkay1saW51eDY0Yml0LTcAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABHQ0MgOS41LjAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+gAAAAG
AAAADQAAAE4AACfSAAAH6AAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAABN85lTUNPUwAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAgAAAAbWNvc19kZWJ1Z19kYmdta2NicwBtY29zX21rY2JfcHRyX3RhYmxlAG1rY2JfdAAALmNs
cwAAAABjbHNjYl90AC5ydW5uaW5nAAAAAC50Y2IAAAAAdGNiX3QAAAAudGlkAAAAAC5zcAAubWln
cmF0YWJsZQBtaWdyYXRhYmxlX3RjYl90AAAAAC5hdHRyX3N0YXRlAC5jcHJpAAAALmVudHJ5AAAu
ZXhpbmYAAC5wcm9jZXNzAAAAAHByb2Nlc3NfdAAAAC5zcGFjZS51YXRiAC51bHN0YWNrLnN0a2Fk
ZHIAAAAALnVsc3RhY2suc3Rrc3oAAC5waWQAAAAAcG9zaXhfcHJvY190AAAAAC5mbGFncwAALnBp
bmZvAAAucHJvY2lkAFBJTkZPAAAALm5hbWUAAABwb3NpeF9nbG9iYWxfcHJvY19kZXNjX3QucG9z
aXhfcHJvY19hcnJheQAAAFBERQB0Y2JfY29yZTAAAAB0aHJlYWRfZW50cnlfZGJnAAAAAGFyX3Rh
c2tfZW50cnkAAABwb3NpeF9kZXNjAABNYXhQcm9jAFRvcFBJAAAAVUFUQgAAAABwaWQgAAAAAG5h
bWUgICAgICAgICAgICAAAAAAY3B1ICAgAAAgcHJpIAAAAHN0YXRlICAAdHlwZSAgICAAAAAAZW50
cnkgAABhAAAAbQAAAFRBU0suVGhyZWFkICV4AABUQVNLLlQAACUxNngAAAAAJTRkLgAAAAAlM2Qu
AAAAACUyZC4AAAAAKCVzKQAAAABydW5uaW5nAG5vbmV4aXN0AAAAAGRvcm1hbnQAd2FpdAAAAABy
ZWFkeQAAAHB0X3RocmVhZF9lbnRyeQBwb3NpeAAAAHRrX3Rhc2tfZW50cnkAAAB0LWtlcm5lbAAA
AABvc2VrAAAAAGVtY29zAAAATGlzdCAlYQAlcwAAc29tZXRoaW5nIGFkZGl0aW9uYWwKAAAAU29y
cnk6IHRocmVhZCBub3QgZm91bmQuAAAAAG1hZ2ljICAgICAgICAgICAAAAAAIHRpZCAAAABUSFJF
QUQAAFQAAABUaHJlYWQAAF9fUlRPU19FTUNPU19fVEFTS19UAAAAAHByb2Nlc3MAVEFTSy5Qcm9j
ZXNzICV4AFRBU0suUAAAbm90ZXhpc3QAAAAAaW5pdGlhbGl6aW5nAAAAAHRlcm1pbmF0ZWQAAHN5
c3RlbQAAbm9ybWFsAABpbGxlZ2FsKDB4JXgpAAAAdGhyZWFkcwoAAAAAbWFnaWMgICAgICAgICAg
ICAgdGlkICAgbmFtZQoAAAAgJTRkLiAgACBwaWQgAAAAbmFtZSAgICAgICAgICAgICAgICAgICAg
ICAgIAAAAABzdGF0ZSAgICAAAAB0dGIgAAAAAFNvcnJ5OiBwcm9jZXNzIG5vdCBmb3VuZC4AAABT
b3JyeTogbm8gcHJvY2Vzc2VzIGZvdW5kLgAAUFJPQ0VTUwBQAAAAUHJvY2VzcwBfX1JUT1NfRU1D
T1NfX1RBU0tfUAAAAABNVEQgVmVyc2lvbiAgJXMgICVzICAlcyAgCgoAbWtjYnMgICAgICAgICAg
ICUxNnggIAAAbm8gYWNjZXNzIAAAbWFnaWMgICAgICAgICAgICUxNnggIAAAbnVtIGNvcmVzICAg
ICAgICAgICAgJTNkLgoAAG51bSB0Y2JzIHBlciBjb3JlICAgICUzZC4KAABURVNUAAAAAGFyZ3Vt
ZW50ICAgICAgICB2YWx1ZSAgICAgICAgICAgICBjb250ZW50ICAgICAgICAgICBzeW1ib2wAAEZj
dFRhc2tDb25maWc6IHBhcjE6IDB4UFRSRk9STUFUID0gJXMAAABtYWdpYwAAAG1hZ2ljOgAAaW52
YWxpZCBjb3JlAAAAAG1hZ2ljc2l6ZQAAAG1hZ2ljYmVnaW4AAG1hZ2ljZW5kAAAAAHVua25vd24g
dG9waWMAAABUQVNLLkNPTkZJRwBfX1JUT1NfTVlSVE9TX19GVU5DAF9tYWluAAAAX3RocmVhZABh
cl90YXNrX2VudHJ5XwAAc3BfZWwwAABjcHNyAAAAAHgxOQB4MjAAeDIxAHgyMgB4MjMAeDI0AHgy
NQB4MjYAeDI3AHgyOAB4MjkAeDMwAHBjAABzcAAAaGFyZHdhcmV0aHJlYWQAAC0tLSAgVEFTSyAg
bWFnaWMgPSAlOHgAACAgbmFtZSA9ICVzICAtLS0AAAAAX19SVE9TX0VNQ09TX19BTAAAAABfX1JU
T1NfRU1DT1NfX0FTAAAAAF9fUlRPU19FTUNPU19fQVQAAAAAZU1DT1MAAABBUk02NABEQVRBAAAA
AgAAAAAAADzMAAAAAAAAAAMAawAAAAQAMAAAE+gAAAADAGsAAAAEADAAABYgAAA86AAAPPwAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPQQAAD0MAAA9EAAAPRgAAA1kAAAAAgAAAAAA
AD4IAAAAAAAAAAMAUgAAAAQAwAAAHDAAAAACAAAAAAAAPiQAAAAAAAAAAwBSAAAABADAAAAagAAA
PkAAAD5IAAA+TAAAPlQAABcIAAA86AAAPcwAAD3UAAA99AAAPgAAAAAAAAAAAQBQAAAAAD8EAAAg
rAAAPvwAAD78AAA9oAAAPaAAACB4AAA/vAAAAAMAAAAXAAAAAAAAP8gAACLoAAAAAAAAP/wAAAAA
AAAAAAAAAAAAAAAIAAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAIAAAAAAAAQAwAAAAAAAAAAAAAAAAA
AAAIAAAAAAAAQBAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAIAAAAAAAA
QBgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAQBwAAAAAAAAAAAAAAAAAAAAIAAAAAAAAQCAAAAAAAAAA
AAAAAAAAAAAIAAAAAAAAQCQAAAAAAAAAAAAAAAAAAAAIAAAAAAAAQCgAAAAAAAAAAAAAAAAAAAAI
AAAAAAAAQCwAAAAAAAAAAAAAAAAAAAAIAAAAAAAAQDAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAQDQA
AAAAAAAAAAAAAAAAAAAIAAAAAAAAQDgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAQDwAAAAAAAAAAAAA
AAAAAAAIAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAQEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALwgAAC9w
AABAgAAALuAAAECUAAAv/AAAQKgAADD4AAA9oAAAQLwAAEDEAAAAAFQzMkU=
)
RETURN
)
menu_64bit: ;(header, infix)
(
PMACRO.LOCK
(
PRIVATE &sHeader &sInfix &sMenuName
PARAMETERS &sHeader &sInfix
&sMenuName=TASK.TRANSPOSE.INFIX("&sHeader")
IF MENU.EXIST("TASK.&(sMenuName)")
MENU.Delete.NAME TASK.&(sMenuName)
IF MENU.EXIST("EXT.&(sMenuName)")
MENU.Delete.NAME EXT.&(sMenuName)
MENU.ReProgram
(&+
; --------------------------------------------------------------------------------
; @Title: eMCOS specific menu
; @Description: -
; @Keywords: emcos menu awareness
; @Author: DIE
; @Copyright: (c) 1989-2014 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: emcos.m 7861 2022-07-29 13:45:42Z amerkle $
NAME "TASK.&sMenuName"
IF !MENU.EXIST("TASK.&sMenuName")
(
add
menu
(
popup "&eMCOS"
(
default
menuitem "Display &Threads" "TASK.&(sInfix)Thread"
menuitem "Display &Processes" "TASK.&(sInfix)Process"
separator
popup "&Stack Coverage"
(
menuitem "&List Stacks" "TASK.&(sInfix)STacK.view"
menuitem "Add Task" "TASK.&(sInfix)STacK.ADD"
menuitem "Remove Task" "TASK.&(sInfix)STacK.ReMove"
menuitem "Reset Coverage"
(
if icd()||simulator()
(
PRIVATE &yes
dialog.yesno "Overwrite unused stack space" "with stack fill pattern?"
entry &yes
if !&yes
enddo
)
TASK.&(sInfix)STacK.Init
)
)
)
popup "Trace"
(
popup "[:alist]List"
(
separator
menuitem "&Task Switches" "Trace.List List.TASK"
menuitem "&Default and Tasks" "Trace.List List.TASK DEFault"
)
)
popup "Perf"
(
separator
popup "&Task Runtime"
(
menuitem "&Prepare"
(
if t.method.analyzer()
(
Analyzer.AutoInit on
)
if trace.flow()
(
Break.Delete /TraceEnable
Break.Set task.config(magic) /Write /TraceEnable
)
Trace.Init
)
menuitem "[:perf]Show &Numerical" "Trace.STATistic.TASK"
menuitem "[:achart]Show as &Timing" "Trace.CHART.TASK"
menuitem "[:achart]Tracking with Trace &List"
(
Trace.List List.TASK DEFault /Track
Trace.CHART.TASK /Track
)
)
popup "Task &Function Runtime"
(
menuitem "&Prepare"
(
if t.method.analyzer()
(
Analyzer.AutoInit on
Analyzer.STATistic.PreFetch on
)
if trace.flow()
(
Break.Delete /TraceData
Break.Set task.config(magic) /Write /TraceData
)
Trace.Init
)
menuitem "[:perf]Show &Numerical" "Trace.STATistic.TASKFUNC"
menuitem "[:perf]Show as &Tree" "Trace.STATistic.TASKTREE"
menuitem "[:perf]Show &Detailed Tree" "Trace.STATistic.TASKTREE ALL"
menuitem "[:achart]Show as &Timing" "Trace.CHART.TASKFUNC"
menuitem "[:alist]Show N&esting" "Trace.List List.TASK FUNC TI.FUNC"
)
popup "Task &Status"
(
menuitem "&Prepare"
(
if t.method.analyzer()
(
Analyzer.AutoInit on
)
)
menuitem "[:perf]Show &Numerical" "Trace.STATistic.TASKSTATE"
menuitem "[:achart]Show as &Timing" "Trace.CHART.TASKSTATE"
menuitem "[:achart]Tracking with Trace &List"
(
Trace.List List.TASK DEFault /Track
Trace.CHART.TASKSTATE /Track
)
)
popup "CPU Load"
(
menuitem "Set Idle Task..."
(
dialog
(
header "Set Idle Task"
pos 0. 0. 24. 3.
box "Name of idle task"
pos 1. 1. 22. 1.
idletask: defedit "BKGR" ""
pos 3. 3. 7. 1.
defbutton "OK"
(
PRIVATE &idletask
&idletask=dialog.string(idletask)
GROUP.CreateTASK "idle" "&idletask"
GROUP.COLOR "idle" NONE
GROUP.COLOR "other" RED
dialog.end
)
pos 14. 3. 7. 1.
button "Cancel" "dialog.end"
)
)
menuitem "[:perf]Show Numerical"
(
IF !GROUP.EXIST(idle)
(
DIALOG.OK "Please set idle task first!"
ENDDO
)
GROUP.MERGE "idle"
GROUP.MERGE "other"
Trace.STATistic.TASK
)
menuitem "[:aprochart]Show Profiling"
(
IF !GROUP.EXIST(idle)
(
DIALOG.OK "Please set idle task first!"
ENDDO
)
GROUP.MERGE "idle"
GROUP.MERGE "other"
Trace.PROfileChart.TASK
)
menuitem "Disable CPU Load View"
(
GROUP.SEParate "idle"
GROUP.SEParate "other"
)
menuitem "Enable CPU Load View"
(
IF !GROUP.EXIST(idle)
(
DIALOG.OK "Please set idle task first!"
ENDDO
)
GROUP.MERGE "idle"
GROUP.MERGE "other"
)
)
)
//popup "&Help"
//(
// menuitem "[:manual]eMCOS Awareness Manual" "HELP __RTOS_EMCOS_"
//)
)
menu "task.&(sInfix)t"
(
default
menuitem "Display detailed"
(
PRIVATE &magic
&magic=address.offset(track.address())
TASK.&(sInfix)Thread &magic
)
menuitem "Display thread struct"
(
PRIVATE &address
&address=track.address()
Var.View %Open %String (tcb_t*)(&address)
)
separator
menuitem "Display Stack Frame"
(
PRIVATE &magic
&magic=address.offset(track.address())
Frame /Locals /Caller /TASK &magic
)
menuitem "Display Registers"
(
PRIVATE &magic
&magic=address.offset(track.address())
Register /Task &magic
)
menuitem "Switch Context"
(
PRIVATE &nAddress
&nAddress=ADDRESS.OFFSET(TRACK.ADDRESS())
Register.TASK &nAddress
)
separator
menuitem "Add to Stack Cov"
(
PRIVATE &nAddress
&nAddress=ADDRESS.OFFSET(TRACK.ADDRESS())
TASK.&(sInfix)STacK.ADD &nAddress
)
menuitem "Rm from Stack Cov"
(
PRIVATE &nAddress
&nAddress=ADDRESS.OFFSET(TRACK.ADDRESS())
TASK.&(sInfix)STacK.RM &nAddress
)
separator
menuitem "Dump thread entry"
(
PRIVATE &address
&address=track.address()
Data.dump &address /Long /dialog
)
)
menu "task.&(sInfix)p"
(
default
menuitem "Display detailed"
(
PRIVATE &magic
&magic=address.offset(track.address())
TASK.&(sInfix)Process &magic
)
menuitem "Display process struct"
(
PRIVATE &address
&address=track.address()
Var.View %Open %String (posix_proc_t*)(&address)
)
menuitem "Dump process entry"
(
PRIVATE &address
&address=track.address()
Data.dump &address /Long /dialog
)
)
)
)
)
PMACRO.UNLOCK
RETURN
)
autoload_64bit: ;(options)
(
PARAMETERS &sOptions
RETURN
)
execute_container_selection:
(
PARAMETERS &sParameters &sAccess &sMachine &sArguments
PRIVATE &ptrsize
IF !Var.EXIST(uintptr_t)
(
PRINT %WARNING "eMCOS: kernel symbol types not found, detect address width from CPU selection"
RETURN "0."
)
&ptrsize=Var.SIZEOF(uintptr_t)
IF &ptrsize==4.
(
PRINT "eMCOS: detected 32bit address size"
RETURN "32."
)
ELSE IF &ptrsize==8.
(
PRINT "eMCOS: detected 64bit address size"
RETURN "64."
)
ELSE
(
PRINT %WARNING "eMCOS: unknown kernel symbol type size, detect address width from CPU selection"
RETURN "0."
)
RETURN "-1."
)
menu_delete: ;(header)
(
PRIVATE &sHeader &sMenuName
PARAMETERS &sHeader
&sMenuName=TASK.TRANSPOSE.INFIX("&sHeader")
IF MENU.EXIST("TASK.&(sMenuName)")
MENU.Delete.NAME TASK.&(sMenuName)
IF MENU.EXIST("EXT.&(sMenuName)")
MENU.Delete.NAME EXT.&(sMenuName)
RETURN
)
autoload_delete: ;(options)
(
PARAMETERS &sOptionMachine
RETURN
)