121 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| FreeRTOS-GDB
 | |
| ============
 | |
| 
 | |
| Python API Library for inspecting FreeRTOS Objects in GDB
 | |
| 
 | |
| Basically, the FreeRTOS internal state is kind of hard to inspect 
 | |
| when working with GDB. This project provides some scripts for GDB's 
 | |
| Python API that make accessing some of these internals a little easier
 | |
| to inspect. 
 | |
| 
 | |
| ##Requirements: 
 | |
| 
 | |
| 1. You need to have the python API enabled in your version of GDB. This is a 
 | |
|     compile time option when building GDB. You should be able to do something
 | |
| 	  like this: 
 | |
| ```
 | |
| 	gdb> python print "Hello World" 
 | |
| ```
 | |
| 
 | |
| and get predictable results. If it throws an error - then you don't have 
 | |
| python compiled in your version of GDB.
 | |
| 
 | |
| 2. Need to be using FreeRTOS 8.0+. This code could probably be used with FreeRTOS
 | |
|     version 7.0 or previous versions, but the current code doesn't support it.
 | |
| 
 | |
| 3. You need to use the Handle Registry for Queue info to be any use.
 | |
|     Note that this only works for Queue based objects and not 
 | |
|     for EventGroups 
 | |
| 
 | |
| 4. You need to put the FreeRTOS-GDB/src directory on your python path: 
 | |
| ```
 | |
| 	$> export PYTHONPATH=~/src/FreeRTOS-GDB/src/
 | |
| ```
 | |
| 
 | |
| How To Use: 
 | |
| ```
 | |
| $> gdb ./bin/program.elf 
 | |
| (gdb) c 
 | |
| Program runs on embedded device, sets up tasks, and queues 
 | |
| <Break>
 | |
| (gdb) source ~/FreeRTOS-GDB/src/FreeRTOS.py 
 | |
| (gdb) show Task-List
 | |
|             Name PRI STCK
 | |
| Ready List {0}: Num Tasks: 1
 | |
|             IDLE   0  107
 | |
| Blocked List: Num Tasks: 11
 | |
|        EMAC Task   1  239
 | |
|       AFEC0 Task   1  295
 | |
|      LDSENS Task   1  195
 | |
|       AFEC1 Task   1  295
 | |
|  LineSample Task   1  281
 | |
|         DMAUART0   1  225
 | |
|         Log Task   1  273
 | |
|         BAT Task   1  169
 | |
|          Rx Task   1  421
 | |
|         Mng Task   2  551
 | |
|        Cell Task   1  275
 | |
| Delayed {1}: Num Tasks: 5
 | |
|          Tmr Svc   3  355 62254
 | |
|        WLAN Task   1  205 13817
 | |
|        Init Task   1  445 10015
 | |
|         LED Task   1  179  7105
 | |
|          DMACOM1   1  265  7065
 | |
| Delayed {2}: Num Tasks: 0
 | |
| 
 | |
| (gdb) show Queue-Info mutex
 | |
| Num Queues: 6
 | |
|             NAME  CNT             SEND          RECEIVE
 | |
|         LOG:LOCK    1             NONE             NONE
 | |
|      STREAM:LOCK    1             NONE             NONE
 | |
|        TWI:MUTEX    1             NONE             NONE
 | |
|      CC3000:LOCK    1             NONE             NONE
 | |
|        WLAN:LOCK    0             NONE             NONE
 | |
|         SPI:LOCK    1             NONE             NONE
 | |
| 
 | |
| (gdb) show Queue-Info queue
 | |
| Num Queues: 14
 | |
|             NAME  CNT             SEND          RECEIVE
 | |
|             TmrQ    0                           Tmr Svc
 | |
|      LOG:MSGPOOL   12             NONE             NONE
 | |
|         LOG:MSGQ    0                          Log Task
 | |
|        TWI:QUEUE    0             NONE             NONE
 | |
|        SPI:QUEUE    0             NONE             NONE
 | |
|     DMAAFEC:POOL    1             NONE             NONE
 | |
|    DMAAFEC:QUEUE    0                        AFEC0 Task
 | |
|     DMAAFEC:POOL    1             NONE             NONE
 | |
|    DMAAFEC:QUEUE    0                        AFEC1 Task
 | |
|       COM:TXPOOL    3             NONE             NONE
 | |
|          COM:TXQ    0             NONE             NONE
 | |
|       COM:RXPOOL    5             NONE             NONE
 | |
|          COM:RXQ    0             NONE             NONE
 | |
|      FATFS:MUTEX    0             NONE             NONE
 | |
| 
 | |
| ```
 | |
| 
 | |
| @note - the NONE's above may just be empty strings.
 | |
| 
 | |
| This code adds the following custom GDB commands: 
 | |
| 
 | |
| * show List-Handle (symbol|address) [CastType]
 | |
| 	CastType is an optional argument that will cast all of the 
 | |
| 	handles in a list to a particular type. 
 | |
| * show Task-List
 | |
| * show Handle-Registry
 | |
| * show Handle-Name  (symbole|address) 
 | |
| * show Queue-Info [filter]
 | |
|    filter can be "queue","mutex","semaphore", "counting", "recursive"
 | |
| 
 | |
| 
 | |
| 
 | |
| @TODO
 | |
| =====
 | |
| 
 | |
| * With GDB's Python API - it doesn't seem to handle code is separate
 | |
|     files very well. 
 | |
| 
 | |
| * Currently, the EventGroup objects don't have an inspector. 
 | |
|     Work in progress - ideal solution would likely modify the struct
 | |
|     of the Event Group to provide a similar piece of info that the 
 | |
|     Queue handle does so that we could use the same registry.
 | 
