; -------------------------------------------------------------------------------- ; @Title: ChibiOS/RT specific menu ; @Description: - ; @Author: DIE ; @Copyright: (c) 1989-2021 Lauterbach GmbH, licensed for use with TRACE32(R) only ; -------------------------------------------------------------------------------- ; $Id: chibios.m 7855 2022-07-28 12:13:39Z amerkle $ NAME "TASK.CHIBIOS" IF !MENU.EXIST("TASK.CHIBIOS") ( add menu ( POPUP "ChibiOS" ( default menuitem "Display &Threads" "TASK.Thread" menuitem "Display &Semaphore" "do ~~/demo/arm/kernel/chibios/objdialog Semaphore SEMaphore" menuitem "Display &Mutex" "do ~~/demo/arm/kernel/chibios/objdialog Mutex MuTeX" menuitem "Display &CondVar" "do ~~/demo/arm/kernel/chibios/objdialog CondVar CONDvar" menuitem "Display &Mailbox" "do ~~/demo/arm/kernel/chibios/objdialog Mailbox MailBox" menuitem "Display &Event" "do ~~/demo/arm/kernel/chibios/objdialog Event EVenT" menuitem "Display &Heap" "do ~~/demo/arm/kernel/chibios/objdialog Heap Heap" menuitem "Display &Pool" "do ~~/demo/arm/kernel/chibios/objdialog Pool Pool" menuitem "Display &Queue" "do ~~/demo/arm/kernel/chibios/objdialog Queue Queue" menuitem "Display Timer" "TASK.VTimer" separator popup "&Stack Coverage" ( menuitem "&List Stacks" "TASK.STacK.view" menuitem "Add Task" "TASK.STacK.ADD" menuitem "Remove Task" "TASK.STacK.RM" menuitem "Reset Coverage" ( LOCAL &yes DIALOG.YESNO "Overwrite unused stack space" "with stack fill pattern?" ENTRY &yes IF !&yes ENDDO TASK.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 a.mode.flow() ( Break.Delete /TraceEnable Break.Set C:0x1F:::task.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.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 "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 "&Help" ( MENUITEM "[:manual]OS Awareness Manual ChibiOS/RT" "HELP __RTOS_CHIBIOS_" ) ) menu "task.t" ( default menuitem "Display detailed" ( PRIVATE &address &address=address.offset(track.address()) TASK.Thread &address ) menuitem "Display thread struct" ( PRIVATE &address &struct &address=address.offset(track.address()) &struct=task.struct(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.STK.ADD address.offset(track.address())" menuitem "Rm from Stack Cov" "TASK.STK.RM address.offset(track.address())" separator menuitem "Dump task entry" ( PRIVATE &address &address=address.offset(track.address()) Data.dump &address /dialog ) ) menu "task.sem" ( default ;menuitem "Display detailed" ;( ; &address=address.offset(track.address()) ; TASK.SEMaphore &address ;) menuitem "Display semaphore struct" ( PRIVATE &address &struct &address=address.offset(track.address()) &struct=task.struct(sem) Var.View %Open %String (&struct)*&address ) menuitem "Dump semaphore entry" ( PRIVATE &address &address=address.offset(track.address()) Data.dump &address /dialog ) ) menu "task.mtx" ( default ;menuitem "Display detailed" ;( ; &address=address.offset(track.address()) ; TASK.MuTeX &address ;) menuitem "Display mutex struct" ( PRIVATE &address &struct &address=address.offset(track.address()) &struct=task.struct(mutex) Var.View %Open %String (&struct)*&address ) menuitem "Dump mutex entry" ( PRIVATE &address &address=address.offset(track.address()) Data.dump &address /dialog ) ) menu "task.mb" ( default ;menuitem "Display detailed" ;( ; &address=address.offset(track.address()) ; TASK.MailBox &address ;) menuitem "Display mailbox struct" ( PRIVATE &address &struct &address=address.offset(track.address()) &struct=task.struct(mbox) Var.View %Open %String (&struct)*&address ) menuitem "Dump mailbox entry" ( PRIVATE &address &address=address.offset(track.address()) Data.dump &address /dialog ) ) menu "task.cond" ( default ;menuitem "Display detailed" ;( ; &address=address.offset(track.address()) ; TASK.CONDvar &address ;) menuitem "Display cond var struct" ( PRIVATE &address &struct &address=address.offset(track.address()) &struct=task.struct(condvar) Var.View %Open %String (&struct)*&address ) menuitem "Dump cond var entry" ( PRIVATE &address &address=address.offset(track.address()) Data.dump &address /dialog ) ) menu "task.evt" ( default ;menuitem "Display detailed" ;( ; &address=address.offset(track.address()) ; TASK.EVenT &address ;) menuitem "Display event struct" ( PRIVATE &address &struct &address=address.offset(track.address()) &struct=task.struct(event) Var.View %Open %String (&struct)*&address ) menuitem "Dump event entry" ( PRIVATE &address &address=address.offset(track.address()) Data.dump &address /dialog ) ) menu "task.heap" ( default ;menuitem "Display detailed" ;( ; &address=address.offset(track.address()) ; TASK.EVenT &address ;) menuitem "Display heap struct" ( PRIVATE &address &struct &address=address.offset(track.address()) &struct=task.struct(heap) Var.View %Open %String (&struct)*&address ) menuitem "Dump heap entry" ( PRIVATE &address &address=address.offset(track.address()) Data.dump &address /dialog ) ) menu "task.pool" ( default ;menuitem "Display detailed" ;( ; &address=address.offset(track.address()) ; TASK.Pool &address ;) menuitem "Display pool struct" ( PRIVATE &address &struct &address=address.offset(track.address()) &struct=task.struct(pool) Var.View %Open %String (&struct)*&address ) menuitem "Dump pool entry" ( PRIVATE &address &address=address.offset(track.address()) Data.dump &address /dialog ) ) menu "task.gq" ( default ;menuitem "Display detailed" ;( ; &address=address.offset(track.address()) ; TASK.MailBox &address ;) menuitem "Display queue struct" ( PRIVATE &address &struct &address=address.offset(track.address()) &struct=task.struct(queue) Var.View %Open %String (&struct)*&address ) menuitem "Dump queue entry" ( PRIVATE &address &address=address.offset(track.address()) Data.dump &address /dialog ) ) menu "task.vt" ( default ;menuitem "Display detailed" ;( ; &address=address.offset(track.address()) ; TASK.MailBox &address ;) menuitem "Display timer struct" ( PRIVATE &address &struct &address=address.offset(track.address()) &struct=task.struct(timer) Var.View %Open %String (&struct)*&address ) menuitem "Dump timer entry" ( PRIVATE &address &address=address.offset(track.address()) Data.dump &address /dialog ) ) menu "var" ( popup "ChibiOS" ( menuitem "Display as Semaphore" ( PRIVATE &address &address=address.offset(track.address()) TASK.SEMaphore &address ) menuitem "Display as Mutex" ( PRIVATE &address &address=address.offset(track.address()) TASK.MuTeX &address ) menuitem "Display as CondVar" ( PRIVATE &address &address=address.offset(track.address()) TASK.CONDvar &address ) menuitem "Display as Mailbox" ( PRIVATE &address &address=address.offset(track.address()) TASK.MailBox &address ) menuitem "Display as Event" ( PRIVATE &address &address=address.offset(track.address()) TASK.EVenT &address ) menuitem "Display as Heap" ( PRIVATE &address &address=address.offset(track.address()) TASK.Heap &address ) menuitem "Display as Pool" ( PRIVATE &address &address=address.offset(track.address()) TASK.Pool &address ) menuitem "Display as Queue" ( PRIVATE &address &address=address.offset(track.address()) TASK.Queue &address ) ) ) )