UC/Probe не запрашивает необходимые данные
Прежде всего, я должен извиниться за большой объем данных, которые я добавил в свой пост. Но так как я не могу понять, в чем и где именно заключается моя проблема, я думаю, что все это необходимо, чтобы объяснить себя.
Как я объяснил в предыдущем посте, я пытаюсь заставить мой Embedded C Project (Infineon XE169 - C166 Family) связаться с uC/Probe. Но до сих пор я сталкиваюсь с несколькими проблемами. У меня была проблема с указателем, которая в настоящее время исправлена с помощью грязного обходного пути, поэтому ответ на этот пост придет позже, когда я получу чистое исправление (предыдущая проблема: выяснить, находится ли объект по определенному адресу это указатель)
Поскольку я (грязно) исправил эту проблему, все данные, передаваемые между uC / Probe и встроенным программным обеспечением, кажутся правильными. Но, однако, UC / Probe все еще не показывает данные.
При запуске uC / Probe с экраном Kernell Awareness будет отображаться правильное количество строк в таблице, это то же количество строк, что и для созданных задач (это можно увидеть в данных журнала ниже)
Эта же проблема возникает и в семафорах, мьютексах и других связанных с uC/OS III "объектах". Страницы Константы и Разное отображаются правильно с правильной информацией.
Это данные, передаваемые между Embedded C Software и uC/Probe.
Полностью слева - данные от uC / Probe до встроенной платы, а данные с вкладкой перед ними - от Embedded Board до uC/Probe.
uC / Probe начинается с запроса размеров очереди RX и TX, порядкового номера встроенного чипа, использования ЦП и некоторой дополнительной информации, которая требуется, я попытался добавить за каждой строкой данных, что именно запрашивается и что отвечает.
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 /
Последнее сообщение выше - это ответ от встроенной платы на uC / Probe со всеми данными запрошенного задания (OS_TCB).
Ниже я извлек сообщение, и весь OS_TCB, кажется, отправлено правильно.
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
Но после того, как эти данные отправлены в uC / Probe, они, похоже, ничего не делают с этими данными, единственные данные, передаваемые между двумя программами, теперь следующие:
Он продолжает запрашивать количество задач и указатель текущей задачи и ничего больше. Я только добавил 2 цикла этого, но он продолжает запрашивать эти данные до бесконечности.
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
Поэтому я надеюсь, что кто-то может сказать мне, если что-то не так в приведенном выше сообщении, или почему uC / Probe зависает в вышеуказанном цикле запроса количества задач и указателя текущей задачи? И почему он не запрашивает информацию указателя, такую как имя задачи, и продолжает запрашивать данные других задач?