First of all I have to apologize for the big amount of data I've added in my post. But as I can't figure out what or where exactly my problem lies I think all of it is needed to explain myself.
As I've explained in a previous post, I'm trying to get my Embedded C Project (Infineon XE169 - C166 Family) to communicate with uC/Probe. But until now I'm running into multiple problems. The problem I had before was a pointer problem, which currently is fixed with a dirty workaround, so the answer to that post will come later when I've got a clean fix (The previous issue: Find out if an object on a specific address is a pointer )
Since I've now (dirty) fixed that issue, all data communicated between uC/Probe and the Embedded software seem to be correct. But however uC/Probe is still not showing data.
When starting uC/Probe with the Kernell Awareness screen it will show the correct number of rows in the table, this is the same number of rows as there are tasks created (This can be seen in the log data below)
This same problem also occurs on the Semaphores, Mutexes and other uC/OS III related "Objects". The Constants and Miscellaneous pages are shown correct with the correct information.
This is the data communicated between the Embedded C Software and uC/Probe
The rows completely on the left is data from uC/Probe to the Embedded Board and the data with a tab in front of it is data from the Embedded Board to uC/Probe
uC/Probe starts with requesting the RX and TX queue sizes, the Endianness of the Embedded chip, CPU Usage and some more information that is needed, I've tried to add behind every data row what exactly is requested and what is responded.
uCPr 4 0 01 00 01 01 00 / FMT_RX_QUERY - MAX_RX_SIZE
uCPr 8 0 01 80 01 02 D0 00 00 00 00 / MAX_RX_SIZE = 0xD0 = 208
uCPr 4 0 01 00 02 01 00 / FMT_RX_QUERY - MAX_TX_SIZE
uCPr 8 0 01 80 01 02 D0 00 00 00 00 / MAX_TX_SIZE = 0xD0 = 208
uCPr 4 0 01 00 01 02 00 / FMT_RX_QUERY - Endianness Test
uCPr 8 0 01 80 01 02 78 56 34 12 00 / Endianness Little Endian
uCPr 8 0 02 00 02 00 50 3F 61 00 00 / Request OSStatTaskCPUUsage (Address: 0x00613F50)
uCPr 6 0 02 80 01 02 BC 23 00 / CPU Usage = 0x23BC = 9148 = 91.48%
uCPr 8 0 02 00 02 00 54 3F 61 00 00 / Request OSTaskQty (Address: 0x00613F54)
uCPr 6 0 02 80 01 02 19 00 00 / Number of Tasks = 0x0019 = 25 Tasks
uCPr 8 0 02 00 01 00 73 1A C1 00 00 / Request OSDbg_DbgEn (Address: 0x00C11A73)
uCPr 5 0 02 80 01 02 01 00 / Debug Enabled = 0x01 = 1
uCPr 8 0 02 00 04 00 DC 3E 61 00 00 / Request OSTCBCurPtr (Address: 0x613EDC)
uCPr 8 0 02 80 01 02 E6 1F 61 00 00 / Current Task Pointer: 0x00611FE6 = Valid TCB Location = ProbeTCPIP_OS_Task
uCPr 8 0 02 00 02 00 88 2F C1 00 00 / Request OSDbg_TCBSize
uCPr 6 0 02 80 01 02 BA 00 00 / TCB Size = 0x00BA = 186 Bytes large
uCPr 8 0 02 00 01 00 73 1A C1 00 00 / Request OSDbg_DbgEn (Address: 0x00C11A73)
uCPr 5 0 02 80 01 02 01 00 / Debug Enabled = 0x01 = 1
uCPr 8 0 02 00 04 00 C0 3E 61 00 00 / Request OSTaskDbgListPtr (Address: 0x613EC0)
uCPr 8 0 02 80 01 02 1C B1 60 00 00 / Debug List Pointer: 0x0060B11C = Valid TCB Location = TcpIP S:1 Task (Application Task)
uCPr 8 0 02 00 01 00 73 1A C1 00 00 / Request OSDbg_DbgEn (Address: 0x00C11A73)
uCPr 5 0 02 80 01 02 01 00 / Debug Enabled = 0x01 = 1
uCPr 8 0 02 00 02 00 54 3F 61 00 00 / Request OSTaskQty (Address: 0x00613F54)
uCPr 6 0 02 80 01 02 19 00 00 / Number of Tasks = 0x0019 = 25 Tasks
uCPr 8 0 02 00 04 00 DC 3E 61 00 00 / Request OSTCBCurPtr (Address: 0x00613EDC)
uCPr 8 0 02 80 01 02 E6 1F 61 00 00 / Current Task Pointer: 0x611FE6 = Valid TCB Location = ProbeTCPIP_OS_Task
uCPr 8 0 02 00 BA 00 1C B1 60 00 00 / Request Item where OSTaskDbgListPtr is pointing to TcpIp S:1 Task (Address: 0x0060B11C)
uCPr 190 0 02 80 01 02 70 C5 00 00 00 00 80 43 61 00 4E C3 00 00 00 00 00 00 00 00 D2 12 61 00 D4 9E 60 00 E0 3C 61 00 02 C3 0A 61 C0 00 16 B1 60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 0E 0E 00 00 00 00 00 80 01 00 00 03 00 00 00 00 00 01 00 00 00 00 00 00 00 00 00 00 00 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3B 17 00 00 00 00 00 00 86 FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 6A 00 00 00 16 01 00 00 00 00 00 00 D4 9E 60 00 9C 2F C1 00 00 /
The last message above is the response from the Embedded board to uC/Probe with all data of the requested task (OS_TCB).
Underneath I've extracted the message and the whole OS_TCB seems to be sent correct.
uCPr PREFIX
190 0 02 80 01 02 Read 190 bytes (0xBE), 02 08 = 0x8002 = FMT_TX_RD, 01 = STATUS_OK, 02 = Packet Modifier = Terminal Exec Done
70 C5 *StkPtr - Pointer to current top of stack - only 2 bytes long because in near memory - TcpIp_Task_Stk (Address: 0xC570)
00 00 00 00 *ExtPtr - Pointer to user definable data for TCB extension --Not in uC/Probe(void*)
80 43 61 00 *NamePtr - Pointer to the task name - "TcpIP S:1" (Address: 0x00614380)
4E C3 *StkLimitPtr - Pointer used to set stack 'watermark' limit - only 2 bytes long because in near memory - In TcpIp_Task_Stk (Address: 0xC34E)
00 00 00 00 *NextPtr - Pointer to next TCB in the TCB list
00 00 00 00 *PrevPtr - Pointer to the previous TCB in the TCB list
D2 12 61 00 *TickNextPtr - OsSMT_ErrorTask (Application Task) (Address: 0x006112D2)
D4 9E 60 00 *TickPrevPtr - TcpIPS2Task (Application Task) (Address: 0x00609ED4)
E0 3C 61 00 *TickListPtr - Pointer to tick list if task is in a tick list - OSTickListDly (Address: 0x00613CE0)
02 C3 *StkBasePtr - Pointer to base address of stack - only 2 bytes long because in near memory - In TcpIP_Task_Stk (Address: 0xC302)
0A 61 C0 00 TaskEntryAddr - Pointer to task entry point address - TLC_Task (Task Function Address) (Address: 0x00C0610A)
16 B1 60 00 *TaskEntryArg - Argument passed to task when it was created --not in uC/Probe (void*) - Argument of TLC_Task function, Pointer to variable SMT_NODE (Address: 0x0060B116)
00 00 00 00 *PendNextPtr - Pointer to next TCB in pend list
00 00 00 00 *PendPrevPtr - Pointer to previous TCB in pend list
00 00 00 00 *PendObjPtr - Pointer to object pended on
00 PendOn - Indicates what task is pending only
00 PendStatus - Pend status
01 TaskState - See OS_TASK_STATE_xxx - Task State = 0x01 = OS_TASK_STATE_DLY
0E Prio - Task priority(0 == highest) - Task Priority = 0x0E = 14
0E BasePrio - Base priority (Not inherited) - Task Base Priority = 0x0E = 14
00 Offset
00 00 00 00 *MutexGrpHeadPtr - Owned mutex group head pointer
80 01 00 00 StkSize - Size of task stack (in number of stack elements) - Stacksize = 0x00000180 = 384 bytes
03 00 Opt - Task options as passed by OSTaskCreate() - OS_OPT_TASK_STK_CHK (Enable stack checking for the task) and OS_OPT_TASK_STK_CLR (Clear the stack when the task is created)
00 00 00 00 SemCtr - Task specific semaphore counter
01 00 00 00 TickRemain - Number of ticks remaining (updated by OS_TickTask) - 0x00000001
00 00 00 00 TickCtrPrev - Used by OSTimeDlyXX() in PERIODIC mode
00 00 00 00 TimeQuanta
0A 00 00 00 TimeQuantaCtr - 0x0000000A = 10
00 00 00 00 *MsgPtr - Message Received --not in uC/Probe (void)
00 00 MsgSize
00 00 00 00 00 00 00 00 00 00 00 00 00 00 MsgQ - Message queue associated with task
00 00 00 00 MsgQPendTime - Time it took for signal to be received
00 00 00 00 MsgQPendTimeMax - Max amout of time it took for signal to be received
00 00 00 00 RegTbl - Task Specific registers
00 00 00 00 FlagsPend - Event flag(s) to wait on
00 00 00 00 FlagsRdy - Event flags that made task ready to run
00 00 FlagsOpt - Options (See OS_OPT_FLAG_xxx)
00 SuspendCtr - Nesting counter for OSTaskSuspend
00 Offset
00 00 CPUUsage - CPU Usage of task (0.00 - 100.00%) - 0x0000 = 0 = 0%
00 00 CPUUsageMax - CPU Usage of task (0.00 - 100.00%) peak - 0x0000 = 0 = 0%
3B 17 00 00 CtxSwCtr - Number of time the task was switched in - 0x0000173B = 5947 Context switches
00 00 00 00 CyclesDelta - value of OS_TS_GET() - .CyclesStart
86 FF 00 00 CyclesStart - Snapshot of cycle counter at start of task resumption - 0x0000FF86 = 65414
00 00 00 00 CyclesTotal - Total number of # of cycles the task has been running
00 00 00 00 CyclesTotalPrev - Snapshot of previous # of cycles
00 00 00 00 SemPendTime - Time it took for signal to be received
00 00 00 00 SemPendTimeMax - Max amount of time it took for signal to be received
6A 00 00 00 StkUsed - Number of stack elements used from the stack - Used = 0x0000006A = 106 bytes
16 01 00 00 StkFree - Number of stack elements free on the stack - Free = 0x00000116 = 278 bytes
00 00 00 00 *DbgPrevPtr - No Previous Task TCB (Nullpointer)
D4 9E 60 00 *DbgNextPtr - TcpIPS2Task (Application Task) (Address: 0x00609ED4)
9C 2F C1 00 *DbgNamePtr - " ", Empty because task is not pending on Queue or Semaphore (Address 0x00C12F9C)
00 / POSTFIX
But after this data is sent to uC/Probe it doesn't seem to do anything with this data, the only data sent between the 2 programs is now the following:
It keeps requesting the Number of tasks and the Current Task pointer and nothing else. I've only added 2 loops of this, but it keeps requesting this data till eternity.
uCPr 8 0 02 00 02 00 54 3F 61 00 00 / Request OSTaskQty (Address: 0x00613F54)
uCPr 6 0 02 80 01 02 19 00 00 / Number of Tasks = 0x0019 = 25 Tasks
uCPr 8 0 02 00 04 00 DC 3E 61 00 00 / Request OSTCBCurPtr (Address: 0x00613EDC)
uCPr 8 0 02 80 01 02 E6 1F 61 00 00 / Current Task Pointer: 0x611FE6 = Valid TCB Location = ProbeTCPIP_OS_Task
uCPr 8 0 02 00 02 00 54 3F 61 00 00 / Request OSTaskQty (Address: 0x00613F54)
uCPr 6 0 02 80 01 02 19 00 00 / Number of Tasks = 0x0019 = 25 Tasks
uCPr 8 0 02 00 04 00 DC 3E 61 00 00 / Request OSTCBCurPtr (Address: 0x00613EDC)
uCPr 8 0 02 80 01 02 E6 1F 61 00 00 / Current Task Pointer: 0x611FE6 = Valid TCB Location = ProbeTCPIP_OS_Task
So I'm hoping someone could tell me if there is something wrong in the above communication, or why uC/Probe is hanging in the above loop of requesting the Number of tasks and current task pointer? And why it isn't requesting the pointer information like the name of the task and continuing to requesting data of the other tasks?
User contributions licensed under CC BY-SA 3.0