| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- # File: Task.py
- # Author: Carl Allendorph
- # Date: 05NOV2014
- #
- # Description:
- # This file contains the implementation of a class to use for
- # inspecting the state of a FreeRTOS Task in GDB
- #
- import gdb
- class TaskInspector:
- TCBType = gdb.lookup_type("TCB_t")
- def __init__(self, handle):
- self._tcb = None
- # print("Task: Pass Handle: %s" % str(handle))
- try:
- if handle.type == TaskInspector.TCBType:
- self._tcb = handle
- return
- else:
- print("Handle Type: %s" % str(handle.type))
- except AttributeError as aexc:
- print("Attribute Error: %s" % str(aexc))
- pass
- except Exception as exc:
- print("Error Initializing Task Inspector: %s" % str(exc))
- raise
- try:
- tcbPtr = gdb.Value(handle).cast(TaskInspector.TCBType.pointer())
- self._tcb = tcbPtr.dereference()
- return
- except Exception as exc:
- print("Failed to convert Handle Pointer: %s" % str(handle))
- self._tcb = handle
- def GetName(self):
- if self._tcb != None:
- return self._tcb["pcTaskName"].string()
- else:
- raise ValueError("Invalid TCB")
- def GetPriority(self):
- if self._tcb != None:
- return self._tcb["uxPriority"]
- else:
- raise ValueError("Invalid TCB")
- def GetStackMargin(self):
- if self._tcb != None:
- topStack = self._tcb["pxTopOfStack"]
- stackBase = self._tcb["pxStack"]
- highWater = topStack - stackBase
- return highWater
- else:
- raise ValueError("Invalid TCB")
|