123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465 |
- function isValid( task ) {
- return !( ( task == undefined ) || (task == 0) );
- }
- function get_tcb(hTask) {
-
- return Debug.evaluate("*(k_thread*)" + hTask);
- }
- function get_thread_tid(hTask) {
-
- return "0x" + hTask.toString(16);
- }
- function get_thread_entry(hTask) {
- var task = get_tcb(hTask);
- if ( isValid(task) ) {
-
- if (Debug.getSymbol) return Debug.getSymbol( task.entry.pEntry );
-
- if (Debug.getfunction) return Debug.getfunction( task.entry.pEntry );
- return "0x" + task.entry.pEntry.toString(16);
- }
- return "undefined";
- }
- function get_thread_prio(hTask) {
- var task = get_tcb(hTask);
- if ( isValid(task) ) {
-
- if ( task.base.prio != undefined ) return task.base.prio;
-
- if ( task.base["<<anonymous>_1>"]["<<anonymous>_0>"].prio != undefined ) return task.base["<<anonymous>_1>"]["<<anonymous>_0>"].prio;
- }
- return "undefined";
- }
- function get_thread_exc_return(hTask) {
- var task = get_tcb(hTask);
- if ( isValid(task) ) {
- if ( task.arch["<<anonymous>_0>"]["<<anonymous>_0>"].mode_exc_return != undefined ) return task.arch["<<anonymous>_0>"]["<<anonymous>_0>"].mode_exc_return;
- }
- return "undefined";
- }
- function get_thread_state(hTask) {
- var task = get_tcb(hTask);
- if (task == undefined || task == 0) {
- return "invalid";
- } else {
-
-
-
-
-
-
-
-
- var state = task.base.thread_state;
- if (state & (1 << 3)) {
- return "Dead";
- }
- if (state & (1 << 2)) {
- return "Prestart";
- }
- if (state & (1 << 5)) {
- return "Aborting";
- }
- if (state & (1 << 6)) {
- return "Aborting";
- }
- if (state & (1 << 1)) {
- return "Blocked";
- }
- if (state & (1 << 4)) {
- return "Waiting";
- }
- if (state & (1 << 7)) {
- return "Ready";
- }
- return "Invalid";
- }
- }
- function get_thread_name(hTask) {
-
- var task = get_tcb(hTask);
- if ( isValid(task) ) {
- var name = "";
-
- if ( isValid(task.name) ) {
-
- var name_len = task.name.length;
- if (name_len != 0){
- for (var i = 0; i < name_len; i++) {
- var c = task.name[i];
- if (c != 0) {
- name += String.fromCharCode(c);
- }
- }
- return name;
- }
- }
-
- return "T0x"+hTask.toString(16)+"@"+get_thread_entry(hTask);
- }
- return "invalid";
- }
- function updateStackUsage(hTask){
- var unused;
- var StackUsage;
- var MaxStackUsed = "??";
- var task = get_tcb(hTask);
- var SP = task.callee_saved.psp;
- var sp_start = task.stack_info.start;
- var sp_size = task.stack_info.size;
- var sentinel;
-
-
- if (TargetInterface.findByte) {
-
-
-
- sentinel = TargetInterface.peekWord(sp_start);
- unused = TargetInterface.findNotByte(sp_start+4, sp_size-4, 0xaa);
- if ((sentinel == 0xaaaaaaaa) || (sentinel == 0xf0f0f0f0)) {
- unused += 4;
- }
- }
-
- MaxStackUsed = sp_size - unused;
- StackUsage = MaxStackUsed + " / " + sp_size + " @ 0x" + SP.toString(16) + " @ 0x" + sp_start.toString(16);
- return StackUsage;
- }
- function updateThreads() {
- if (Threads.newqueue2 == undefined) {
- Threads.newqueue( "Task List" )
- }
-
- var idle_ptask = Debug.evaluate("&z_idle_threads[0]");
-
-
- var main_ptask = Debug.evaluate("&z_main_thread");
-
-
- var current_ptask = Debug.evaluate("_kernel.ready_q.cache");
-
-
- var ptask = Debug.evaluate("_kernel.threads");
-
-
- if( false == isValid(ptask) ) Threads.add( "Enable THREAD_MONITOR for information", undefined );
- while ( isValid(ptask) ) {
-
- var task = get_tcb(ptask);
- var task_name = get_thread_name(ptask);
- var tid = get_thread_tid(ptask);
- var entry = get_thread_entry(ptask);
- var prio = get_thread_prio(ptask).toString();
- var status;
- if (current_ptask == ptask) status = "Executing";
- else if (idle_ptask == ptask) status = "Ready";
- else status = get_thread_state(ptask);
-
-
- var sp = updateStackUsage(ptask);
- Threads.add( task_name, tid, entry, prio, status, sp, (current_ptask == ptask) ? undefined : ptask);
- ptask = task.next_thread;
- }
- }
- function UpdateMutexes( Window ) {
- var pMutex = undefined;
- while (pMutex) {
-
-
-
-
- Window.add2( Mutextes,
- "0x" + pMutex.toString(16).toUpperCase(),
- "..."
- );
- }
- }
- function UpdateTodo( Window ) {
- Window.add2("...", "Todo: Add more information" );
- }
- function init() {
-
- Threads.clear();
-
- Threads.newqueue("Task List");
-
- Threads.setColumns("Threads", "TID", "Entry", "Priority", "Status", "Stack" );
-
- Threads.setSortByNumber("TID");
-
- Threads.setSortByNumber("Priority");
-
- Threads.setSortByNumber("Stack");
-
- if (Threads.setColor) {
- Threads.setColor("Status", "Ready", "Executing", "Waiting");
- }
-
- if (Threads.setColumns2) {
-
- if(Mutexes ) Threads.setColumns2(Mutexes, "Mutexes" );
- if(Semaphores ) Threads.setColumns2(Queues, "Queues");
- if(Queues ) Threads.setColumns2(Semaphores, "Semaphores");
- if(Mailboxes ) Threads.setColumns2(Mailboxes, "Mailboxes");
- if(Timers ) Threads.setColumns2(Timers, "Timers");
- if(MemoryPools ) Threads.setColumns2(MemoryPools, "MemoryPools");
- if(SystemInformation) Threads.setColumns2(SystemInformation, SystemInformation, "Value" );
- Threads.setColumns2( "...", "..." );
- }
- TargetInterface.message( "Loaded" );
- }
- function update() {
-
-
-
- Threads.clear();
-
-
-
- if (Threads.newqueue2 != undefined) {
- if (Mutexes && Threads.shown(Mutexes)) UpdateMutexes(Threads);
- if (Semaphores && Threads.shown(Semaphores)) UpdateSemaphores(Threads);
- if (Queues && Threads.shown(Queues)) UpdateQueues(Threads);
- if (Mailboxes && Threads.shown(Mailboxes)) UpdateMailboxes(Threads);
- if (Timers && Threads.shown(Timers)) UpdateTimers(Threads);
- if (MemoryPools && Threads.shown(MemoryPools)) UpdateMemoryPools(Threads);
- if (SystemInformation && Threads.shown(SystemInformation)) UpdateSystemInformation(Threads);
-
- if ( Threads.shown("...")) UpdateTodo(Threads);
- }
- updateThreads();
- }
- function getname(hTask) {
- return get_thread_name(hTask);
- }
- function getregs(hTask) {
- TargetInterface.message( "refresh registers" );
- FPSCR = 39;
- S0ofs = 64;
- S16ofs = S0ofs + 16;
- var regs = new Array(100);
- var task = get_tcb(hTask);
-
-
-
- var SP = task.callee_saved.psp;
-
-
-
- regs[ 4] = task.callee_saved.v1;
- regs[ 5] = task.callee_saved.v2;
- regs[ 6] = task.callee_saved.v3;
- regs[ 7] = task.callee_saved.v4;
- regs[ 8] = task.callee_saved.v5;
- regs[ 9] = task.callee_saved.v6;
- regs[10] = task.callee_saved.v7;
- regs[11] = task.callee_saved.v8;
-
-
-
- for (var i = 0; i < 4; i++){
- regs[i] = TargetInterface.peekWord(SP);
- SP += 4;
- }
- regs[12] = TargetInterface.peekWord(SP);
- SP += 4;
- regs[14] = TargetInterface.peekWord(SP);
- SP += 4;
- regs[15] = TargetInterface.peekWord(SP);
- SP += 4;
- regs[16] = TargetInterface.peekWord(SP);
- SP += 4;
-
-
-
- var pFPRegs = Debug.evaluate( "thread->arch.preempt_float" );
- var ExcReturn = get_thread_exc_return(hTask);
- if ((ExcReturn & 0x10) == 0) {
-
-
- for( var i=0; i<16; ++i ) {
- regs[S0ofs + i] = TargetInterface.peekWord(SP);
- SP += 4;
- }
- regs[FPSCR] = TargetInterface.peekWord(SP);
- SP += 4;
- SP += 4;
-
- for( var i=0; i<16; ++i ) {
- regs[S16ofs + i] = TargetInterface.peekWord(pFPRegs + 4*i);
- }
- }
-
-
-
-
- if (regs[16] & (1<<9)) {
- if ((SP % 8) != 0) {
-
- SP += 4;
- }
- }
-
-
-
-
- regs[13] = SP;
- return regs;
- }
- function getContextSwitchAddrs() {
- var aAddrs;
- var Addr;
- Addr = Debug.evaluate("&__swap")
- if (Addr == undefined) {
- Addr = Debug.evaluate("&arch_swap")
- }
- if (Addr == undefined) {
- return [];
- }
- aAddrs = new Array(1);
- aAddrs[0] = Addr;
- return aAddrs;
- }
- function getOSName() {
- return "Zephyr";
- }
|