This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

F29H850TU: CCS RTOS Object View (ROV) not displaying Queues/Semaphores/Mutexes/Timers

Part Number: F29H850TU
Other Parts Discussed in Thread: SYSCONFIG

Environment

  • CCS Theia (21.0.0.14__1.12.0 / install ccs2100)
  • Target: TI F29H850TU (C29 architecture), TI Clang (ticlang), FreeRTOS kernel port from f29h85x-sdk_1_02_01_00
  • Project uses SysConfig for FreeRTOS configuration (configUSE_TRACE_FACILITY=1, configQUEUE_REGISTRY_SIZE=10, configUSE_MUTEXES=1, configUSE_TIMERS=1 — all confirmed correctly generated in FreeRTOSConfig.h)

Configuration
image.png

Symptom In the RTOS Object View panel, Heap Overview, Task Overview, and Tasks tabs correctly populate with live data. Timers shows "No Timers" placeholder message. The Queues, Semaphores, and Mutexes tabs show "No data available" even though the application does create and register mutexes.

What we verified is NOT the cause

  • FreeRTOS config values (trace facility, queue registry size, mutex/timer enables) are all correctly set.
  • Initially, none of the application's mutexes were registered with vQueueAddToRegistry(), so the xQueueRegistry[] array (which the ROV script's Queues/Semaphores/Mutexes views all read from) was empty. We added vQueueAddToRegistry() calls after each of our 4 xSemaphoreCreateMutex*() call sites.
  • After rebuilding and reloading, we confirmed via direct memory/register inspection (reading xQueueRegistry and the underlying Queue_t struct fields on the live target) that the registry is now fully populated (10/10 entries) with valid, correctly-named mutex objects, and that ucQueueType reads back correctly as 1 (Mutex) at the byte offset the vendor script expects.
  • We also manually traced the vendor FreeRTOS.rov.js script's manual struct-offset parsing logic (parseQueueObjManually) against the actual compiled Queue_t layout and confirmed the offsets align correctly for this target/compiler.

Workaround attempted (per a prior TI forum answer) Based on an older TI forum thread, we also tried: excluding SysConfig's auto-generation of syscfg_c.rov.xs and substituting our own version of that file, together with a patched copy of FreeRTOS.rov.js inside the SDK's .../kernel/rtos/rov/ folder. Both files are attached to this question for reference.

The mentioned modification files can be found in the link.
Link to thread: https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1561448/f29h850tu-static-debug-variables-for-rov---freertos


  • Hello,

    Thanks for the comprehensive post. 

    One more thing to check would be that the projects SDK version matches the one in which you have the updated ROV file. Also that configCHECK_FOR_STACK_OVERFLOW is set to 2

    To verify the ROV file itself, can you check the control+rtos_demo example to see if the semaphore shows up in the ROV. If yes, there may be some problem in the way your registry is set up, and we can debug from there.

    One stopgap solution I can suggest in case you see no improvements is replacing the CCS installations ROV file directly with the one from the SDK. This file can be found at ccs2100\ccs\ccs_base\yarov\rov_freertos.js (maintain a backup of this as well). For instance, I see the following view for Mutexes when running the freertos_port_validation_tests validation project

    (There do seem to be mismatches when interpreting mutexes vs semaphores vs queues, but we should at least be able to view all of them)

    Regards,

    Arnav 

  • Thank you for your fast response Arnav. Following your suggestions, here's what we did and found:

    1. configCHECK_FOR_STACK_OVERFLOW — already set to 2, confirmed via SysConfig. Not the cause.

    2. Tested control+rtos_demo example — imported fresh from the same SDK (f29h85x-sdk_1_02_01_00) into our workspace, built and debugged it standalone. Its registered binary semaphore does show up correctly under Mutexes/Semaphores in ROV. This confirms the ROV mechanism and toolchain work in general.

    3. Replaced CCS's installed ROV script — backed up ccs2100/ccs/ccs_base/yarov/rov_freertos.js (the built-in 4-view script: Heap/Stack/TaskModule/TaskInstances — no Queues/Semaphores/Mutexes/Timers at all) and replaced it directly with the SDK's FreeRTOS.rov.js (7-view version). This removes any ambiguity about which script CCS is actually using. No change — our project's Queues/Semaphores/Mutexes tabs are still empty.

    4. Compared our object registration against the working demo line-by-line:

    • Demo: vQueueAddToRegistry(handle, name); vQueueSetQueueNumber(handle, uniqueValue); — we were missing the vQueueSetQueueNumber() call. We added it (unique non-zero value per object). No change.
    • Timing: we initially assumed our registrations happened after the scheduler started (from task context). We traced our main() and found this is not the case — like the demo, all our registrations happen in main(), before FreeRTOS_init() (which creates tasks and starts the scheduler). So registration timing is equivalent between our project and the demo.
    • Struct layout: verified byte-for-byte via the debugger that our compiled Queue_t layout matches what the ROV script's manual offset parser expects (configUSE_QUEUE_SETS=0 in both, no unexpected extra fields).
    • Confirmed via direct memory/register reads that our xQueueRegistry is fully and correctly populated (10/10 valid entries, correct names, ucQueueType=1 for Mutex, non-zero unique uxQueueNumber after our fix).

    Remaining known difference: the demo registers exactly 1 semaphore; our project registers 4 mutexes. We haven't been able to test whether object count is the actual trigger, since even a single mutex isn't showing yet in our project.


    And our project SDK versions:





    Best regarding,
    Jan
  • Hi Jan,

    Apologies for the delay, is there any change on issue?

    It would be hard to debug this further without inspecting the code, if you are able to send over the FreeRTOS skeleton code where the issue is recreated, we can check it out.

    Regards,

    Arnav