"SES > File > Open nRF Connect SDK Project..." does not seem to include a thread aware script for Zephyr. Is there a provided script for this somewhere? If not is there a reason it isn't included?
From an earlier post, I create the script below based on the scant information I could find:
// prj.conf:
// CONFIG_THREAD_MONITOR=y
// CONFIG_THREAD_STACK_INFO=y
// CONFIG_THREAD_NAME=y
function init()
{
Threads.setColumns("Name", "Fn", "Priority", "State", "Handle");
Threads.setSortByNumber("Priority");
Threads.setSortByNumber("State");
Threads.setSortByNumber("Handle");
}
function z_thread_state_string(thread_state)
{
switch (thread_state) {
case 0:
return "";
break;
case 0x1:
return "dummy";
break;
case 0x2:
return "pending";
break;
case 0x4:
return "prestart";
break;
case 0x8:
return "dead";
break;
case 0x10:
return "suspended";
break;
case 0x20:
return "aborting";
break;
case 0x40:
return "aborted in ISR";
break;
case 0x80:
return "queued";
break;
}
return "unknown";
}
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);
var fn = Debug.evaluate("*((k_thread*)"+z_thread+")->entry.pEntry");
var name = Debug.evaluate("(char *)((k_thread*)"+z_thread+")->name)");
var state = z_thread_state_string(td.base.thread_state)
Threads.add(name, fn, td.base.prio, state, "0x"+z_thread.toString(16), z_thread);
z_thread = td.next_thread;
count++;
}
}
function getregs(x)
{
var td = Debug.evaluate("*(k_thread*)"+x);
var r0 = Debug.evaluate("*(int*)(((k_thread*)"+x+")->callee_saved.psp + 0)");
var r1 = Debug.evaluate("*(int*)(((k_thread*)"+x+")->callee_saved.psp + 4)");
var r2 = Debug.evaluate("*(int*)(((k_thread*)"+x+")->callee_saved.psp + 8)");
var r3 = Debug.evaluate("*(int*)(((k_thread*)"+x+")->callee_saved.psp + 12)");
var r12 = Debug.evaluate("*(int*)(((k_thread*)"+x+")->callee_saved.psp + 16)");
var lr = Debug.evaluate("*(int*)(((k_thread*)"+x+")->callee_saved.psp + 20)");
var pc = Debug.evaluate("*(int*)(((k_thread*)"+x+")->callee_saved.psp + 24)");
var xpsr = Debug.evaluate("*(int*)(((k_thread*)"+x+")->callee_saved.psp + 28)");
return [ r0, r1, r2, r3, 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, r12, td.callee_saved.psp, lr, pc, xpsr ];
}