📄 simple.cxx
字号:
DIAG_DEVICE_END_SYNC();
HAL_RESTORE_INTERRUPTS(old_ints);
};
externC void
cyg_tracemsg6( cyg_uint32 what,
const char *psz_func, const char *psz_file, cyg_uint32 linenum,
const char *psz_msg,
CYG_ADDRWORD arg0, CYG_ADDRWORD arg1,
CYG_ADDRWORD arg2, CYG_ADDRWORD arg3,
CYG_ADDRWORD arg4, CYG_ADDRWORD arg5 )
{
cyg_uint32 old_ints;
HAL_DISABLE_INTERRUPTS(old_ints);
DIAG_DEVICE_START_SYNC();
if ( NULL == psz_msg )
psz_msg = "<nomsg>";
diag_write_string("TRACE: ");
write_thread_id();
diag_write_string(trim_file(psz_file));
write_lnum(linenum);
diag_write_string(trim_func(psz_func));
diag_write_char(' ');
#if CYG_DIAG_PRINTF
diag_printf( psz_msg, arg0, arg1, arg2, arg3, arg4, arg5 );
#else
diag_write_string(psz_msg);
diag_write_char(' ');
diag_write_hex(arg0);
diag_write_char(' ');
diag_write_hex(arg1);
diag_write_char(' ');
diag_write_hex(arg2);
diag_write_char(' ');
diag_write_hex(arg3);
diag_write_char(' ');
diag_write_hex(arg4);
diag_write_char(' ');
diag_write_hex(arg5);
#endif
diag_write_char('\n');
DIAG_DEVICE_END_SYNC();
HAL_RESTORE_INTERRUPTS(old_ints);
};
externC void
cyg_tracemsg8( cyg_uint32 what,
const char *psz_func, const char *psz_file, cyg_uint32 linenum,
const char *psz_msg,
CYG_ADDRWORD arg0, CYG_ADDRWORD arg1,
CYG_ADDRWORD arg2, CYG_ADDRWORD arg3,
CYG_ADDRWORD arg4, CYG_ADDRWORD arg5,
CYG_ADDRWORD arg6, CYG_ADDRWORD arg7 )
{
cyg_uint32 old_ints;
HAL_DISABLE_INTERRUPTS(old_ints);
DIAG_DEVICE_START_SYNC();
if ( NULL == psz_msg )
psz_msg = "<nomsg>";
diag_write_string("TRACE: ");
write_thread_id();
diag_write_string(trim_file(psz_file));
write_lnum(linenum);
diag_write_string(trim_func(psz_func));
diag_write_char(' ');
#if CYG_DIAG_PRINTF
diag_printf( psz_msg, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7 );
#else
diag_write_string(psz_msg);
diag_write_char(' ');
diag_write_hex(arg0);
diag_write_char(' ');
diag_write_hex(arg1);
diag_write_char(' ');
diag_write_hex(arg2);
diag_write_char(' ');
diag_write_hex(arg3);
diag_write_char(' ');
diag_write_hex(arg4);
diag_write_char(' ');
diag_write_hex(arg5);
diag_write_char(' ');
diag_write_hex(arg6);
diag_write_char(' ');
diag_write_hex(arg7);
#endif
diag_write_char('\n');
DIAG_DEVICE_END_SYNC();
HAL_RESTORE_INTERRUPTS(old_ints);
};
// -------------------------------------------------------------------------
externC void
cyg_trace_dump(void)
{
#if defined(CYGPKG_KERNEL) && defined(CYG_DIAG_PRINTF)
{
diag_printf("\nScheduler:\n\n");
Cyg_Scheduler *sched = &Cyg_Scheduler::scheduler;
diag_printf("Lock: %d\n",sched->get_sched_lock() );
# ifdef CYGVAR_KERNEL_THREADS_NAME
diag_printf("Current Thread: %s\n",sched->get_current_thread()->get_name());
# else
diag_printf("Current Thread: %d\n",sched->get_current_thread()->get_unique_id());
# endif
}
# ifdef CYGVAR_KERNEL_THREADS_LIST
{
Cyg_Thread *t = Cyg_Thread::get_list_head();
diag_printf("\nThreads:\n\n");
while( NULL != t )
{
cyg_uint32 state = t->get_state();
char tstate[7];
char *tstate1 = "SCUKX";
static char *(reasons[8]) =
{
"NONE", // No recorded reason
"WAIT", // Wait with no timeout
"DELAY", // Simple time delay
"TIMEOUT", // Wait with timeout/timeout expired
"BREAK", // forced break out of sleep
"DESTRUCT", // wait object destroyed[note]
"EXIT", // forced termination
"DONE" // Wait/delay complete
};
if( 0 != state )
{
// Knock out chars that do not correspond to set bits.
for( int i = 0; i < 6 ; i++ )
if( 0 == (state & (1<<i)) )
tstate[i] = ' ';
else tstate[i] = tstate1[i];
tstate[6] = 0;
}
else tstate[0] = 'R', tstate[1] = 0;
# ifdef CYGVAR_KERNEL_THREADS_NAME
diag_printf( "%20s pri = %3d state = %6s id = %3d\n",
t->get_name(),
t->get_priority(),
tstate,
t->get_unique_id()
);
# else
diag_printf( "Thread %3d pri = %3d state = %6s\n",
t->get_unique_id(),
t->get_priority(),
tstate
);
# endif
diag_printf( "%20s stack base = %08x ptr = %08x size = %08x\n",
"",
t->get_stack_base(),
#ifdef CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT
t->get_saved_context(),
#else
0,
#endif
t->get_stack_size()
);
diag_printf( "%20s sleep reason %8s wake reason %8s\n",
"",
reasons[t->get_sleep_reason()],
reasons[t->get_wake_reason()]
);
diag_printf( "%20s queue = %08x wait info = %08x\n",
"",
t->get_current_queue(),
t->get_wait_info()
);
diag_printf("\n");
t = t->get_list_next();
}
}
# endif // CYGVAR_KERNEL_THREADS_LIST
#endif // CYG_DIAG_PRINTF
}
#endif // CYGDBG_USE_TRACING
// -------------------------------------------------------------------------
// Assert functions:
#ifdef CYGDBG_USE_ASSERTS
externC void
cyg_assert_fail( const char *psz_func, const char *psz_file,
cyg_uint32 linenum, const char *psz_msg ) __THROW
{
cyg_uint32 old_ints;
HAL_DISABLE_INTERRUPTS(old_ints);
DIAG_DEVICE_START_SYNC();
diag_write_string("ASSERT FAIL: ");
write_thread_id();
diag_write_string(trim_file(psz_file));
write_lnum(linenum);
diag_write_string(trim_func(psz_func));
diag_write_char(' ');
diag_write_string(psz_msg);
diag_write_char('\n');
#ifdef CYGHWR_TEST_PROGRAM_EXIT
CYGHWR_TEST_PROGRAM_EXIT();
#endif
for(;;);
// DIAG_DEVICE_END_SYNC();
// HAL_RESTORE_INTERRUPTS(old_ints);
};
extern "C"
{
extern unsigned long _stext;
extern unsigned long _etext;
unsigned long stext_addr = (unsigned long)&_stext;
unsigned long etext_addr = (unsigned long)&_etext;
};
externC cyg_bool cyg_check_data_ptr(const void *ptr)
{
unsigned long p = (unsigned long)ptr;
if( p == 0 ) return false;
if( p > stext_addr && p < etext_addr ) return false;
return true;
}
externC cyg_bool cyg_check_func_ptr(const void (*ptr)(void))
{
unsigned long p = (unsigned long)ptr;
if( p == 0 ) return false;
if( p < stext_addr && p > etext_addr ) return false;
return true;
}
#endif // CYGDBG_USE_ASSERTS
#endif // CYGDBG_INFRA_DEBUG_TRACE_ASSERT_SIMPLE
// -------------------------------------------------------------------------
// EOF simple.cxx
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -