⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 memregions.c

📁 Hermit-at-1.1.3,一款bootloader
💻 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", &region_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, &region_add_cmdfunc };const command_t region_del_command =	{ "del", "<index>", "delete region", &region_del_cmdfunc };const command_t region_save_command =	{ "save", 0, "save region", &region_save_cmdfunc };static const command_t *region_commands[] = {        &help_command,        &quit_command,        &region_print_command,        &region_add_command,        &region_del_command,        &region_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,  &region_print_command_abbrev,  &region_add_command_abbrev,  &region_del_command_abbrev,  &region_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(&region_command_list);  return 0;}const command_t region_command ={ "region", 0, "", &region_cmdfunc };#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -