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.

LP-EM-CC1354P10: Externally built Executable, ROV, and FreeRTOS

Part Number: LP-EM-CC1354P10
Other Parts Discussed in Thread: SYSCONFIG
  • CCS Version 12.3.0
  • SDK Version simplelink_cc13xx_cc26xx_sdk_7_10_00_98

I'm working with a customer that is building their application external to CCS (not a CCS managed project). They are then manually creating a target configuration and loading that external application (*.out in ELF format, built using GCC) to their connected target in CCS.

At this point, they open the Tools -> Runtime Object View, except that it does not show all the FreeRTOS related modules we would expect. Instead, all it shows is this:

The externally built project does include SysConfig, and is generating a sysconfig_c.rov.xs file. We subsequently found the following instruction:

https://software-dl.ti.com/ccs/esd/documents/rov_guide/html/src/rov.html#controlling-the-module-list

Note: ROV finds the list of modules by examining the <code>.rov.xs</code> file on the host. When you build a TI-RTOS application, this file is generated automatically in a subdirectory of the application’s configuration project tree. If you specified a path to the executable when connecting to ROV (rather than using the program currently being debugged in CCS), ROV looks for the <code>.rov.xs</code> file in the same directory that contains the executable and in the <code>configPkg/package/cfg</code> subdirectory

However, these instructions do not appear to actually work. We've tried without success. Are we missing something?

Thanks,

Stuart

  • However, these instructions do not appear to actually work. We've tried without success. Are we missing something?

    I was playing around with this and what is missing is that ROV needs to know which SDK is being used and where it is. During a project debug, it knows since the project typically has an SDK specified. For a project-less debug (which is what I assume is going on here), it knows where the out file is and the xs file is, but not the SDK information.

    Why is the SDK information important? If you open up the *.xs file, you will see a bunch of relative paths to other *.js files in the SDK. If ROV does not know which SDK it used and where it is, then it can't find those files and you get the issue you see.

    /*
     *  ======== syscfg_c.rov.xs ========
     *  This file contains the information needed by the Runtime Object
     *  View (ROV) tool.
     *
     *  Specifically, this file names the C-ROV implementation files declared
     *  by the modules that are part of the app's configuration.  In the
     *  future this file will also contain a serialization of corresponding
     *  module configuration parameters which can be used by the ROV provided
     *  views.
     *
     *  DO NOT EDIT - This file is generated by the SysConfig tool.
     */
    var crovFiles = [
        "kernel/freertos/rov/heap.rov.js", /* /freertos/FreeRTOS ROV support */
        "kernel/freertos/rov/helper.rov.js", /* /freertos/FreeRTOS ROV support */
        "kernel/freertos/rov/mutex.rov.js", /* /freertos/FreeRTOS ROV support */
        "kernel/freertos/rov/queue.rov.js", /* /freertos/FreeRTOS ROV support */
        "kernel/freertos/rov/semaphore.rov.js", /* /freertos/FreeRTOS ROV support */
        "kernel/freertos/rov/stack.rov.js", /* /freertos/FreeRTOS ROV support */
        "kernel/freertos/rov/task.rov.js", /* /freertos/FreeRTOS ROV support */
        "kernel/freertos/rov/timer.rov.js", /* /freertos/FreeRTOS ROV support */
        "kernel/freertos/rov/clock.rov.js", /* /freertos/dpl/Settings ROV support */
        "kernel/freertos/rov/exception.rov.js", /* /freertos/dpl/Settings ROV support */
        "kernel/freertos/rov/hwi.rov.js", /* /freertos/dpl/Settings ROV support */
        "kernel/freertos/rov/nvic.rov.js", /* /freertos/dpl/Settings ROV support */
    ];
    


    One workaround is to manually replace all the absolute paths with relative ones:

    /*
     *  ======== syscfg_c.rov.xs ========
     *  This file contains the information needed by the Runtime Object
     *  View (ROV) tool.
     *
     *  Specifically, this file names the C-ROV implementation files declared
     *  by the modules that are part of the app's configuration.  In the
     *  future this file will also contain a serialization of corresponding
     *  module configuration parameters which can be used by the ROV provided
     *  views.
     *
     *  DO NOT EDIT - This file is generated by the SysConfig tool.
     */
    var crovFiles = [
        "C:/ti/simplelink_cc13xx_cc26xx_sdk_7_10_01_24/kernel/freertos/rov/heap.rov.js", /* /freertos/FreeRTOS ROV support */
        "C:/ti/simplelink_cc13xx_cc26xx_sdk_7_10_01_24/kernel/freertos/rov/helper.rov.js", /* /freertos/FreeRTOS ROV support */
        "C:/ti/simplelink_cc13xx_cc26xx_sdk_7_10_01_24/kernel/freertos/rov/mutex.rov.js", /* /freertos/FreeRTOS ROV support */
        "C:/ti/simplelink_cc13xx_cc26xx_sdk_7_10_01_24/kernel/freertos/rov/queue.rov.js", /* /freertos/FreeRTOS ROV support */
        "C:/ti/simplelink_cc13xx_cc26xx_sdk_7_10_01_24/kernel/freertos/rov/semaphore.rov.js", /* /freertos/FreeRTOS ROV support */
        "C:/ti/simplelink_cc13xx_cc26xx_sdk_7_10_01_24/kernel/freertos/rov/stack.rov.js", /* /freertos/FreeRTOS ROV support */
        "C:/ti/simplelink_cc13xx_cc26xx_sdk_7_10_01_24/kernel/freertos/rov/task.rov.js", /* /freertos/FreeRTOS ROV support */
        "C:/ti/simplelink_cc13xx_cc26xx_sdk_7_10_01_24/kernel/freertos/rov/timer.rov.js", /* /freertos/FreeRTOS ROV support */
        "C:/ti/simplelink_cc13xx_cc26xx_sdk_7_10_01_24/kernel/freertos/rov/clock.rov.js", /* /freertos/dpl/Settings ROV support */
        "C:/ti/simplelink_cc13xx_cc26xx_sdk_7_10_01_24/kernel/freertos/rov/exception.rov.js", /* /freertos/dpl/Settings ROV support */
        "C:/ti/simplelink_cc13xx_cc26xx_sdk_7_10_01_24/kernel/freertos/rov/hwi.rov.js", /* /freertos/dpl/Settings ROV support */
        "C:/ti/simplelink_cc13xx_cc26xx_sdk_7_10_01_24/kernel/freertos/rov/nvic.rov.js", /* /freertos/dpl/Settings ROV support */
    ];

    This seemed to work for me. 

    If the customer is reluctant to modify a generated file, they can also create a dummy CCS project used just for debug and copy over the *.out and *.xs to it and then associate the SDK to the project. 

    Anyway, these workarounds are not pretty so I was talking with the IDE team and we have some ideas to improve how ROV works in CCS Theia.

    Thanks

    ki

  • Ki,

    This is very helpful. I tried the "dummy CCS project" suggestion. Worked okay if you ignore certain warnings and manually launch the target config.

    I do think the IDE team should spend some time on this project-less debug scenario. It is becoming increasingly common with some of the standard protocol stacks (Matter, OpenThread, etc...) for the build environment to be command line based outside an IDE (CMake, GNU Make, Ninja, etc...), so customers will be increasingly running into this issue.

    Thanks,

    Stuart

  • I do think the IDE team should spend some time on this project-less debug scenario

    Agreed. I filed a Jira to track this effort. Please note that any improvements made to ROV will be implemented in CCS Theia only as we start to (slowly) move away from CCS Eclipse.