2个版本

使用旧的Rust 2015

0.1.1 2018年10月28日
0.1.0 2017年2月22日

#313 in 模拟器

MIT 许可证

215KB
5.5K SLoC

Rust 4K SLoC // 0.0% comments C 1.5K SLoC // 0.0% comments Shell 4 SLoC // 0.7% comments

包含(静态库,13KB)test/libspicboard/libspicboard.a

AVR-VM

Build Status

这是一个用Rust编写的AVR ATmega32微控制器的虚拟机。它可以处理大多数指令,并支持I/O、ADC、定时器和按钮中断。它还包含一个JIT编译器,可以将AVR字节码在运行时编译为x64机器码。它非常快,大约比真实微控制器快5倍。

这个虚拟机是作为大学课程的一部分构建的,因此目前没有在开发中。但如果您想使用它并遇到问题,请随时提出问题或PR。

一些测试程序可以在./test中找到。虚拟机只对这些程序进行了测试。目前只实现了这些程序的指令(有很多,但不是全部)。

它包括一个带有一些LED灯、按钮、两个电位计和两个七段数字的GUI。有一些测试程序使用了这些外围设备。接线大致如下(缺少JTAG、ISP和USB):接线。可以通过调整main.rs来更改。

以下是一个示例,展示了在运行boardtest程序时GUI的外观:boardtest

微控制器写入UDR的所有字符都将在控制台中显示。

安装

要使用此虚拟机,您需要执行以下步骤

  1. 克隆此仓库。

  2. 如果您想使用GUI,您至少需要安装gtk 3.4。

  3. 仅限JIT编译:此项目使用Dynasm-rs作为JIT编译器的编译器插件,需要Rust编译器的nightly版本。可以通过Rustup安装工作版本:rustup override set nightly-2018-10-09此外,JIT编译器需要通过启用“jit”功能来启用,见下文。

  4. 为了运行测试和将C代码及汇编器编译成AVR字节码,需要安装gcc-avr。可以从http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORLINUX.aspx安装,或者使用以下命令在Ubuntu / Debian / BashOnWindows上安装:sudo apt-get install gcc-avr binutils-avr avr-libc如果您使用的是不同的发行版,您可能在那里找到等效的包。

用法

您可以使用以下命令执行虚拟机:cargo run --release -- ./test/boardtest/boardtest.bin

通过更改./test/boardtest/boardtest.bin,您可以执行不同的二进制文件。

无GUI

可以使用以下命令禁用GUI:cargo run --release --no-default-features -- ./test/jump/jump.bin

此时只可见控制台输出,程序在第一个NOP处停止。这对于编译器的基准测试很有用,有关示例程序,请参阅./tests/jump/jump-time

使用JIT编译器

可以使用以下标志启用JIT编译器:cargo run --release --features jit -- ./test/jump/jump.bin

如果您想使用JIT编译器,请确保您正在使用Rust编译器的夜间版本。有关使用哪个版本的说明,请参阅上述内容。

材料

依赖关系

~0.3–3MB
~71K SLoC