This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Segger Embedded Studio: adding thread awareness for Zephyr

I'm trying to piece together a thread awareness script for SES as outlined here: https://studio.segger.com/ide_threads_window.htm

I've got an extremely basic script that I know still has bugs, but at least enumerates all threads and their states:

function init()
{
  Threads.setColumns("Name", "Handle", "Priority", "State");
  Threads.setSortByNumber("Priority");
  Threads.setSortByNumber("State");
  Threads.setSortByNumber("Handle");
}

// Depends on CONFIG_THREAD_MONITOR in your prj.conf
function update()
{
  Threads.clear();
  var z_thread = Debug.evaluate("_kernel.threads");
  var count = 0;
  while (z_thread && count < 20) 
  {
    var td = Debug.evaluate("*(k_thread*)"+z_thread);
    Threads.add(td.name, z_thread, td.base.prio, td.base.thread_state, z_thread);
    z_thread = td.next_thread;
    count++;
  }
}

function getregs(x)
{
  // TODO - This function needs a lot of help ... it is very incomplete ...
  var td = Debug.evaluate("*(k_thread*)"+x);
  return [ 0, 1, 2, 3, td.callee_saved.v1, td.callee_saved.v2, td.callee_saved.v3, td.callee_saved.v4, td.callee_saved.v5, td.callee_saved.v6, td.callee_saved.v7, td.callee_saved.v8, 12, td.callee_saved.psp, 14, 15 ];
}

One thing i couldn't figure out is how to have it automatically imported into the SES project?  I can do it manually before I use it, but that's going to get annoying in the long run.  I'm not sure what bit of scripts generate the *.emProject files in the build directory and how to inject a file into them.  Anyone know?

Also, please feel free to suggest improvements to the script itself.  Getting all the registers is the another mystery I'm trying to solve.

Related