1 / 12
文档名称:

gdbarmator源代码分析电气论文.doc

格式:doc   大小:90KB   页数:12页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

gdbarmator源代码分析电气论文.doc

上传人:小健 2022/5/20 文件大小:90 KB

下载得到文件列表

gdbarmator源代码分析电气论文.doc

文档介绍

文档介绍:gdb/arm ator源代码分析—电气论文
作者电子邮件:Anti_******@
摘要
Gdb/Armonator是在Gdb中构建的arm7模拟器,是调试arm 程序的好工具。了解其原始代码结构对扩展其10功能RMul_OSInit(州);文件:〃预安装的系统初始化
12 ARMul _ CoProInit(状态);File://协处理器初始
#13 state-verbose=冗长;
#14完成=1;
15 file :〃为AT91添加了以下内容
#16 ARMul_SelectProcessor(状态,arm 600);
#17 ARMul_SetCPSR(状态,用户 32 模式);
#18 ARMul_Reset(状态);
#19 }
#
20}因为这是补丁代码,冗余将不可避免地出现。两行10-11 的实际使用是没有意义的,而行12是协处理器的初始化。因为协处 理器不再被模拟,这只是为了扩展。
密钥初始化过程在ARMul_NewState(...)中。首先,它将空间分 配给ARMul_State,这是模拟器的核心状态结构,它存储了 armor状 态的所有方面,包括arm寄存器、管道状态等。
并给出初始值,我们以后会用状态来表示它。然后调用 ARMul_Reset(...)来进一步设置。后者主要完成模拟器内存结构的分 配和 rom 映像-/sim/arm/ _ reset (...)的加载,io 设备 -/sim/arm/ _ reset (...)的初始状态,您也可以在这里添加您的 初始代码。这就完成了装甲的装载。
(请注意,第18行也调用了 ARMul_Reset(...),这是一个BUG, 导致模拟器进行了两次内存分配并浪费了系统内存。这可以在这里删 除。)
记忆地图是所有机械手的关键。当盔甲兵从AT91迁移到其他 微控制器时,首先要处理的是内存映射。装甲的每个存储区都是由
mem_bank_t结构描述的:
typedef 结构 mem_bank_t {
ARMword(* read _ word)(ARMul _ State * State, ARMword addr);
void(* write _ word)(ArMUL _ State * State, ARMword addr, ARMword 数据);
无符号长地址,len
char *文件名;
} mem _ bank _ t; 文件://在 中定义
机械手的整个内存由这种结构的数组静态mem _ bank _ t mem _ banks 管理。
AT91的内存映射如下:
静态内存库t内存库={
/*下面的yuk是为了解决UClinux/挂载选项问题*/
{ real_read_word, real_write_word, 0x01000000, 0x00400000, }, /* */
{ real_read_word, _write_word, 0x01400000, 0x00400000,, '},
{ real_read_word, real_write_word, 0x02000000, 0x00400000, }, /* */
{ real_read_word, real_write_word, 0x02400000, 0x00001000, },
/* yuk! */
{ real_read_word, _write_word, 0x04000000, 0x00400000,,
'},
{ real_read_word, real_write_word, 0x00000000, 0x00004000, },
{ io_read_word, io_write_word, OxfOOOOOO, 0x1000000, },
{ fail_read_word, fail_write_word, 0, 0 }
};
根据mem _ banks, mem_reset() 件。
(原始内存是由ARMul_MemoryExit()释放的,但是修补后的代 码没有释放功能,这也是需要更正的地方。)

加载加载程序后,它开始等待Gdb的运行命令。最后 /sim/()是开始 arm 指令执行的地方。
Sim_resume()根据 Gdb 的要求选择是使用/sim/arm/Armin it . c/armul _ doun str()还是/sim/arm/Armin

最近更新