SkyEye的地址映射接口的设计和实现
来源:互联网 发布:布瑞克农业数据 编辑:程序博客网 时间:2024/05/05 03:51
addr_mapping 的使用和测试
1、addr_mapping 接口描述
Addr_mapping 接口用来申请一段地址空间,并来控制这段地址空间的访问。其原型定义在
头文件[common/include/bank_defs.h:71]如下:
exception_t addr_mapping(mem_bank_t* bank);
参数 bank,是客户需要分配和填充的一个数据接口,定义如下:
typedef struct mem_bank
{
unsigned int addr, len;
char (*bank_write)(short size, int offset, unsigned int value);
char (*bank_read)(shortsize, int offset, unsigned int *result);
char filename[MAX_STR];
/* the name of object mapping to the bank */
char* objname;
unsigned type;
} mem_bank_t;
Mem_bank_t 的域 addr 是这段地址空间的起始地址,len为这段地址空间的长度。
Bank_write 和 bank_read 分别为这段地址的读写函数。当目标程序对这段地址空间进行访问
的时候,SkyEye 会调用这段地址空间对应的 bank_write 和 bank_read进行访问。
Filename 为加载的文件,在初始化这段地址空间的时候,SkyEye 可以把一个数据文件加载
到这段地址空间去。
objname 是一个字符串,用来标志一个对象的名称。
type 是这段地址空间的类型,有只读内存,可读写内存和 IO 这三种类型。
2、编程示例
编程示例的代码片段如下:
/* 分配一个 mem_bank_t 的数据结构 */
mem_bank_t *bank = (mem_bank_t *)malloc(sizeof(mem_bank_t));
/* 初始化地址 */
bank->addr =base_addr;
bank->len = len;
bank->bank_write = uart_16550_write;
bank->bank_read =uart_16550_read;
bank->type = MEMTYPE_IO;
bank->objname = &uart->name[0];
bank->filename[0] = '/0';
/* register io space to the whole address space */
addr_mapping(bank);
3、测试 addr_mapping 接口
3.1 使用命令测试
在执行完skyeye 之后,可以用show-map 命令显示当前的地址空间映射,看看 addr_mapping
申请的地址空间是否存在:
ksh@server:~/svn/skyeye/skyeye_git/systemc_hello> ../common_uart_install/bin/skyeye -e hello
SkyEye 1.3.1
SkyEye is an Open Source project under GPL. All rights of different parts or modules are reserved
by their author. Any modification or redistributions of SkyEye should not remove or modify the
annoucement of SkyEye copyright.
Getmore information about it, please visit the homepage http://www.skyeye.org.
T "help"to get command list.
ype
In insert_bank, insert bank at 0
Hello X world
Hello X world
Hello X world
(skyeye)show-map
Start Addr Length Type
0xe1000000 0xe1001000 IO
3.2 读写申请的地址空间
我们可以修改 arm_hello 的测使用例,让 arm_hello 对我们申请的地址空间进行访问,看看
我们的读写函数是否被调用。具体步骤如下:
1、 假设我们使用 addr_mapping 申请了地址 0xe100_0000 到 0xe100_1000 这段地址空间。
2、 然后修改 hello.c, 让 paddr 的值等于 0xe100_0000,如下代码
long* paddr=(long*)0xe1000000;
3、然后运行 hello 测试用例,看看我们前面注册的读写函数是否被调用。
- SkyEye的地址映射接口的设计和实现
- 硬件仿真实现之---SkyEye的设计实现方案
- [转载]硬件仿真实现之---SkyEye的设计实现
- cygwin和skyeye的安装
- skyeye的安装和使用
- SystemC和Skyeye的集成
- spring中实现Controller接口的映射
- SpringMVC+WebSocket的通用接口映射实现
- S5PC100的地址映射和启动过程
- 寄存器名称和地址的映射分析
- 寄存器名称和地址的映射分析
- 地址映射原理和实现
- 地址映射原理和实现
- 组播IP地址和MAC地址的映射关系
- S5PV210的地址映射
- 2. [netty-RPC]--消息的请求、响应与接口和实现的映射容器
- 基于XML的配置文件访问接口设计和实现
- 基于ARM和DM9000的网卡接口设计与实现
- 双击dsw另开vc6.0
- shell空格
- 众多SEO专家集体盛赞
- php中的SERVER变量
- 安装BIEE时,启动setup.exe后,出现java.lang.NoClassDefFoundError:run错误的解决办法
- SkyEye的地址映射接口的设计和实现
- 自己动手编写嵌入式Bootloader---基本功能流程
- oracle 9i的卸载办法
- sql server 和oracle常用函數對比
- php 中ini_set 和 ini_get函数使用方法
- GTK+系统中的对话框
- 转载一篇STL的文章
- 8个问题
- GDI 映像方式 之 SetViewportExtEx 与 SetWindowExtEx 解析