LED轮盘赌 好吧,让我们从构建以下应用程序开始:

我将为您提供一个高级API来实现这个应用程序,但不要担心我们以后会做低级别的事情。本章的主要目标是熟悉闪存和调试过程。

在本文中,我们将使用发现存储库中的入门代码。确保您始终拥有最新版本的主分支,因为该网站会跟踪该分支。

入门代码位于该src存储库的目录中。在该目录中,有更多目录以本书的每一章命名。这些目录中的大部分都是入门货运项目。

现在,跳转到src/05-led-roulette目录。检查src/main.rs文件:

![deny(unsafe_code)]

![no_main]

![no_std]

use aux5::entry;

[entry]

fn main() -> ! { let _y; let x = 42; _y = x;

  1. // infinite loop; just so we don't leave this stack frame
  2. loop {}

}

微控制器程序在两个方面#![no_std]与标准程序不同:和 #![no_main]。

该no_std属性表示该程序不会使用std包含底层操作系统的包; 程序将改为使用corecrate,它的一部分std可以在裸机系统上运行(即没有OS抽象的系统,如文件和套接字)。

该no_main属性表示该程序不会使用标准main接口,该接口是为接收参数的命令行应用程序量身定制的。main我们将使用包中的entry属性cortex-m-rt来定义自定义入口点,而不是标准。在这个程序中,我们将入口点命名为“main”,但是可以使用任何其他名称。入口点函数必须有签名fn() -> !; 此类型表示函数无法返回 - 这意味着程序永远不会终止。

如果您是一位细心的观察者,您还会注意到.cargoCargo项目中也有一个目录。该目录包含一个Cargo配置文件(.cargo/config),它调整链接过程以根据目标设备的要求定制程序的内存布局。这种修改的链接过程是cortex-m-rt箱子的要求。

好吧,让我们从构建这个程序开始吧。