Renode学习:Working with machines

上一篇文章,介绍了Renode的安装:初识Renode。 这一篇,继续探索Renode的用法。

Renode可以很容易地做跨机器仿真,本篇介绍Renode做机器仿真的基础操作。

1. 创建Machine

在monitor中执行mach create,将会创建一个新的machine,默认情况下,系统会自动分配machine的index,从0开始计数,分别命名为“machine-0”、“machine-1”等,并且会自动将monitor的上下文切换到新建的machine。

我们也可以通过命令指定machine的名称,例如,我们要创建一个名为“demo_machine”的machine,则可以使用mach create "demo_machine"

如果要查看所有已创建的machines,则可用help mach命令,如下图所示,该命令的结果中还指明了更多可用命令,大家可根据需要自己选择使用。

2. 切换machine

使用mach set命令可实现将monitor的上下文在不同的machine之间切换,可使用machine的名称或者index来指定需要切换的machine。

 3. 装载Platform

当完成Machine的创建之后,该Machine只有一个外设,即系统总线(Renode中简写为sysbus)。此时该Machine并不具备CPU和内存,因此还无法执行任何代码。

我们可以通过 peripherals命令列出所有的外设,可以看到,此时只有sysbus:

 要装载预定义平台,我们可以使用命令

machine LoadPlatformDescription @platforms/cpus/miv.repl

其中,@号后面是repl文件的路径。例如,我们要装载i386,可以用命令行:

machine LoadPlatformDescription @platforms/cpus/i386.repl

装载完后,通过peripherals查看当前外设:

4. 访问和操作外设

 我们可对外围设备进行属性读写及操作。外围设备支持的属性及操作,可通过在对应的machine上下文中键入外围设备名称进行查看,例如我们要查看以上i386设备的sdram属性,可以键入sysbus.sdram

 根据以上的属性和操作列表,我们就可对该外设进行需要的操作。例如,我们要获取sdram的大小,可输入sysbus.sdram Size

 若要对其进行复位,可调用Reset方法:

 5. 加载二进制文件

在完成平台的创建以及配置后,就可以将要运行的软件上载到平台上。Renode可以使得用户上载与在真实硬件上同样的软件可执行文件,无需修改或者重新编译。

上载ELF文件到存储器,所用命令格式如下:

sysbus LoadELF @my-project.elf

 也可使用LoadBinary或LoadUImage来上载原始二进制文件或者UImage文件。

例如,新建一个stm32f的machine,加载platform后,上载适用的elf文件:

sysbus LoadELF @http://antmicro.com/projects/renode/stm32f4discovery.elf-s_445441-827a0dedd3790f4559d7518320006613768b5e72

 6. 清除仿真

如果要切换至其他项目,可将当前的仿真清除。使用Clear命令可将所有创建的Machines、Peripherals以及上载的二进制文件全部清除,Renode会回归至初始状态:

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
解释下面代码功能#include<iostream> #include<cstring> #include<cmath> using namespace std; int Node[50]; int number; int Calculate(char x)//计算偏移 { if(x>=97&&x<=122) return 0; switch(x) { case '!': case '^': case '(': case ')': return 1; case '|': case '-': return 2; case '<': return 3; default: return 1; } } int CalculateOut(string &Word,int n,int m)//输出||、->、<->,等等 { int i; if(m!=0) { for(i=1; i<m; i++)cout<<Word[n+i]; if(Word[i+n]!='\0') cout<<" "; } } int Input(string &Word)//输出数据 { int m,i,tag,q; number=0; for(i=0; Word[i]!='\0'; ) { q=i; if(Word[i]==' ') { i++; continue; } cout<<Word[i]; tag=Calculate(Word[i]); CalculateOut(Word,i,tag); i+=tag;//偏移 if(!tag)//数字计数 { Node[Word[q]-97]++; number++; if(Word[i+1]!='\0') cout<<" "; i++; } } cout<<endl; return number; } int Bin(int n,int m) { int bin[10000]; int a,b,i=0; do { a=n%2; n/=2; bin[i++]=a; } while(n>0); for(n=0; n<m-i; n++) { cout<<"0 "; } for(n=i-1; n>=0; n--) { cout<<bin[n]; if(n) cout<<" "; } } int Outnumber(int n) { int i,m=1; for(i=1; i<n; i++) { m=m*2+1; } for(i=m; i>=0; i--) { Bin(i,n); cout<<endl; } } void CoutNode() { int i,temp=0; for(i=0; i<50; i++) { if(temp==0&&Node[i]!=0) { cout.put(97+i); temp++; } else if(Node[i]!=0) { cout<<" "; cout.put(97+i); temp++; } } number=temp; cout<<endl; } int ReNode()//初始化 { for(int i=0; i<110; i++) Node[i]=0; } int Turn(char Map[400],string &Word) { int n,i; for(i=0,n=0;i<=strlen(Map);i++) { if(Map[i]!=' ') { Word[n]=Map[i]; n++; } } Word[n]='\0'; } int main() { int n,i; string Word; char Map[400]; while(gets(Map)!=NULL)//输入 { ReNode(); Turn(Map,Word); Input(Word); CoutNode(); Outnumber(number); } // Bin(2); }
06-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值