⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pmla.h

📁 AT91RM9200的定时器驱动(linux2.4内核)
💻 H
字号:
/* poor mans logic analyzer header file *//* poor mans logic analyzer uses a fast counter (mftb instruction [via get_tbl] in ppc) (OSCR in arm) (rdtscl in i386) that gets saved into a circular buffer for later analysis  by a perl script (~/scripts/gdb.pmla.pl) from gdb output from a macro in ~/.gdbinit (dmp)NOTE: this is self initializing AS LONG as the PMLA struct is cleared upon first use *//* #define pmla_cntr() get_tbl() */  /* for __ppc__ */#define pmla_cntr() \({ \  unsigned long temp; \  do { \    temp = *AT91C_TC0_CV | (*AT91C_TC1_CV << 16); \     } while ((temp ^ (*AT91C_TC1_CV << 16)) & 0xffff0000); \  temp; \})/* #define pmla_cntr() rdtscl() */  /* for __i386__ */#define pmla_save(ptr, pmlaid, pmlaparam1, pmlaparam2) \do { \   PMLA_TRACE *pmla_trace; \   if (!ptr->pmla.pmla_stop || (ptr->pmla.pmla_hd != ptr->pmla.pmla_stop)) \    { \    if (ptr->pmla.pmla_hd <= &ptr->pmla.pmla_buf[0]) \      ptr->pmla.pmla_hd = &ptr->pmla.pmla_buf[PMLA_TRACE_SZ]; \    pmla_trace = --ptr->pmla.pmla_hd; \    pmla_trace->id = pmlaid; \    pmla_trace->param1 = pmlaparam1; \    pmla_trace->param2 = pmlaparam2; \    pmla_trace->time = pmla_cntr(); \    } \  } while (0)/* using this one first requires initialization of pmla_hd */#define pmla_mult(ptr, pmlaid, pmlaparam1, pmlaparam2) \do { \   PMLA_TRACE *pmla_trace; \   if (!ptr->pmla.pmla_stop || (ptr->pmla.pmla_hd != ptr->pmla.pmla_stop)) \    { \    if (ptr->pmla.pmla_hd->id != pmlaid) \      { \      if (ptr->pmla.pmla_hd <= &ptr->pmla.pmla_buf[0]) \        ptr->pmla.pmla_hd = &ptr->pmla.pmla_buf[PMLA_TRACE_SZ]; \      ptr->pmla.pmla_hd--; \      } \    pmla_trace = ptr->pmla.pmla_hd; \    pmla_trace->id = pmlaid; \    pmla_trace->param1 = pmlaparam1; \    pmla_trace->param2 = pmlaparam2; \    pmla_trace->time = pmla_cntr(); \    } \  } while (0)#define pmla_trig_center(ptr, pmlaid, pmlaparam1, pmlaparam2) \do { \   PMLA_TRACE *pmla_trace; \   if (ptr->pmla.pmla_hd != ptr->pmla.pmla_stop) \    { \    if (!ptr->pmla.pmla_stop) \      { \      ptr->pmla.pmla_stop = ptr->pmla.pmla_hd - (PMLA_TRACE_SZ / 2); \      if (ptr->pmla.pmla_stop < &ptr->pmla.pmla_buf[0]) \        ptr->pmla.pmla_stop += PMLA_TRACE_SZ; \      } \    if (ptr->pmla.pmla_hd <= &ptr->pmla.pmla_buf[0]) \      ptr->pmla.pmla_hd = &ptr->pmla.pmla_buf[PMLA_TRACE_SZ]; \    pmla_trace = --ptr->pmla.pmla_hd; \    pmla_trace->id = pmlaid; \    pmla_trace->param1 = pmlaparam1; \    pmla_trace->param2 = pmlaparam2; \    pmla_trace->time = pmla_cntr(); \    } \  } while (0)typedef struct pmla_trace  {    ulong id;  /* id number of this timing save */    ulong param1;  /* 1st parameter */    ulong param2;  /* 2nd parameter */    ulong time;  /* where the time get's saved */  }PMLA_TRACE;typedef struct pmla  {    PMLA_TRACE *pmla_hd;    PMLA_TRACE *pmla_stop;#define PMLA_TRACE_SZ 200    PMLA_TRACE pmla_buf[PMLA_TRACE_SZ];  }PMLA;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -