debug.c
来自「ADS下的bios工程」· C语言 代码 · 共 286 行
C
286 行
#include <bios/stdio.h>#include <bios/nand.h>void debug(unsigned char *);static int get_hex(void);static int atoh(int, char *);static int get_int(void);static int atod(int, char *);static int power(int, int);void Dump_page(int, int);void Dump_block(int);void Dump(char *);extern void ser_init(void);extern void ser_write(const char *);extern int ser_read(char *, int);extern int ser_stat(void);extern void ser_init(void);char page_buf[512];extern unsigned char Spare[16];void debug(unsigned char *Addr){ char ch = 0; Dump(Addr); while (ch != ESC) { printf("\n===========================================\n"); printf("= 1. Next Memory Address View![Any Key] =\n"); printf("= 2. New Address Input![N] =\n"); printf("===========================================\n"); ch = getc(); switch (ch) { case 'N' : case 'n' : printf("Input Address(Hex value) : 0x"); Addr = (unsigned char *)get_hex(); Dump(Addr); break ; case ESC : break ; default : Addr+=0x100; Dump(Addr); break ; } }}void debug_nand(int block, int page){ char ch = 0; if (page < 0) Dump_block(block); else Dump_page(block, page); while (ch != ESC) { printf("\n===========================================\n"); printf("= 1. Next %s View![Any Key] =\n", page < 0 ? "block": "page "); printf("= 2. New %s Input![N] =\n", page < 0 ? "block":"page "); printf("===========================================\n"); ch = getc(); switch (ch) { case 'N': case 'n': printf("Input block(Decimal value) : "); block = get_int(); if (page >= 0) { printf("Input page(Decimal value) : "); page = get_int(); } if (page<0) Dump_block(block); else Dump_page(block, page); break ; case ESC: break ; default : if (page < 0) { block ++; Dump_block(block); } else { if (page == 31) { block ++; page = 0; } else page ++; Dump_page(block, page); } break ; } }}static int get_hex(void){ int i; char ch, buffer[8]; while ((ch = getc()) == ' ' || ch == '\t' || ch == '\n' || ch == '\r') ; for (i = 0; ch != '\r' && ch != '\n' && i < 8; ) { buffer[i] = ch; if (ch == 0x8) { if (i > 0) { putc(ch); putc(' '); putc(ch); i--; } } else { i ++; putc(ch); } ch = getc(); } buffer[i] = 0x0; putc('\n'); return atoh(i - 1, buffer);}static int atoh(int digit, char *buffer){ int i, temp; for (i = 0, temp = 0; i < 8 && (buffer[i] != 0x0); i++) { if (buffer[i] <= 0x39 && buffer[i] >= 0x30) temp += (int)(buffer[i] - 0x30) * power(16, digit - i); else if (buffer[i] <= 0x46 && buffer[i] >= 0x41) temp += (int)(buffer[i] - 0x41 + 10) * power(16, digit - i); else if (buffer[i] <= 0x66 && buffer[i] >= 0x61) temp += (int)(buffer[i] - 0x61 + 10) * power(16, digit - i); } return temp;}static int power(int base, int expon){ int i, sum; for (i = 0, sum = 1; i < expon; i ++) sum *= base; return sum;}static int get_int(void){ int i; char ch, buffer[8]; while ((ch = getc()) == ' ' || ch == '\t' || ch == '\n' || ch == '\r') ; for (i = 0; ch != '\r' && ch != '\n' && i < 8; ) { buffer[i] = ch; if (ch == 0x8) { if (i > 0) { putc(ch); putc(' '); putc(ch); i --; } } else { i ++; putc(ch); } ch = getc(); } buffer[i] = 0x0; putc('\n'); return atod(i - 1, buffer);}static int atod(int digit, char *buffer){ int i, temp; for (i = 0, temp = 0; i < 8 && (buffer[i] != 0x0); i ++) { if (buffer[i] <= 0x39 && buffer[i] >= 0x30) temp += (int)(buffer[i] - 0x30)*power(10,digit-i); else printf("Input Error\n"); } return temp;}void Dump(char *Addr){ int i, j; for (i = 0; i < 0x100; i += 0x10) { printf("\n%08x:%08x ", (int)Addr + i, (int)Addr + i + 0xf); for (j = 0; j < 8; j ++) printf("%02x ", *(Addr + i + j)); printf(" - "); for ( ; j < 16; j ++) printf("%02x ", *(Addr + i + j)); } printf("\n");}void Dump_block(int block){ int i, j; printf("\n< block : %d >", block); for (i = 0; i < 32; i ++) { nand_flash_control(nand_read, block, i, page_buf, 512); printf("\n%02d page ", i); for (j = 0; j < 0x8; j ++) printf("%02x", *(page_buf + j)); printf("..... "); for (j = 0; j < 0x8; j ++) printf("%02x", *(page_buf + 256 + j)); printf("..... "); for (j = 0; j < 16; j ++) printf("%02x", Spare[j]); } printf("\n");}void Dump_page(int block, int page){ int i, j; nand_flash_control(nand_read, block, page, page_buf, 512); printf("\n< block : %d, page : %d >", block, page); for (i = 0; i < 512; i += 0x20) { printf("\n%04x:%04x ", i, i + 0x1f); for (j = 0; j < 0x20; j ++) { if (!(j % 4)) printf(" "); printf("%02x", *(page_buf + i + j)); } } printf("\nSpare "); for (i = 0; i < 16; i ++) { printf("%02x ", Spare[i]); } printf("\n");}void debug_init(void){ ser_init();}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?