Using the TIROS_USER_CTXT_UPCALL feature, a user supplied function, user_ctxt_upcall(), can be kept informed of context switching. This can be used in creative ways to implement per-task hardware customization. For example, the upcall can be used to save the low-power state of the current task and set the low-power state of the next task. This will result in per-task power control.
Two types of debugging information can be retrieved from TiROS.
0 - No debugging messages. 1 - Critical error messages. 2 - Adds warning mesages. 3 - Adds informational messages. 4 - Adds trace messages.
Data Structures | |
struct | os_data_hdr |
A representation of the debug header data. More... | |
struct | os_data_global |
This structure is a representation of the global debug data. More... | |
struct | os_data_per_task |
This structure is a representation of the variable internal data. More... | |
struct | os_internal_debug_data |
This structure describes the data returned by osint_snapshot. More... | |
Defines | |
#define | TIROS_DEBUG_DATA_SZ (sizeof (struct os_internal_debug_data)) |
Functions | |
int | osint_snapshot (unsigned char *buffer, int memsz) |
#define TIROS_DEBUG_DATA_SZ (sizeof (struct os_internal_debug_data)) |
Recommended size of the buffer to hold the TiROS internal debug data.
Definition at line 188 of file tr_debug.h.
int osint_snapshot | ( | unsigned char * | buffer, | |
int | memsz | |||
) |
A snapshot of all the internal os data.
This can be used by a dedicated task to send out debugging info The data is packed into a tight architecture independent little-endian byte stream. The type of data that is packed is illustrated in os_internal_debug_data. To use this function, tr_debug.h should be included by the source file and TIROSINT_DATA_DEBUG should be defined in proj_config.h
The TiROS state is written in a compact endian-neutral format. This can be parsed using the tiros_parse program that is included with the distribution. This form of debugging provides a wealth of information. Here is example output, parsed by tiros_parse, showing the debug data output by the example in os_examples/os_debug_example. This output was obtained from an msp430_gcc port.
NOTE: The information about the debugging task itself may not be fully accurate. It will reflect the state of the task at the last context switch.
-------------------------------------------------- os_options = 0x07, data_sizes1 = 0x15, data_sizes2 = 0x01, max_procs = 8 Record size = 240 TIROS Settings PrioSort: 1 reg_passing: 1 stk_chk_info: 1 oswordt_sz: 2 tidtsz: 1 subtimet_sz: 2 flagt_sz: 2 osptrwordt_sz: 2 max_procs: 8 gdata_len: 12 data_per_task_len: 28 task_tcb_len: 20 record_sz: 240 ******************************************************************************** 5:41515 RUN: 1 RDY: 1 WT: 0 NESTING: 0 CTXT_CNT: 12 -------------------------------------------------------------------------------- TSK CP PRIO EFF FLAGS MUTXS TIMEOUT LK_PTR EVTS ... 0 0x1310 0 0 0x10 0 6: 640 0xffff 0x0000 ... 1 0x13aa 1 1 0x00 0 5:41483 0xffff 0x0000 ... 2 0x1442 2 2 0x10 0 4294967295:65535 0x1530 0x0001 ... 3 0x150e 3 3 0x00 0 0: 0 0xffff 0x0000 ... 4 0xffff 0 0 0x00 0 0: 0 0x0000 0x0000 ... 5 0xffff 0 0 0x00 0 0: 0 0x0000 0x0000 ... 6 0xffff 0 0 0x00 0 0: 0 0x0000 0x0000 ... 7 0xffff 0 0 0x00 0 0: 0 0x0000 0x0000 ... ---------------------------------------------------------------------- ... STK STKSZ PC CUR_STK MAX_STK R/W Q LK Q ... 0x12b8 79 0x472a 35 36 0x02 0xff ... 0x1356 79 0xffff 0 38 0x03 0xff ... 0x13f4 79 0x472a 40 41 0xff 0xff ... 0x1492 79 0x59ec 17 30 0xff 0xff ... 0x0000 0 0xffff 0 0 0xff 0xff ... 0x0000 0 0xffff 0 0 0xff 0xff ... 0x0000 0 0xffff 0 0 0xff 0xff ... 0x0000 0 0xffff 0 0 0xff 0xff ----------------------------------------------------------------------
[in] | memaddr | Memory address to copy the data structures. If this is set to ILLEGAL_ADDR, the return value contains the size that the data structures would occupy in bytes. It is recommended that buffer be TIROS_DEBUG_DATA_SZ long. |
[in] | memsz | Size of the memory location. |