u32_t sys_hz(void);
double getidle(void);
void util_stacktrace(void);
-void util_nstrcat(char *str, unsigned long n);
-void util_stacktrace_strcat(char *);
int micro_delay(u32_t micros);
u32_t tsc_64_to_micros(u64_t tsc);
u32_t tsc_to_micros(u32_t low, u32_t high);
typedef unsigned int reg_t;
-#define FUNC_STACKTRACE(statement) \
-{ \
- reg_t bp, pc, hbp; \
- extern reg_t get_bp(void); \
- \
- bp= get_bp(); \
- while(bp) \
- { \
- pc= ((reg_t *)bp)[1]; \
- hbp= ((reg_t *)bp)[0]; \
- statement; \
- if (hbp != 0 && hbp <= bp) \
- { \
- pc = -1; \
- statement; \
- break; \
- } \
- bp= hbp; \
- } \
-}
+extern reg_t get_bp(void);
-void util_nstrcat(char *str, unsigned long number)
+void util_stacktrace(void)
{
#if USE_SYSDEBUG
- int n = 10, lead = 1;
- char nbuf[12], *p;
- p = nbuf;
- *p++ = '0';
- *p++ = 'x';
- for(n = 0; n < 8; n++) {
- int i;
- i = (number >> ((7-n)*4)) & 0xF;
- if(!lead || i) {
- *p++ = i < 10 ? '0' + i : 'a' + i - 10;
- lead = 0;
+ reg_t bp, pc, hbp;
+
+ bp= get_bp();
+ while(bp)
+ {
+ pc= ((reg_t *)bp)[1];
+ hbp= ((reg_t *)bp)[0];
+ printf("0x%lx ", (unsigned long) pc);
+ if (hbp != 0 && hbp <= bp)
+ {
+ printf("0x%lx ", (unsigned long) -1);
+ break;
}
+ bp= hbp;
}
- if(lead) *p++ = '0';
- *p++ = ' ';
- *p++ = '\0';
- strcat(str, nbuf);
-#endif /* USE_SYSDEBUG */
-}
-
-void util_stacktrace(void)
-{
-#if USE_SYSDEBUG
- FUNC_STACKTRACE(printf("0x%lx ", (unsigned long) pc));
printf("\n");
#endif /* USE_SYSDEBUG */
}
-void util_stacktrace_strcat(char *str)
-{
-#if USE_SYSDEBUG
- FUNC_STACKTRACE(util_nstrcat(str, pc));
-#endif /* USE_SYSDEBUG */
-}
-