debug_util.c 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #include "minilisp.h"
  2. #include <stdio.h>
  3. void uart_putc(char c);
  4. void uart_puts(char* s);
  5. #define int32_t long
  6. void memdump(void* start,uint32_t len,int raw) {
  7. uint32_t i,x;
  8. for (i=0; i<len;) {
  9. if (!raw) printf("%08x | ",start+i);
  10. for (x=0; x<16; x++) {
  11. printf("%02x ",*((uint8_t*)start+i+x));
  12. }
  13. if (!raw)
  14. for (x=0; x<16; x++) {
  15. uint8_t c = *((uint8_t*)start+i+x);
  16. if (c>=32 && c<=128) {
  17. printf("%c",c);
  18. } else {
  19. printf(".");
  20. }
  21. }
  22. printf("\r\n");
  23. i+=16;
  24. }
  25. printf("\r\n\r\n");
  26. }
  27. void printhex(uint32_t num) {
  28. char buf[9];
  29. int i;
  30. buf[8] = 0;
  31. for (i=7; i>=0; i--) {
  32. int d = num&0xf;
  33. if (d<10) buf[i]='0'+d;
  34. else buf[i]='a'+d-10;
  35. num=num>>4;
  36. }
  37. uart_puts(buf);
  38. }
  39. void printhex_signed(int32_t num) {
  40. char buf[9];
  41. int i;
  42. buf[8] = 0;
  43. if (num<0) {
  44. uart_putc('-');
  45. num=-num;
  46. }
  47. for (i=7; i>=0; i--) {
  48. int d = num&0xf;
  49. if (d<10) buf[i]='0'+d;
  50. else buf[i]='a'+d-10;
  51. num=num/16;
  52. }
  53. uart_puts(buf);
  54. }