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.

CCS/LAUNCHXL-CC26X2R1: Execution and Load Analysis Configuration

Part Number: LAUNCHXL-CC26X2R1
Other Parts Discussed in Thread: SYSCONFIG, , SYSBIOS

Tool/software: Code Composer Studio

Hi folks,

I am unable to generate execution or load analysis graphs. I followed the TI-RTOS Basics tutorial to familiarize myself with the debugging tools available through CCS, deviating only from the provided source to rely on SysConfig and the empty example project (.\simplelink_cc13x2_26x2_sdk_4_30_00_54\examples\rtos\CC26X2R1_LAUNCHXL\drivers\empty\tirtos\ccs). I strongly suspect this is a user error associated with my debug.cfg, DefaultSession.usmxml, RTOS_Training.uia.xml, or RTOS_Training.syscfg files. I have included these and online references I reviewed at the end of this post. The rest of this post documents the overall project setup.

Thank you in advance for your input!

Ken (Rye)

EDIT: Fixed broken file uploads and picture uploads.

Experimental Setup

I am running Code Compositor Studio 10.1.1 on Windows 10 with the LAUNCHXL-CC26X2R1 featuring the CC2652R1F Cortex M4.

CCS Environment

Project Overview

Board Config 
(Device Config also selected)

Project Setup
Compiler Version TI v20.2.3.LTS
Output Type Executable
Output format eabi (ELF)
Device Endianness little

Project Products
System Analyzer (UIA Target) 2.30.1.02
SysConfig 1.60
SimpleLink CC13x2 26x2 SDK 4.30.0.54
XDCtools 3.61.2.27_core

Configuration and Results

Following the tutorial, I commented out the code in the "ROM Configuration" and uncommented the code in "Logging Configuration." I have also added the line, "var UIAProfile = xdc.useModule('ti.uia.events.UIAProfile');"

debug.cfg

/* == ROM configuration == */

var ROM = xdc.useModule('ti.sysbios.rom.ROM');

ROM.romName = ROM.CC13X2V2;

/* == Logging configuration == */

//var Log = xdc.useModule('xdc.runtime.Log');

var LoggingSetup = xdc.useModule('ti.uia.sysbios.LoggingSetup');

LoggingSetup.loadLoggerSize = 256;

LoggingSetup.mainLoggerSize = 512;

LoggingSetup.sysbiosLoggerSize = 1024;

 

I cleaned the project and ensured that the secondary project, “tirtos_builds_cc13x2_cc26x2_release_ccs” was set to “Debug” rather than “Release” before building the source. I disabled all breakpoints in the code before debugging the code and opening the Execution Analysis (Tools → RTOS Analyzer → Execution Analysis/Load Analysis). I created a new UIA config with the following settings and by renaming an empty text file to RTOS_Training.uia.xml to proceed. 

Load Analysis

The Live Session for both Execution and Load Analysis fail to populate. I have tried to run program before and after hitting Play/Stop in the live session window.

I have tried a number of different settings within my debug.cfg file based on other forum posts (linked in resources below), however I fail to see any kind of LoggerStopMode resource within Runtime Object View. While exploring SysConfig, I found the following set of configuration settings that APPEAR to be doing something (as indicated by the new modules populating in ROV, but the Live Session data is still unpopulated,

SysConfig based Logging Setup


My Project Resources for Review

RTOS_Training.syscfg and DedfaultSession.usmxml extensions were changed for upload compatability

debug.cfg 3264.debug.cfg

RTOS_Training.syscfg

(Remove.xml Extension)

/**
 * These arguments were used when this file was generated. They will be automatically applied on subsequent loads
 * via the GUI or CLI. Run CLI with '--help' for additional information on how to override these arguments.
 * @cliArgs --board "/ti/boards/CC26X2R1_LAUNCHXL" --product "simplelink_cc13x2_26x2_sdk@4.30.00.54"
 * @versions {"data":"2020090214","timestamp":"2020090214","tool":"1.6.0+1543","templates":"2020090214"}
 */

/**
 * Import the modules used in this configuration.
 */
const Display        = scripting.addModule("/ti/display/Display", {}, false);
const Display1       = Display.addInstance();
const GPIO           = scripting.addModule("/ti/drivers/GPIO");
const GPIO1          = GPIO.addInstance();
const GPIO2          = GPIO.addInstance();
const RTOS           = scripting.addModule("/ti/drivers/RTOS");
const LoggerITM      = scripting.addModule("/ti/loggers/drivers/LoggerITM", {}, false);
const LoggerITM1     = LoggerITM.addInstance();
const ExGr_LoggerBuf = scripting.addModule("/ti/loggers/utils/ExGr_LoggerBuf");
const Bench          = scripting.addModule("/ti/utils/runtime/Bench", {}, false);
const Bench1         = Bench.addInstance();
const ExGr_SYSBIOS   = scripting.addModule("/ti/utils/runtime/ExGr_SYSBIOS");
const ExGr_tiutils   = scripting.addModule("/ti/utils/runtime/ExGr_tiutils");
const LogMain        = scripting.addModule("/ti/utils/runtime/LogMain");
const LogSite        = scripting.addModule("/ti/utils/runtime/LogSite", {}, false);
const LogSite1       = LogSite.addInstance();
const LoggerText     = scripting.addModule("/ti/utils/runtime/LoggerText", {}, false);
const LoggerText1    = LoggerText.addInstance();

/**
 * Write custom configuration values to the imported modules.
 */
Display1.$name                    = "CONFIG_Display_0";
Display1.$hardware                = system.deviceData.board.components.XDS110UART;
Display1.uart.$name               = "CONFIG_UART_1";
Display1.uart.txPinInstance.$name = "CONFIG_PIN_4";
Display1.uart.rxPinInstance.$name = "CONFIG_PIN_5";

GPIO1.$hardware         = system.deviceData.board.components.LED_RED;
GPIO1.$name             = "CONFIG_GPIO_LED_0";
GPIO1.pinInstance.$name = "CONFIG_PIN_0";

GPIO2.$hardware         = system.deviceData.board.components.LED_GREEN;
GPIO2.$name             = "CONFIG_GPIO_LED_1";
GPIO2.pinInstance.$name = "CONFIG_PIN_1";

const CCFG              = scripting.addModule("/ti/devices/CCFG", {}, false);
CCFG.ccfgTemplate.$name = "ti_devices_CCFGTemplate0";

LoggerITM1.$name = "CONFIG_ti_loggers_drivers_LoggerITM_0";

const ITM                = scripting.addModule("/ti/drivers/ITM", {}, false);
ITM.swoPinInstance.$name = "CONFIG_PIN_2";

ExGr_LoggerBuf.ExecGraphLogger.$name = "Config_ExecGraphLogger_0";

Bench1.$name = "CONFIG_Bench_0";

const ExGr_XDCtools                          = scripting.addModule("/ti/utils/runtime/ExGr_XDCtools", {}, false);
ExGr_XDCtools.ExecGraphLogger_xdctools.$name = "Config_ExecGraphLogger_1";

ExGr_tiutils.ExecGraphLogger_utils.$name   = "Config_ExecGraphLogger_2";
ExGr_tiutils.ExecGraphLogger_drivers.$name = "Config_ExecGraphLogger_3";

LogSite1.$name = "ti_utils_runtime_LogSite_0";

const LoggerBuf        = scripting.addModule("/ti/loggers/utils/LoggerBuf", {}, false);
const LoggerBuf1       = LoggerBuf.addInstance({}, false);
LoggerBuf1.$name       = "CONFIG_ti_loggers_utils_LoggerBuf_0";
LogSite1.logger        = LoggerBuf1;
LogMain.LogSite.logger = LoggerBuf1;

LoggerText1.$name = "CONFIG_ti_utils_runtime_LoggerText_0";

/**
 * Pinmux solution for unlocked pins/peripherals. This ensures that minor changes to the automatic solver in a future
 * version of the tool will not impact the pinmux you originally saw.  These lines can be completely deleted in order to
 * re-solve from scratch.
 */
Display1.uart.uart.$suggestSolution       = "UART1";
Display1.uart.uart.txPin.$suggestSolution = "boosterpack.4";
Display1.uart.uart.rxPin.$suggestSolution = "boosterpack.3";
GPIO1.gpioPin.$suggestSolution            = "boosterpack.39";
GPIO2.gpioPin.$suggestSolution            = "boosterpack.40";
ITM.swoPin.$suggestSolution               = "boosterpack.29";

DefaultSession.usmxml

(Remove.xml Extension)

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.8.0_144" class="java.beans.XMLDecoder">
 <object class="com.ti.uia.host.core.Session$Config" id="Session$Config0">
  <void property="endpoints">
   <void method="add">
    <object class="com.ti.uia.host.core.Session$Config$Endpoint">
     <void property="clockFreq">
      <long>48000000</long>
     </void>
     <void property="eventTransport">
      <object class="com.ti.uia.host.core.Session$Config$Transport">
       <void property="type">
        <string>JTAG</string>
       </void>
      </object>
     </void>
     <void property="name">
      <string>Cortex_M4_0</string>
     </void>
     <void property="outFile">
      <string>C:\Users\rRye\Texas Instruments Projects\Tutorial_RTOS\RTOS_Training\Debug\RTOS_Training.out</string>
     </void>
     <void property="rtaFile">
      <string>C:/Users/rRye/Texas Instruments Projects/Tutorial_RTOS/tirtos_builds_cc13x2_cc26x2_release_ccs/Debug/configPkg/package/cfg/release_pem4f.rta.xml</string>
     </void>
     <void property="uiaFile">
      <string>C:\Users\rRye\Texas Instruments Projects\Tutorial_RTOS\RTOS_Training\analysis\RTOS_Training.uia.xml</string>
     </void>
    </object>
   </void>
  </void>
  <void property="eventTransport">
   <object class="com.ti.uia.host.core.Session$Config$Transport" id="Session$Config$Transport0">
    <void property="type">
     <string>None</string>
    </void>
   </object>
  </void>
  <void property="msgTransport">
   <object class="com.ti.uia.host.core.Session$Config$Transport">
    <void property="type">
     <string>None</string>
    </void>
   </object>
  </void>
 </object>
<void class="com.ti.uia.host.core.Session$Config$Transport" id="Field0" method="getField">
 <string>customProperties</string>
 <void id="Properties0" method="get">
  <object idref="Session$Config$Transport0"/>
  <void method="put">
   <string>Address</string>
   <string>localhost</string>
  </void>
  <void method="put">
   <string>Port</string>
   <int>8080</int>
  </void>
 </void>
</void>
<void idref="Properties0"/>
</java>
RTOS_Training.uia.xml Empty FIle

Online Resources:

  • Hello Kenneth,

    I have assigned an expert to help you.

    -Luis

  • Much appreciated, Luis. I will keep my eye on this thread. 

    I plan to upload this project as an archive once this bug is sorted out so others can learn from it as well.

  • Hi Kenneth,

    Thank you for such a detailed post and clear instructions!

    I see that the TI-RTOS Basics tutorial you linked to is from SimpleLink CC32xx SDK which may differ from the steps you need for the CC26x2R1 device. I cross checked the information and I believe it looks the same, but for reference you can find the SimpleLink CC13x2 26x2 SDK TI-RTOS Basics at the following link: https://dev.ti.com/tirex/explore/content/simplelink_academy_cc13x2_26x2sdk_4_30_02_00/modules/rtos/tirtos_basics/tirtos_basics.html#introduction

    After analyzing the modifications you made, it appears that the only thing that is missing is enabling the BIOS log. For the execution graph, you will need to enable logs within the BIOS library. In your .cfg file, modify BIOS.logsEnabled = false (on line 36 of the file you provided) to be BIOS.logsEnabled = true. 

    Please let me know if additional clarification is needed. Thanks!

    Best Regards,

    Jenny

  • I also discovered the "XGCONF" utility which can be accessed by right-clicking the .cfg file, navigating to "Open With" and then selecting XGCONF. I was able to walk through the relevant settings there and realized I was missing that flag in my manually edited cfg source. 

    Thank you Jenny T. - I am now able to debug successfully.

    Attached is my minimal "tirtos_builds_cc13x2_cc26x2_release_ccs" project which includes a debug and release kernel module configuration files for anyone else who is stuck and looking for answers. It is worth noting that this project source includes minimal kernel modules and defines static tasks. For beginners reading this post, please check out the XGCONF utility I mentioned and review relevant documentation for module configuration to build from this project source.

    tirtos_builds_cc13x2_cc26x2_release_ccs.zip