📄 memregions.c
字号:
#include "memregions.h"struct region_table regions[MAX_REGION_NUM] = { STATIC_REGION (IPL, "ipl", FLASH, FLASH_IPL_START, FLASH_IPL_SIZE, "1x8K/l"), RESIZABLE_REGION (BOOTLOADER, "bootloader", FLASH, FLASH_START + 0x00002000, 0x0000e000, "7x8K/l"), RESIZABLE_REGION (KERNEL, "kernel", FLASH, FLASH_START + 0x00010000, 0x00200000, "32x64K"), RESIZABLE_REGION (USERLAND, "userland", FLASH, FLASH_START + 0x00210000, 0x005e0000, "94x64K"), RESIZABLE_REGION (CONFIG, "config", FLASH, FLASH_START + 0x007f0000, 0x00010000, "8x8K"), DYNAMIC_REGION (5, "", UNKNOWN, 0, 0, ""), DYNAMIC_REGION (6, "", UNKNOWN, 0, 0, ""), DYNAMIC_REGION (7, "", UNKNOWN, 0, 0, ""), DYNAMIC_REGION (8, "", UNKNOWN, 0, 0, ""), DYNAMIC_REGION (9, "", UNKNOWN, 0, 0, ""), DYNAMIC_REGION (10, "", UNKNOWN, 0, 0, ""), DYNAMIC_REGION (11, "", UNKNOWN, 0, 0, ""), DYNAMIC_REGION (12, "", UNKNOWN, 0, 0, ""), DYNAMIC_REGION (13, "", UNKNOWN, 0, 0, ""), DYNAMIC_REGION (14, "", UNKNOWN, 0, 0, ""), STATIC_REGION (DRAM1, "dram-1", RAM, DRAM1_START, DRAM1_SIZE, ""),};#if defined(EXPERIMENTAL)#include <target/command.h>#include <target/scan.h>#include <target/io.h>#include <target/herrno.h>#include <target/str.h>static int region_print_cmdfunc(int argc, char *argv[]){ int i; for(i=0; i<MAX_REGION_NUM; i++){ if(i < 10) hprintf(" %d: ", i); else hprintf("%d: ", i); switch(regions[i].mode){ case MAP_MODE_RESIZABLE: hprintf("[RESIZABLE], "); break; case MAP_MODE_DYNAMIC: hprintf("[DYNAMIC ], "); break; case MAP_MODE_STATIC: hprintf("[STATIC ], "); break; default: hprintf("[UNKNOWN ], "); break; } if(regions[i].name[0]){ hprintf("0x%x:0x%x ", MAP_START(i), MAP_SIZE(i)); } switch(regions[i].type){ case MAP_TYPE_FLASH: hprintf("FLA "); break; case MAP_TYPE_RAM: hprintf("RAM "); break; default: break; } if(regions[i].name[0]){ hprintf("%s ", MAP_NAME(i)); if(regions[i].type == MAP_TYPE_FLASH) hprintf("%s ", MAP_BLOCK(i)); } hprintf("\n"); } return 0;}static int region_add_cmdfunc(int argc, char *argv[]){ int index, type, start, size; char *name, *block; if(argc < 6) return -H_EUSAGE; if(scan(argv[1], &index)) return -H_EINVAL; if(index < 0 || MAX_REGION_NUM - 1 < index) return -H_EINVAL; if(scan(argv[3], &type)) return -H_EINVAL; if(type < 1 || 2 < type) return -H_EINVAL; if(scan(argv[4], &start)) return -H_EINVAL; if(scan(argv[5], &size)) return -H_EINVAL; name = argv[2]; if(argc == 7) block = argv[6]; else block = ""; switch(regions[index].mode){ case MAP_MODE_DYNAMIC: SET_MAP_NAME(index, name); SET_MAP_TYPE(index, type); case MAP_MODE_RESIZABLE: SET_MAP_START(index, start); SET_MAP_SIZE(index, size); SET_MAP_BLOCK(index, block); break; case MAP_MODE_STATIC: hprintf("can't modefy this region: %d\n", index); return 0; default: break; } return 0;}static int region_del_cmdfunc(int argc, char *argv[]){ int index; if(argc != 2) return -H_EUSAGE; if(scan(argv[1], &index)) return -H_EINVAL; if(index < 0 || MAX_REGION_NUM - 1 < index) return -H_EINVAL; switch(regions[index].mode){ case MAP_MODE_DYNAMIC: SET_MAP_NAME(index, ""); SET_MAP_TYPE(index, MAP_TYPE_UNKNOWN); case MAP_MODE_RESIZABLE: SET_MAP_START(index, 0); SET_MAP_SIZE(index, 1); SET_MAP_BLOCK(index, ""); break; case MAP_MODE_STATIC: hprintf("can't delete this region: %d\n", index); return 0; default: break; } return 0;}static int region_save_cmdfunc(int argc, char *argv[]){ return 0;}const command_t region_print_command = { "print", 0, "display region information", ®ion_print_cmdfunc };const char add_help[] = "add region\n\tindex : region index\n\tname : region name\n\ttype : {1:FLASH,2:RAM}\n\tstart : region start address\n\tsize : region size\n\tblock : block information";const command_t region_add_command = { "add", "<index> <name> <type> <start> <size> [<block>]", add_help, ®ion_add_cmdfunc };const command_t region_del_command = { "del", "<index>", "delete region", ®ion_del_cmdfunc };const command_t region_save_command = { "save", 0, "save region", ®ion_save_cmdfunc };static const command_t *region_commands[] = { &help_command, &quit_command, ®ion_print_command, ®ion_add_command, ®ion_del_command, ®ion_save_command, 0};ABBR(help_command, '?')ABBR(quit_command, 'q')ABBR(region_print_command, 'p')ABBR(region_add_command, 'a')ABBR(region_del_command, 'd')ABBR(region_save_command, 's')static const abbrev_t *region_abbrevs[] = { &help_command_abbrev, &quit_command_abbrev, ®ion_print_command_abbrev, ®ion_add_command_abbrev, ®ion_del_command_abbrev, ®ion_save_command_abbrev, 0};static command_list_t region_command_list ={ region_commands, region_abbrevs, "region", 0 };static int region_cmdfunc(int argc, char *argv[]){ do_command_loop(®ion_command_list); return 0;}const command_t region_command ={ "region", 0, "", ®ion_cmdfunc };#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -