aaaaatiger STU.03CS 版权所有
(待续 以下内容部分参考eCos内核)
例子一:获取线程信息
你可以自己看看自己创建的主线程的优先级多少。(15)。
如果你定义两个优先级相同,并且比较优先级比较低的线程(如18,大于15),则会进行分时调用,相隔时间
一般是5tick,当然你可以自己配置这些值。
在自己的root里把需要动作完成之后,需要把自己挂起:cyg_thread_suspend(cyg_thread_self())
cyg_handle_t thread=0;
cyg_uint16 id=0;
cyg_thread_info thread_info;
while(cyg_thread_get_next(&thread,&id)
{
ret=cyg_thread_get_info(thread,id,&thread_info);
if(!ret)
{
break;
}
TRACE("task info: ID=%03d,prio:%03d,handle:%04x,stacksize:%08d/r/n",thread_info.id,
thread_info.set_pri,
thread_info.handle,
thread_info.stack_size);
}
例子二:
cyg_handle_t handle;
cyg_uint16 tid;
unsigned char tidinfo[8];
int len;
handle = cyg_thread_self();
tid=get_thread_id(handle);
TRACE("thread id=%d/n",tid);
例子三: 下边的函数经常用于笔试
void DEBUG_ERROR(CHAR* format,...)
{
char buffer[256];
va_list argptr;
if( XXXDebug>= DUG_LEVEL) //对于大型系统调试来说,此比较语句具有非常重要的参考价值
{
va_start(argptr,format);
vsprintf((char*)buffer,format,argptr);
va_end(argptr);
}
}
例子四:
声明 外部函数调用。
extern XXX XXXXX(...) __attribute__((long_call))
例子五:
为了防止gcc编译器引起的问题,不要使用位字段数据结构,而应采用直接掩码的方式。
struct note//可能会引起出错,并且效率低下(自己可以反汇编看看)
{
unsigned char pam:4;
unsigned char pam:4;
};
例子六:查看内存信息
struct mallinfo mem_info;
mem_info=mallinfo();
TRACE(" memory system: total =0x%08x free =0x%8x, max=0x%08x./n",
mem_info.arena,mem_info.fordblks, mem_info.maxfree);
TRACE("ordinary blk =%d, small blk=%d, maped region=%d, total map=%d/n",
mem_info.ordblks, mem_info.smblks, mem_info.hblks,mem_info.hblkhd);
#if HAVE_MMAP
TRACE("in use bytes =%10u/n", (unsigned int) mem_info.uordblks+meminfo.mmapped_mem);
#else
TRACE"in use bytes=%10u/n", mem_info.uordblks);