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.

Empty RTOS Analyzer Graphs

Other Parts Discussed in Thread: CC3200, CC3200-LAUNCHXL, SYSBIOS

I'm running code on a CC3200 LAUNCHXL board connected to the development PC via USB. However all of the graphs in the RTOS analyzer such as execution graph, task profiler etc are all empty.

Any ideas what could be causing this?

  • What application are you running?  Have you enabled instrumentation?  

    There is extensive documentation in the TI-RTOS release regarding enabling and using the analysis tools.  The System Analyzer User’s Guide (in the UIA product installation subdirectory) is probably the most useful.  A web link: downloads.ti.com/.../spruh43f.pdf  

    If you are just starting out, a good example to look at is the Stairstep example.  Open View->Resource Explorer.  Click on the TI-RTOS for CC32xx bundle, and navigate to Wireless Connectivity MCU->CC3200->CC3200-LAUNCHXL SimpleLink Wi-Fi Launchpad->Instrumentation Examples-> TI Instrumentation Examples. Select the Stairstep JTAG StopMode example, then build and run it to test out the analyzer views.

    Does this help?

    Scott

  • Thanks - I will check out the sample you have suggested. I'm running the wlan_ap sample (which works fine) and I used that as a basis for the application I'm working on so it has been modified for my purpose so now it has an timer ISR as well as a second task. Things are not working as expected so I want to see a timeline of the threads and events.

    As far as I know I have enabled instrumentation - listed below is the contents of the cfg file.

    **********************

    var Defaults = xdc.useModule('xdc.runtime.Defaults');
    var Diags = xdc.useModule('xdc.runtime.Diags');
    var Error = xdc.useModule('xdc.runtime.Error');
    var Log = xdc.useModule('xdc.runtime.Log');
    var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
    var Main = xdc.useModule('xdc.runtime.Main');
    var Memory = xdc.useModule('xdc.runtime.Memory')
    var SysMin = xdc.useModule('xdc.runtime.SysMin');
    var System = xdc.useModule('xdc.runtime.System');
    var Text = xdc.useModule('xdc.runtime.Text');

    var BIOS = xdc.useModule('ti.sysbios.BIOS');
    var Clock = xdc.useModule('ti.sysbios.knl.Clock');
    var Task = xdc.useModule('ti.sysbios.knl.Task');
    var Semaphore = xdc.useModule('ti.sysbios.knl.Semaphore');
    var Swi = xdc.useModule('ti.sysbios.knl.Swi');
    var Hwi = xdc.module('ti.sysbios.family.arm.m3.Hwi');
    var Mailbox = xdc.useModule('ti.sysbios.knl.Mailbox');
    var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
    var LoggingSetup = xdc.useModule('ti.uia.sysbios.LoggingSetup');
    var LoggerStopMode = xdc.useModule('ti.uia.loggers.LoggerStopMode');

    /*
    * Program.argSize sets the size of the .args section.
    * The examples don't use command line args so argSize is set to 0.
    */
    Program.argSize = 0x0;

    /*
    * Uncomment this line to globally disable Asserts.
    * All modules inherit the default from the 'Defaults' module. You
    * can override these defaults on a per-module basis using Module.common$.
    * Disabling Asserts will save code space and improve runtime performance.
    Defaults.common$.diags_ASSERT = Diags.ALWAYS_OFF;
    */

    /*
    * Uncomment this line to keep module names from being loaded on the target.
    * The module name strings are placed in the .const section. Setting this
    * parameter to false will save space in the .const section. Error and
    * Assert messages will contain an "unknown module" prefix instead
    * of the actual module name.
    Defaults.common$.namedModule = false;
    */

    /*
    * Minimize exit handler array in System. The System module includes
    * an array of functions that are registered with System_atexit() to be
    * called by System_exit().
    */
    System.maxAtexitHandlers = 4;

    /*
    * Uncomment this line to disable the Error print function.
    * We lose error information when this is disabled since the errors are
    * not printed. Disabling the raiseHook will save some code space if
    * your app is not using System_printf() since the Error_print() function
    * calls System_printf().
    Error.raiseHook = null;
    */

    /*
    * Uncomment this line to keep Error, Assert, and Log strings from being
    * loaded on the target. These strings are placed in the .const section.
    * Setting this parameter to false will save space in the .const section.
    * Error, Assert and Log message will print raw ids and args instead of
    * a formatted message.
    Text.isLoaded = false;
    */

    /*
    * Uncomment this line to disable the output of characters by SysMin
    * when the program exits. SysMin writes characters to a circular buffer.
    * This buffer can be viewed using the SysMin Output view in ROV.
    SysMin.flushAtExit = false;
    */

    /*
    * The BIOS module will create the default heap for the system.
    * Specify the size of this default heap.
    */
    //BIOS.heapSize = 0x8000;
    Program.heap = 0x8000

    /* System stack size (used by ISRs and Swis) */
    Program.stack = 0x2000;



    /* Circular buffer size for System_printf() */
    SysMin.bufSize = 0x400;

    /*
    * Create and install logger for the whole system
    */
    var loggerBufParams = new LoggerBuf.Params();
    loggerBufParams.numEntries = 32;
    var logger0 = LoggerBuf.create(loggerBufParams);
    Defaults.common$.logger = logger0;
    Main.common$.diags_INFO = Diags.ALWAYS_ON;

    System.SupportProxy = SysMin;

    var BIOS = xdc.useModule('ti.sysbios.BIOS');

    BIOS.libType = BIOS.LibType_Custom;

    BIOS.cpuFreq.lo = 80000000;
    BIOS.cpuFreq.hi = 0;

    Boot = xdc.module('ti.catalog.arm.cortexm4.tiva.ce.Boot');
    Boot.configureClock = false;


    Hwi.vectorTableAddress = 0x20004000;
    Hwi.resetVectorAddress = 0x20004000;

    //Enable user software interrupt
    Hwi.nvicCCR.USERSETMPEND = 1;
    //Enable nesting
    Hwi.dispatcherAutoNestingSupport = true;
    //mask interrupts with priority 1 & above (default)
    Hwi.disablePriority = 32;
    // using MAB 3 bit priority bits – without this priority will not be set properly
    Hwi.priGroup = 4;

    /* Required if timer/clock/timestamp is being used */
    var Timer = xdc.useModule('ti.sysbios.hal.Timer');
    //Timer.TimerProxy = xdc.useModule('ti.sysbios.family.arm.lm4.Timer');
    Timer.TimerProxy = xdc.useModule('ti.sysbios.family.arm.m3.Timer');

    var Timestamp = xdc.useModule('xdc.runtime.Timestamp');
    //Timestamp.SupportProxy = xdc.useModule('ti.sysbios.family.arm.lm4.TimestampProvider');
    Timestamp.SupportProxy = xdc.useModule('ti.sysbios.family.arm.m3.TimestampProvider');

    Clock.TimerProxy = xdc.useModule('ti.sysbios.family.arm.m3.Timer');

    //var Idle = xdc.useModule('ti.sysbios.knl.Idle');
    //Idle.addFunc('&vApplicationIdleHook');

    //var MessageQ = xdc.useModule('ti.sdo.ipc.MessageQ');
    // Maximum length of MessageQ names
    //MessageQ.maxNameLen = 5;
    // Max number of MessageQs that can be dynamically created
    //MessageQ.maxRuntimeEntries = 3;
    // Number of heapIds in the system
    //MessageQ.numHeaps = 0;
    // Section name used to place the names table
    //MessageQ.tableSection = null;

    //BIOS.clockEnabled = false;
    //Clock.tickSource = Clock.TickSource_NULL;
    LoggingSetup.enableTaskProfiler = true;
    LoggingSetup.enableContextAwareFunctionProfiler = true;
    LoggingSetup.sysbiosSwiLogging = true;
    LoggingSetup.sysbiosHwiLogging = true;
    LoggingSetup.sysbiosSemaphoreLogging = true;
    LoggingSetup.loadHwiLogging = true;
    LoggingSetup.loadSwiLogging = true;
    LoggingSetup.loadTaskLogging = true;