debug_util.c 1.0 KB

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