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

768 lines
35 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." "AtomThreads"
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)
(
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="AtomThreads"
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.)
(
PRINTF %ERROR "%s: No support for %ubit, please contact support@lauterbach.com." "AtomThreads" &nVariant
)
)
ELSE IF (&bExtLoad)
(
PRIVATE &sMachineName &sInfix &sOptionName &sOptionMachine
&sInfix=""
&sMachineName="AtomThreads"
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.)
(
PRINTF %ERROR "%s: No support for %ubit, please contact support@lauterbach.com." "AtomThreads" &nVariant
)
)
ELSE IF (&bCleanup)
(
PRIVATE &sMachineName &sOptionMachine
&sMachineName="AtomThreads"
IF ("&sName"!="")
(
&sMachineName="&(sName)"
)
IF ("&sMachine"!="")
(
&sOptionMachine="/MACHINE &sMachine"
)
IF STRing.SCAN(HELP.FILTER(),"rtosatomthreads",0.)>=0.
HELP.FILTER.Delete rtosatomthreads
GOSUB menu_delete "&sMachineName"
GOSUB autoload_delete "&sOptionMachine"
)
ENDDO
extension_32bit: ; (options)
(
PARAMETERS &sParameters &sOptions
EXTension.LOAD &sParameters &sOptions
(
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
YnJhbmNoZXMvbmlnaHRseQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABodHRwczovL3N2bi5pbnRlcm4ubGF1dGVyYmFjaC5jb20v
c3ZuL2tlcm5lbHNyYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJhdW1laXN0ZXIAAAAAAABlZGst
bGludXg2NGJpdC03AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAR0NDIDkuNS4wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAfoAAAABgAAAA0AAABOAAAn0gAAB+gAAAAGAAAAAAAAAAAAAAAA
AAAAAAAAAAAAATeRQXRvbVRocmVhZHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHRjYlJlYWR5UQAAAGN1cnJfdGNiAAAAAG1h
Z2ljAAAALS0tIFRBU0sgPSAlOHggPSAAAAAlMTZzIAAAAFRBU0suU1RBQ0suUEFUVEVSTiAweDVB
AFRBU0suQ09ORklHAEF0b21UaHJlYWRzAEFSTQA8dGltZXI+AHRpbWVyX3F1ZXVlAFRBU0suVElN
ZXIgJXgAAABBVC5USU1MACU4eCAgAAAAICAgICAgJThkLgAAJXMgACAgICAgICAgICAgIE5PTkUg
AAAAICAgICAgICAlOHggAAAAAAoAAABWYXIuVmlldyAlJU9wZW4gKEFUT01fVElNRVIgKikleAAA
AABtYWdpYyAgICAAAABSZW1haW5pbmcgdGlja3MAQ2FsbGJhY2sgZnVuY3Rpb24gICAgIAAAQ2Fs
bGJhY2sgRGF0YSBQdHIAAABTb3JyeTogTm8gVGltZXJzIGRlZmluZWQAAAAAU29ycnk6IFRpbWVy
IG5vdCBmb3VuZC4AVElNRVIAAABUSU0AVElNZXIAAABAKD0pX19SVE9TX0FUT01USFJFQURTX19U
QVNLX1RJTQAAAAA8c2VtYXBob3JlPgBUQVNLLlNFTWFwaG9yZSAleAAAAEFULlNFTUwAJTE2cwAA
AAAgICU0ZCAgACAgICAgICAgICAgICAgICAgMC4AICAgICAgICAgICAgICAlNGQuAABWYXIuVmll
dyAlJU9wZW4gKEFUT01fU0VNICopJXgAACU0ZCAgAAAAQmxvY2tlZCB0aHJlYWRzOgAAAAAgICAl
OHggICAgJTE2cwoAQ291bnQgAABOYW1lICAgICAgICAgICAgIAAAAENvdW50ICAATm8uIGJsb2Nr
ZWQgdGhyZWFkcwBTb3JyeTogQ291bGRuJ3QgZmluZCBhbnkgc2VtYXBob3JlcwBTb3JyeTogU2Vt
YXBob3JlIG5vdCBmb3VuZC4AU0VNQVBIT1JFAAAAU0VNAFNFTWFwaG9yZQAAAEAoPSlfX1JUT1Nf
QVRPTVRIUkVBRFNfX1RBU0tfU0VNAAAAACVAY01URCBWZXJzaW9uICAlcyAgJXMgICUwMmQuJTAy
ZC4lMDRkIChCdWlsZCAlcykKCgBTeXN0ZW0gRGV0YWlsczoKAAAAACAgICBTdGFjayBQb2ludGVy
IG9mZnNldCAgICAgPSAlZAoAACAgICBQcmlvcml0eSBvZmZzZXQgICAgICAgICAgPSAlZAoAACAg
ICBOZXh0IHBvaW50ZXIgb2Zmc2V0ICAgICAgPSAlZAoAACAgICBTdGFjayBiYXNlIG9mZnNldCAg
ICAgICAgPSAlZAoAACAgICBTdGFjayBTaXplIG9mZnNldCAgICAgICAgPSAlZAoAACAgICBFbnRy
eSBwb2ludCBvZmZzZXQgICAgICAgPSAlZAoAACAgICBTdXNwZW5kZWQgb2Zmc2V0ICAgICAgICAg
PSAlZAoAACAgICBUZXJtaW5hdGVkIG9mZnNldCAgICAgICAgPSAlZAoAAE11dGV4IERldGFpbHM6
CgAgICAgU3VzcGVuZGVkIFEgb2Zmc2V0ICAgICAgID0gJWQKAAAgICAgT3duZXIgVENCIG9mZnNl
dCAgICAgICAgID0gJWQKAAAgICAgT3duZXIgQ291bnQgb2Zmc2V0ICAgICAgID0gJWQKAABNZXNz
YWdlIFF1ZXVlIERldGFpbHM6CgAgICAgUSB3YWl0aW5nIHRvIHNlbmQgb2Zmc2V0ID0gJWQKAAAg
ICAgUSB3YWl0aW5nIHRvIHJjdiBvZmZzZXQgID0gJWQKAAAgICAgUSBNYXguIG1zZ3Mgb2Zmc2V0
ICAgICAgID0gJWQKAAAgICAgUSBOby4gbXNncyBpbiBRIG9mZnNldCAgID0gJWQKAAAgICAgUSBN
YXguIG1zZyBzaXplIG9mZnNldCAgID0gJWQKAABTZW1hcGhvcmUgRGV0YWlsczoKACAgICBDb3Vu
dCBvZmZzZXQgICAgICAgICAgICAgPSAlZAoAAFRpbWVyIERldGFpbHM6CgAgICAgQ2FsbGJhY2sg
ZnVuYyBvZmZzZXQgICAgID0gJWQKAAAgICAgQ2FsbGJhY2sgZGF0YSBvZmZzZXQgICAgID0gJWQK
AAAgICAgVGlja3MgdG8gQ0Igb2Zmc2V0ICAgICAgID0gJWQKAAAgICAgUHRyIHRvIG5leHQgdGlt
ZXIgb2Zmc2V0ID0gJWQKAABUZXN0IERhdGEgICAgAAAAVEVTVAAAAAA8cXVldWU+AFRBU0suUXVl
dWUgJXgAAABBVC5RTAAAACU4ZC4gIAAAICAgICU4ZC4gAAAAICAgICAgMC4AAAAAICAgJTRkLgBW
YXIuVmlldyAlJU9wZW4gKEFUT01fUVVFVUUgKikleAAAAAAlOGQgIAAAACAgICAlOGQgAAAAAEJs
b2NrZWQgU2VuZGluZyB0aHJlYWRzOgAAAABCbG9ja2VkIFJlY2VpdmluZyB0aHJlYWRzOgAATWF4
IE1zZ3MuAAAATXNnIFNpemUgIAAAQ3VyciBOby4gTXNncyAgAE5hbWUgICAgICAgICAgICAgIAAA
TWF4IE1zZ3MuICAgAAAAAE5vLiBSQ1YgAAAAAE5vLiBTTkQgAAAAAFNvcnJ5OiBDb3VsZG4ndCBm
aW5kIGFueSBNZXNzYWdlIFF1ZXVlcwBTb3JyeTogUXVldWUgbm90IGZvdW5kLgBRVUVVRQAAAFF1
ZXVlAAAAQCg9KV9fUlRPU19BVE9NVEhSRUFEU19fVEFTS19RAAA8bXV0ZXg+AFRBU0suTXVUZVgg
JXgAAABBVC5NTAAAACV4ICglMTZzKQAAAFZhci5WaWV3ICUlT3BlbiAoQVRPTV9NVVRFWCAqKSV4
AAAAACAgJTh4IAAAJTVkICAAAABvd25lciAgICAgIABjb3VudCAAAE93bmVyICAgICAgICAgICAg
ICAgICAgICAgIABOby4gQmxvY2tlZCBUaHJlYWRzAFNvcnJ5OiBDb3VsZG4ndCBnZXQgc3ltYm9s
IGFkZHJlc3NlcwAAAABTb3JyeTogbXV0ZXggbm90IGZvdW5kLgBNVVRFWAAAAE1UWABNdVRlWAAA
AEAoPSlfX1JUT1NfQVRPTVRIUkVBRFNfX1RBU0tfTVRYAAAAADx0YXNrPgAAVmFyLlZpZXcgJSVP
cGVuIChBVE9NX1RDQiAqKSV4AABBVC5UTAAAAHF1ZXVlIFNORCAgICAAAAAgJTNkLiAAAHF1ZXVl
IFJDViAgICAAAAAgICogRGVjb2RlZCAlZCBNZXNzYWdlIFF1ZXVlcwAAACAgICBtdXRleCAgICAA
AAAgICogRGVjb2RlZCAlZCBNdXRleGVzAABzZW1hcGhvcmUgICAgAAAAICAqIERlY29kZWQgJWQg
U2VtYXBob3JlcwAAACAgKiBjdXJyX3Rhc2sgPSAleAAAICBydW5uaW5nICAgIAAAAHN1c3BlbmRl
ZCAgICAAAAB0ZXJtaW5hdGVkIAAgICAgcmVhZHkgIAAgICogV2Fsa2luZyB0Y2JSZWFkeVE6IAAg
ICAqIEZvdW5kIHRjYiBhdCAleAAAAAAgICAgcmVhZHkgICAgAAAAbWFnaWMgICAgIG5hbWUgICAg
ICAgICAgICAgICAgIHN0YXRlICAgIHByaW8AAAAAVEFTS0xJU1QAAAAAVEwAAFRhc2tMaXN0AAAA
AEAoPSlfX1JUT1NfQVRPTVRIUkVBRFNfX1RBU0tfVEwAQ29ydGV4LU07ICAgICBtYWdpYyA9ICV4
AAAAACVzICAgPSAleAAAACEhQVJNIENvbnRleHQ6IFVwZGF0ZSBuZWVkZWQhAAAAQ09SVEVYTQBy
NAAAcjUAAHI2AAByNwAAcjgAAHI5AAByMTAAcjExAHIxNAByMAAAcjEAAHIyAAByMwAAcjEyAHBj
AAB4cHNyAAAAAHBzcABjcHNyAAAAAHI4X3VzcgAAcjlfdXNyAAByMTBfdXNyAHIxMV91c3IAcjEy
X3VzcgByMTNfdXNyAHIxNF91c3IAaGFyZHdhcmV0aHJlYWQAACAgICAgICAgRm91bmQgTXV0ZXgg
YXQgOiAleAAgICAgICAgIEZvdW5kIFNlbWFwaG9yZSBhdCA6ICV4ACAgICAgICAgRm91bmQgTXNn
IFEgYXQgOiAleABBVE9NX1RDQi5zcF9zYXZlX3B0cgAAAABBVE9NX1RDQi5wcmlvcml0eQAAAEFU
T01fVENCLm5leHRfdGNiAAAAQVRPTV9UQ0IuZW50cnlfcG9pbnQAAAAAQVRPTV9UQ0Iuc3VzcGVu
ZGVkAABBVE9NX1RDQi50ZXJtaW5hdGVkAEFUT01fVENCLnN0YWNrX2JvdHRvbQAAAEFUT01fVENC
LnN0YWNrX3NpemUAQVRPTV9NVVRFWC5zdXNwUQAAAABBVE9NX01VVEVYLm93bmVyAAAAAEFUT01f
TVVURVguY291bnQAAAAAQVRPTV9RVUVVRS5wdXRTdXNwUQBBVE9NX1FVRVVFLmdldFN1c3BRAEFU
T01fUVVFVUUubWF4X251bV9tc2dzAEFUT01fUVVFVUUubnVtX21zZ3Nfc3RvcmVkAABBVE9NX1FV
RVVFLnVuaXRfc2l6ZQAAAABBVE9NX1NFTS5zdXNwUQAAQVRPTV9TRU0uY291bnQAAEFUT01fVElN
RVIuY2JfZnVuYwAAQVRPTV9USU1FUi5jYl9kYXRhAABBVE9NX1RJTUVSLmNiX3RpY2tzAEFUT01f
VElNRVIubmV4dF90aW1lcgAAAEFUT01fTVVURVgAACoAAABBVE9NX1NFTQAAAABBVE9NX1FVRVVF
AERBVEEAAAbAAAAHHAAAM+gAAAADAAAAFwAAAAAAADbwAAAGWAAANvAAAAQsAAA28AAABIAAADbw
AAAFLAAANvAAADP0AAA0AAAAAAAAAAACAAAAAAAANNwAAAAAAAAAAwBGAAAABACcAAAMRAAAAAIA
AAAAAAA0+AAAAAAAAAADAEYAAAAEAJwAAAp8AAA1EAAANRgAADUcAAA1JAAACbwAADSUAAA0oAAA
NLAAADTIAAAAAAAAAAIAAAAAAAA2LAAAAAAAAAADAEYAAAAEAQQAAA+0AAAAAgAAAAAAADZQAAAA
AAAAAAMARgAAAAQBEAAADhAAADZsAAA2eAAANnwAADaIAAAN2AAANJQAADX0AAAAAAAANJQAADX8
AAA2EAAANhgAAAAAAAAAAQBGAAAABAFIAAARMAAAOkQAADpEAAA6RAAANvAAABEYAAA6NAAAAAAA
AAACAAAAAAAAO2gAAAAAAAAAAwBGAAAABAGkAAAXlAAAAAIAAAAAAAA7kAAAAAAAAAADAFoAAAAE
AbgAABVEAAA7qAAAM5wAADuwAAA7uAAAFQwAADSUAAA7BAAAOxAAADscAAAAAAAANJQAADssAAA7
QAAAOxAAADscAAA7UAAAO1wAAAAAAAAAAgAAAAAAADx8AAAAAAAAAAMARgAAAAQCLAAAHFQAAAAC
AAAAAAAAPKQAAAAAAAAAAwBGAAAABAI8AAAagAAAPLwAADzEAAA8yAAAPNAAABpIAAA0lAAAPDgA
ADxEAAAAAAAANJQAADxMAAA19AAAPGgAAAAAAAAAAgAAAAAAADx8AAAAAAAAAAEAUAAAAAA+TAAA
JmQAAD58AAA+iAAAPowAAD6YAAAe/AAAP1AAAAAAAAAABAAAPywAAAAAAAAABAAAPzAAAAAAAAAA
BAAAPzQAAAAAAAAABAAAPzgAAAAAAAAABAAAPwgAAAAAAAAABAAAPwwAAAAAAAAABAAAPxAAAAAA
AAAABAAAPxQAAAAAAAAABAAAP1gAAAAAAAAABAAAP2AAAAAAAAAABAAAP2gAAAAAAAAABAAAP3AA
AAAAAAAABAAAP3gAAAAAAAAABAAAP4AAAAAAAAAABAAAP4gAAAAAAAAABAAAP0AAAAAAAAAABAAA
AAAAAAAAAAAAAAAAPwgAAAAAAAAABAAAPwwAAAAAAAAABAAAPxAAAAAAAAAABAAAPxQAAAAAAAAA
BAAAPxgAAAAAAAAABAAAPxwAAAAAAAAABAAAPyAAAAAAAAAABAAAPyQAAAAAAAAABAAAPygAAAAA
AAAABAAAPywAAAAAAAAABAAAPzAAAAAAAAAABAAAPzQAAAAAAAAABAAAPzgAAAAAAAAABAAAPzwA
AAAAAAAABAAAP0AAAAAAAAAABAAAP0QAAAAAAAAABAAAP0wAAAAAAAAABAAAAAAAAAAAAAAAAAAA
P5AAAAAAAAAAAAAAAAAAAAAAAAAAAFQzMkU=
)
HELP.FILTER.Add rtosatomthreads
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: Atomthreads specific menu
; @Description: -
; @Keywords: atomthreads menu awareness
; @Author: RIC
; @Copyright: (c) 1989-2021 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: atomthreads.m 8136 2022-11-08 09:54:32Z amerkle $
NAME "TASK.&(sMenuName)"
IF !MENU.EXIST("TASK.&(sMenuName)")
(
add
menu
(
POPUP "&(sHeader)"
(
default
MENUITEM "Display &Tasks" "TASK.&(sInfix)TaskList"
MENUITEM "Display &Mutexes"
(
TASK.&(sInfix)MuTeX
)
menuitem "Display &Queues"
(
TASK.&(sInfix)Queue
)
MENUITEM "Display &Semaphores"
(
TASK.&(sInfix)SEMaphore
)
MENUITEM "Display &Timers"
(
TASK.&(sInfix)TIMer
)
separator
popup "&Stack Coverage"
(
menuitem "&List Stacks"
(
TASK.&(sInfix)STacK.PATtern 0x5A
TASK.&(sInfix)STacK.view
)
menuitem "Add Task" "TASK.&(sInfix)STacK.ADD"
menuitem "Remove Task" "TASK.&(sInfix)STacK.RM"
menuitem "Reset Coverage"
(
PRIVATE &yes
DIALOG.YESNO "Overwrite unused stack space" "with stack fill pattern?"
ENTRY &yes
IF !&yes
ENDDO
TASK.&(sInfix)STacK.Init
)
)
)
popup "Trace"
(
popup "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 a.mode.flow()
(
Break.Delete /TraceEnable
Break.Set C:0x1F:::task.&(sInfix)config(magic) /TraceEnable
)
)
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 a.mode.flow()
(
Break.Delete /TraceData
Break.Set C:0x1F:::task.&(sInfix)config(magic) /TraceData
)
)
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 "&Help"
(
MENUITEM "[:manual]OS Awareness Manual Atomthreads" "HELP __RTOS_ATOMTHREADS_"
)
)
MENU "AT.TIML"
(
default
MENUITEM "Display detailed Information"
(
PRIVATE &address
&address=track.address()
TASK.&(sInfix)TIMer &address
)
SEPARATOR
MENUITEM "Display Timer Structure"
(
PRIVATE &address &struct
&address=track.address()
&struct="ATOM_TIMER"
Var.View %Open %String (&struct *)(&address)
)
SEPARATOR
MENUITEM "Dump Memory"
(
PRIVATE &address
&address=address.offset(track.address())
Data.dump &address /l /dialog
)
SEPARATOR
MENUITEM "Show Callback Function"
(
PRIVATE &magic &address
&magic=address.offset(track.address())
&address=Var.Value(((ATOM_TIMER*)&magic)->cb_func)
List &address
)
)
MENU "AT.QL"
(
default
MENUITEM "Display Detailed Information"
(
PRIVATE &address
&address=track.offset()
TASK.&(sInfix)Queue &address
)
SEPARATOR
MENUITEM "Display Queue Structure"
(
PRIVATE &address &struct
&address=track.address()
&struct="ATOM_QUEUE"
Var.View %Open %String (&struct *)(&address)
)
SEPARATOR
MENUITEM "Dump Memory"
(
PRIVATE &address
&address=address.offset(track.address())
Data.dump &address /l /dialog
)
)
MENU "AT.SEML"
(
default
MENUITEM "Display Detailed Information"
(
PRIVATE &address
&address=track.address()
TASK.&(sInfix)SEMaphore &address
)
SEPARATOR
MENUITEM "Display Semaphore Structure"
(
PRIVATE &address &struct
&address=track.address()
&struct="ATOM_SEM"
Var.View %Open %String (&struct *)(&address)
)
SEPARATOR
MENUITEM "Dump Memory"
(
PRIVATE &address
&address=address.offset(track.address())
Data.dump &address /l /dialog
)
)
MENU "AT.ML"
(
default
MENUITEM "Display Detailed Information"
(
PRIVATE &address
&address=track.address()
TASK.&(sInfix)MuTeX &address
)
SEPARATOR
MENUITEM "Display Mutex Structure"
(
PRIVATE &address &struct
&address=track.address()
&struct="ATOM_MUTEX"
Var.View %Open %String (&struct *)(&address)
)
SEPARATOR
MENUITEM "Dump Memory"
(
PRIVATE &address
&address=address.offset(track.address())
Data.dump &address /l /dialog
)
)
menu "AT.TL"
(
default
;menuitem "Display detailed"
;(
; &address=address.offset(track.address())
; TASK.&(sInfix)TaskList &address
;)
menuitem "Display task struct"
(
PRIVATE &address &struct
&address=track.address()
;&struct=task.&(sInfix)struct(tcb)
&struct="ATOM_TCB"
Var.View %Open %String (&struct*)(&address)
)
separator
menuitem "Display Stack Frame"
(
PRIVATE &address
&address=address.offset(track.address())
Var.Frame /Locals /Caller /Task &address
)
menuitem "Display Registers"
(
PRIVATE &address
&address=address.offset(track.address())
Register /Task &address
)
menuitem "Switch Context" "Register.TASK address.offset(track.address())"
separator
menuitem "Add to Stack Cov" "TASK.&(sInfix)STK.ADD address.offset(track.address())"
menuitem "Rm from Stack Cov" "TASK.&(sInfix)STK.RM address.offset(track.address())"
separator
menuitem "Dump task entry"
(
PRIVATE &address
&address=address.offset(track.address())
Data.dump &address /l /dialog
)
)
)
)
)
PMACRO.UNLOCK
RETURN
)
autoload_32bit: ;(options)
(
PARAMETERS &sOptions
RETURN
)
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
)