用虚拟机在一台电脑上实现xPC实时仿真

article/2025/9/23 10:52:30

背景介绍

  一般的xPC仿真需要2台电脑来分别实现目标机和宿主机,两者之间通过以太网或者串口实现通讯。Matlab的xPC Target提供了一个运行在目标机上的高度剪裁的实时操作内核,无需在目标机上面安装任何的操作系统,只需要包含实时内核的启动盘启动目标机即可,也就是说BIOS是实时内核所需要的唯一软件。一般的双机方法需要制作xPC的目标启动盘,有多种方式,软盘,U盘(具体方法可以参考U盘DOS启动盘的制作),CD盘,硬盘等的方式。

xPC工作过程

  1. 载入BIOS,BIOS自动搜索目标启动盘中的启动映像文件。启动映像文件首先将CPU从实模式状态切换到保护模式下,然后设置目标PC机并启动实时内核。
  2. 启动实时内核后,将激活应用程序载入程序,并等待从宿主机上下载目标应用程序。将目标应用程序复制到指定内存区域后设置目标程序处于准备执行状态。
  3. 通过函数或其他应用程序与目标程序进行通讯。

本文思路

  本文的方式是在一台电脑上利用虚拟机充当目标机的方式实现一台电脑的双机方法。虚拟机是在硬盘上虚拟出来的电脑,和真是的电脑几乎完全一样,且拥有独立的CMOS、硬盘和操作系统,提供的虚拟网络功能可以实现互联,能够使用外部机器的物理接口和硬件,能够提供更加有效的底层硬件使用。

实现方法

目标机的配置

  用VMvare软件(12.1.1 build-3770994)配置一台虚拟机即作为目标机。选择创建新的虚拟机,选择典型配置,稍后安装操作系统,在选择客户机操作系统的时候,由于xPC Target对硬 件要求很低且不需要安装其它操作系统,故选择其他,修改虚拟机名称和位置,然后可以分配较小的硬盘和内存。这样,目标机就创建完成了。
  接下来对目标机进行配置,这里我们采用以太网通信的方式(也可以采用串口,虚拟机也支持与外部的串口通信),在虚拟机设置,硬件设置,网络适配器里面选择仅主机模式(host-only)。
虚拟机的配置
  在选择仅主机模式时,宿主机与目标机通信的虚拟网卡为VMvare Network Adaptor VMnet1,需要将其在控制面板中启用(与锐捷网卡冲突,平时禁用)。虚拟网卡型号有很多,有着不同的性能。一般默认的型号为AMD PCNet,恰好属于xPC Target网卡驱动列表中支持的 RTLANCE类型。可以查看到虚拟网卡的IP地址为192.168.163.XXX。
VMVARE的虚拟网卡

宿主机的配置
  在宿主机(Win7)打开matlab(R2011b)命令窗口运行xpceplr。在xPC Target Explorer窗口中进行相关设置。
  首先设置Host PC Root的Compiler(s) Configuration为你自己的C编译器目录。
  然后选择TargetPC1的Configuration的Communication,选择Host target communication为TCP/IP方式,将目标机IP地址设为与宿主机同一网段。TCP/IP target driver可以选择RTLANCE也可以设置成为auto,其他保持默认。在Settings里面将Target RAM size调为人工模式并适当调大点,自动的话只有10M。
目标机配置

制作目标机启动盘
  选择Configuration,可以看到有多种启动盘制作方式。可以通过虚拟软驱制成.img格式的软盘镜像文件,然后在VMvare虚拟的目标机软驱中加载。这里采用使用CD Boot制作CD启动盘(在刻盘提醒时忽略),把生成的.iso文件加载到目标机虚拟机的CD-ROM中。由于虚拟机自带BIOS,如果没有系统的话,会自动寻找启动文件。如果用的是带系统的虚拟机,就要设置引导顺序,将CD引导方式设为首选。

进行连接测试
  启动虚拟机,显示如下说明xPC Target的实时内核启动:
xPC内核启动
  在matlab命令串口输入xpctest命令行进行通信测试:
xpctest测试结果
  如图显示通信正常,可建立xPC在虚拟机上进行目标机的仿真。而且根据VMvare官方介绍:

Virtual machines can connect to smart card readers that interface to serial ports, parallel ports, PCMCIA slots, and PCI slots. A virtual machine considers a smart card reader to be a type of USB deveice.

  因此可以在此基础上进行与其他硬件相连接通信的半物理仿真。

参考文献

孙逸神. 利用VMware在一台PC上实现xPC Target实时仿真[J]. 电脑知识与技术:学术交流, 2009, 5(22):6298-6299.


http://chatgpt.dhexx.cn/article/etpopOjK.shtml

相关文章

使用XPC与X-Plane9进行通信

XPC(X-Plane Connect)是NASA开源的项目 XPC下载地址 XPC支持C,JAVA,PYTHON和MATLAB 博主使用的是XPC中matlab与X-Plane9进行通信,具体步骤如下 1.把 .XPlaneConnect-master/xpcPlugin 下的 XPlaneConnect 文件夹整体拷贝到游戏目录下 .X-Plane 9\Resources\plugi…

XPC论文总结

XPC: Architectural Support for Secure and Efficient Cross Process Call 论文总结 摘要 1.微内核有很多有趣的特性,例如安全性、容错、模块化、可定制性。 2.IPC是影响操作系统性能的主要因素。 3.IPC在例如Android Linux等单片内核中也发挥着重要作用&#xf…

ios进程间通信问题之二----XPC

原文地址:http://objccn.io/issue-14-4/ 关于 XPC XPC 是 OS X 下的一种 IPC (进程间通信) 技术, 它实现了权限隔离, 使得 App Sandbox 更加完备. 首先,XPC 更多关注的是实现功能某种的方式,通常采用其他方式同样能够实现。并没有强调如果不使…

c语言编程输出杨辉三角行

#include <stdio.h> #define N 7 //以7行7列为例 int main() { int a[N][N]; //N行N列的杨辉三角 int i,j;for(i0;i<N;i) //先赋值两边 { a[i][0]1; a[i][i]1; }for(i2;i<N;i) // 计算中间的数值 { for(j1;j<i;j) a[i][j]a[i-1][j-1]a[i-1][j]; }for(i0;i<…

C语言笔记--利用二维数组输出杨辉三角形

杨辉三角形又称帕斯卡三角形&#xff0c;其余的话就不多说&#xff0c;先看下面的三角形&#xff1a; 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 …

c语言——杨辉三角(输出任意行数的杨辉三角)

下面为大家介绍用二维数组来输出任意行的杨辉三角。有以下步骤&#xff1a; 1&#xff1a;利用一个全局变量来控制数组&#xff0c;从而控制杨辉三角大小。 2&#xff1a;分别用for循环进行对杨辉三角进行赋值。&#xff08;利用它每个数等于它上方两个数和的规律&#xff09; …

C语言打印输出杨辉三角案例讲解

我们先看什么是杨辉三角&#xff1a; 通过观察我们得出杨辉三角的特点&#xff1a; 1.杨辉三角的每行第一个数字都是1。 2.杨辉三角的每行最后一个数字都是1。 3.杨辉三角从第三行开始&#xff0c;每行除了第一个数字和最后一个数字都是1外&#xff1b; 其余的数字都是每个数字…

输入n,输出n行的杨辉三角.

杨辉三角&#xff1a;每个数等于它上方两数之和。 #include<stdio.h> int main() {int n;scanf("%d",&n);int a[100][100]{0};int i,j;for(i0;i<n;i){a[i][0]1;}for(i1;i<n;i){for(j1;j<i;j){a[i][j]a[i-1][j]a[i-1][j-1];}}for(i0;i<n;i){for…

C语言之输出杨辉三角的教程

题目&#xff1a;产生并输出杨辉三角的前七行 代码如下所示&#xff1a; #include <stdio.h>main(){int a[7][7];int i, j;for (i 0; i < 7; i){a[i][0] 1;a[i][i] 1;}for (i 2; i < 7; i)//关于行的循环{for (j 1; j <i; j)//关于列的循环&#xff0c;每…

c语言实现输出杨辉三角

杨辉三角 方法1:方法2:方法3: 要求&#xff1a; 输出以下的杨辉三角形&#xff08;要求输出10行&#xff09;&#xff08;12分&#xff09; 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10  5 1 : : : : : : 方法1: #include<stdio.h>#define row 10 #defin…

[C语言]杨辉三角形:编程计算并输出打印前n行杨辉三角形。请使用数组实现。

输入 输入一个正整数n&#xff08;0 < n < 20&#xff09;。 输出 输出杨辉三角形的前n行&#xff0c;相邻两项之间用一个空格隔开。 输入示例 7 输出示例 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 数据范围 输入输出均为int范围的整数 先…

C语言输出正三角形

输出这个正三角形 分析&#xff1a;行数为五行&#xff0c;然后确定每行需要输出的空格数和*号数即可 int i, j, k;for(i 1; i<5; i){/* 观察每行的空格数量 */for(j 0 ;j < 4-i ;j) {printf(" "); //输出空格}/* 观察每行*号的数量 */for(k 0; k <…

用C语言打印杨辉三角(可以根据输入的行数输出相应的杨辉三角)

C语言实现打印杨辉三角 杨辉三角如下图所示&#xff1a; 从图中可以看出杨辉三角中的数据有以下特点&#xff1a; 1.第0列及对角线上的所有元素都为1 2.其它位置的元素为上一行与该元素同列及前一列的元素相加的结果 根据上述杨辉三角中数据的特点&#xff0c;我们可以编程实…

C语言:输出杨辉三角

C语言学习记录之输出杨辉三角形 #include <stdio.h> #define N 10 //输出前十行 int main() {int arr[N][N];for (int i 0;i < N;i) { arr[i][0] 1; // 首先给每行第一个和最后一个赋值1arr[i][i] 1;}// 从第三行起&#xff0c;除了每行的1以外&#xff0c…

C++语言 输出杨辉三角形 要求输出10行。

C语言 输出杨辉三角形 要求输出10行。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 #include <iostream> #include <iomanip> using namespace std; int main(){const int n11;int i,j,a[n][n];for (i1;i<n;i){a[i][i]1;a[i][1]1;}for (…

【输出N行杨辉三角形】两种输出方式(直角三角形型和等腰三角形型)C语言

要想用C语言实现杨辉三角形的输出&#xff0c;就首先需要明白杨辉三角形是怎么来的。 首先我们规定每一行第一个和最后数一个为1&#xff0c;那么从第一行开始就只有一个1;第二行就有两个1&#xff0c;从第三行开始就体现出杨辉三角形的特点了&#xff0c;即就是——每一个等于…

输出以下的杨辉三角形 要求输出10行 C语言

C语言 输出杨辉三角形 要求输出10行。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 c程序设计(第四版) #include <stdio.h> #define N 10 int main() { int i,j,a[N][N];for (i0;i<N;i){a[i][i]1;a[i][0]1;}for (i2;i<N;i)for (j1;j<i-…

C语言输出杨辉三角形

C语言输出杨辉三角形 IDE&#xff1a;DEV-C 编程思想&#xff1a; 利用一维数组存储第0行数据。 例如 int Sum[ ] { 0,0,0,0,1,0,0,0,0}; 元素1表示初始时最中心元素。其位置由所想要输出的行数控制。 然后利用for循环求下一行数组元素值。具体做法如下&#xff1a; for(int …

C语言输出杨辉三角

目录&#xff1a;一、杨辉三角的解读。二、主要思路。三、代码及结果展示。 一、杨辉三角就是除了前两行外&#xff0c;后一行的数由前一行的同一位置的数与前一位数之和&#xff0c;但是唯一确定的是以1开头以1结尾就比如这样的&#xff1a; 前五行的杨辉三角 二、思路 1、先定…

C语言 输出正三角形图形

1. 原代码如下 #include<stdio.h> int main(){int row, col, i;char c 32;for(row 1; row < 6; row){for(i 5-row; i > 0; i--)printf("%c", c);for(col 1; col < 2*row-1; col)printf("*");printf("\n");}return 0; } 2. …