当前位置: 首页 > news >正文

专门做加盟的网站主流网站开发

专门做加盟的网站,主流网站开发,云南建设学校网站,oa办公系统都有哪家SkyEye全数字实时仿真平台#xff0c;简称SkyEye#xff0c;是一款支持 ARM、TI DSP、PowerPC、X86、SPARC、龙芯、飞腾等多种处理器体系架构的指令级仿真平台。 SkyEye可以部署在桌面计算机上#xff0c;开发人员可以基于SkyEye提供的已有模型库的组件#xff08;如处理器…SkyEye全数字实时仿真平台简称SkyEye是一款支持 ARM、TI DSP、PowerPC、X86、SPARC、龙芯、飞腾等多种处理器体系架构的指令级仿真平台。 SkyEye可以部署在桌面计算机上开发人员可以基于SkyEye提供的已有模型库的组件如处理器、内存总线、存储器、片上外设、外围总线设备等通过图形化搭建环境拖拽需要的组件并定制与实际目标机相同的虚拟目标系统。 使运行在真实目标机上的二进制代码可以不加修改直接在虚拟系统中运行并且可以得到与在真实目标机下相同的执行结果支持的目标二进制文件主要包括ELF、raw binary、COFF等格式。配合调试器可以查看到虚拟系统中所有的资源包括寄存器存储器和端口系统等。SkyEye支持运行的目标系统软件包括操作系统OS软件和裸机应用程序今天以经典程序hello world为例介绍下裸机程序如何一步步编译构建成二进制文件并在SkyEye上运行调试处理器架构采用ARM架构。如何构建裸机hello world目标程序并在SkyEye全数字实时仿真平台上运行及调试 目标二进制文件构建过程 所需工具 SkyEye安装包 linux系统本人使用ubuntu 14.04 ARM 交叉编译工具链 裸机 hello_world.c 程序 首先编写hello world程序创建hello_world.c文件编写hello_world函数如下所示 void hello_world() {uart_printf(“hello world!”);return ; }代码通过调用uart_printf函数输出「hello world」字符串由于是裸机程序不能调用库中的printf函数而是要自己实现输出函数实现一个最简单的输出字符串的uart_printf函数如下 #define UART_TX_ADDR 0x640000 void uart_puts(const char *s) {while(*s) { *(char *)UART_TX_ADDR *s; }return ; } ​ void uart_printf(char *fmt …) {uart_puts(fmt); }上述的功能是把uart_printf要输出的字符串中的每个字符写入0x640000这个地址的内存中这个内存地址所在空间设置的是串口设备的内存映射空间。 至此hello world C代码完成但是处理器刚复位时是不会直接执行C代码的所以在执行逻辑转移到C代码之前必须正确设置以下内容。 栈 全局变量 • 已初始化 • 未初始化 只读数据 栈 C语言使用栈来存储本地变量传递参数存储返回地址等。所以在将控制权交给C代码之前栈必须正确设置。 栈在ARM架构中是非常灵活的因为它完全由软件实现。ARM CPU寄存器R13被用作栈指针因此在启动代码中需要将R13设置堆栈的大小。 例如 ldr sp, 0x1000 //初始化堆栈指针全局变量 编译C代码时编译器将初始化的全局变量放在.data段。 C语言保证所有未初始化的全局变量都将初始化为零。当编译C程序时一个名为.bss的独立段用于放置未初始化变量的描述。在将控件转移到C代码之前必须将这些变量对应的内存位置初始化为零。 只读数据 GCC将标记为const的全局变量放在一个名为.rodata的独立段中。.rodata还用于存储字符串常量。 通过上述的必须设置的条件就能创建链接脚本和启动代码。 启动代码 编写启动代码start.S该裸机程序只是测试验证通过SkyEye可以加载运行目标程序所以没有设置ARM工作模式和其他CPU寄存器的初始化只对堆栈指针SP进行了初始化然后跳转到C代码的入口函数main执行。 .text .global begin begin: LDR SP,0x1000 //初始化堆栈指针 bl main //跳转到main函数 b . //循环执行该条指令链接脚本 编写链接脚本hello_world.lds来控制段如何合并以及它们在内存中的位置如下所示 .ENTRY(begin) //设置程序入口点 ​ SECTIONS { . 0x100000; //程序的链接地址是0x100000 . ALIGN(4) //对当前地址4字节对齐 .text : { start.o (.text) //CPU上电后首先执行start.o代码 * (.text); } .rodata : { * (.rodata); } . ALIGN(4) //对当前地址4字节对齐 .data: { *(.data) } . ALIGN(4) //对当前地址4字节对齐 .bss : { * (.bss); } }构建目标二进制文件使用汇编器as汇编启动代码如下命令arm-linux-as -o start.o start.S使用编译器gcc编译hello_world.c加上-g用于调试如下命令 arm-linux-gcc -g -o hello_world.o hello_world.c使用链接器ld链接生成可执行文件命令如下 arm-linux-ld -Thello_world.lds -static -o hello_world start.o hello_world.o由此hello_world目标二进制文件已经构建成功通过arm-linux-readelf来查看生成的目标二进制文件信息如下所示 也可以编写Makefile来构建和编译工程。 Makefile编写 如下所示 #beginCCarm-linux-gccLDarm-linux-ld​CFLAGS -c -Wall -g -O1LDFLAGS -Thello_world.lds -static​all: hello_world​hello_world: start.o hello_world.o​$(LD) $(LDFLAGS) start.o hello_world.o -o hello_world​arm-linux-objdump -xS hello_world hello_world.s​start.o:start.S$(CC) $(CFLAGS) start.S​hello_world.o:hello_world.c$(CC) $(CFLAGS) hello_world.c​clean:rm -rf *.o hello_world *.s #end直接输入make就可以生成hello_world二进制文件。至此hello_world目标二进制文件已经生成现在可以基于SkyEye 图形化界面构建虚拟目标系统来运行hello_world程序。 使用SkyEye来运行目标二进制程序 创建新的工程 首先打开SkyEye界面点击文件-新建输入工程名选择要导入的源码和目标二进制文件即可创建新的工程工程目录如下 图形化搭建 双击打开hello_world_testcase.gp打开图形化搭建界面可以通过先点击所需组件再点击网格中所要放置位置即可。组件如下图所示 虚拟目标系统构建 选择单板通用的base_mach、CPU选择ARM926EJS处理器和内存总线设备memory_space、存储设备RAM和串口设备如下所示是配置串口设备的内存地址与上述所说的串口设备的内存映射空间的地址一致。 通过各个模块直接的接口连线来构建整个虚拟目标系统如下图所示 至此虚拟目标系统搭建完成配置启动脚本后即可加载运行。 启动脚本配置 启动脚本中主要配置要加载的目标二进制文件如下图所示 要使用代码覆盖率功能可以配置使能覆盖率的命令如下图所示 加载和运行 点击工程目录选择菜单栏中的加载图标当有skyeye term弹窗并没有报错信息则说明工程加载成功可以点击运行按钮如下图所示 点击运行可以看到串口有hello world!输出如下图所示 到此整个裸机程序从编译生成目标二进制文件到通过SkyEye构建虚拟目标系统来加载运行目标程序的完整过程结束了。 下面是介绍SkyEye平台提供的代码覆盖率功能和远程GDB调试功能。如何构建裸机hello world目标程序并在SkyEye全数字实时仿真平台上运行及调试 SkyEye调试和代码覆盖率功能 代码覆盖率功能 首先需要在启动脚本中配置使能代码覆盖率的命令然后加载运行工程点击暂停点击覆盖率统计按钮即可生成覆盖率统计结果如下图所示 支持打开和导出覆盖率报告覆盖率报告内容如下图所示 GDB远程调试功能 选中项目后可以通过工具栏中或者通过右键「调试」功能会有调试配置弹窗配置如下 选择调试器中的GDB调试器为ARM架构GDB如下图所示 点击调试即可进入调试界面并在设置的begin入口位置停住可以进行单步和断点和内存查看等操作如下图所示 如下图 debug 按钮 是最常用的 debug 按钮。 表示当前继续执行代码直到遇到下一个断点快捷键 F8 表示暂停执行 表示停止调试 表示断开当前远程连接 表示进入当前函数内部一步一步执行快捷键 F5step into 表示运行下一行代码执行当前行,但不进入执行细节快捷键 F6step over 表示退出当前方法返回到调用层快捷键为 F7step return 表示进行指令单步调试。 可以进行单步如下所示 点击全速执行点击暂停会发现停在最后一条跳转指令位置如下所示 SkyEye主要功能介绍 如何构建裸机hello world目标程序并在SkyEye全数字实时仿真平台上运行及调试通过上面的例程讲述了如何构建裸机hello world目标二进制程序并通过SkyEye运行调试的方法也介绍了SkyEye的调试和代码覆盖率功能那么SkyEye还有没有其他的有用的功能协助开发者或测试者进行目标系统软件的验证呢答案当然是肯定的下面列举SkyEye一些主要的功能。 更灵活快速的虚拟目标系统搭建——通过可视化图形界面拖拽虚拟硬件组件快速搭建 仿真状态可控性、确定性和重复性–在虚拟系统上运行的二进制文件与实际目标上运行的二进制文件相同仿真过程可以通过运行、暂停控制、可以随时重复执行每次运行结果是确定的可以使用软件复现问题 提供GDB源码调试和汇编级调试工具使开发者更高效的分析和定位问题 提供代码覆盖率和生成报告功能进行源码和目标码的覆盖率分析 提供故障注入功能可以进行内存和IO的故障注入进行测试 提供协同仿真工具支持与其他异构模型协同仿真 提供外设建模工具和二次开发API接口方便用户进行自定义仿真设备的快速构建和二次开发 支持外部数据激励功能可以通过与上位机软件通过虚拟串口、网络等方式建立通信通过SkyEye构建的虚拟环境与目标系统软件进行数据的交互完成闭环测试。 提供Python API接口可以通过自动化测试脚本构建所需测试环境例如监视内存地址监视和修改应用软件全局变量的值 Docker容器化支持 界面提供自动化测试功能可以选择所需测试用例自动运行并给出测试结果。
http://www.sadfv.cn/news/82764/

相关文章:

  • 临沂网站建设方案服务一个网站3个相似域名
  • 公司网站的定义企业网站 微博模块
  • 21年网站搭建公司排行榜南京模板建站定制网站
  • 做购物网站怎么赚钱怎样制作网页游戏
  • 大人小孩做网站网站建设技术服务计入什么科目
  • 沧州网站运营公司芜湖注册公司
  • 建网站建设的基本流程网站app建站多少钱
  • 广西网站建设timkee网页版微信二维码扫描
  • 建造电商网站建立网站平台
  • 斗图在线制作网站wordpress zh cn.po
  • 法律电商如何做网站推广营销我自己做个网站怎么做
  • 青岛优化网站诊断网站建设的公司第七页
  • 杭州企业云网站建设人工智能网站建设
  • 小学学校网站建设计划书广告设计从入门到精通
  • 设计手机访问的网站网络销售怎么推广
  • 网站建设实习设计师培训后的收获和感想
  • 柳州 网站建设广州网站(建设信科网络)
  • 手机网站生成小程序安卓app快速开发工具
  • 合肥外贸网站建设公司价格无锡网站建设套餐
  • 广州在线网页制作百度seo视频教程
  • 网站的新闻栏与产品栏如何做名师工作室建设网站
  • 清河做网站哪里好品牌网站建设流程
  • 网站关键词在哪设置网站开发团队分工
  • 网站维护建设费入什么科目大连省建设厅网站
  • 网站建设招标方式怎么做相亲网站
  • 阿里云部署一个自己做的网站吗合肥做公司网站联系方式
  • 海南城乡建设庁网站做网站手机
  • 如皋电子商城网站建设wordpress 封面图像
  • 如何自己建站网站制作长春 建设工程信息网站
  • 宁波新亚建设内部网站wordpress官方模版