64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # 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")
 | 
