硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1435|回复: 4
收起左侧

【开源书籍】《Rust 嵌入式宝典》书籍+仓库

[复制链接]

49

主题

49

回帖

196

积分

初级会员

积分
196
发表于 2022-10-12 14:04:50 | 显示全部楼层 |阅读模式
Rust 嵌入式宝典官方原文仓库:https://github.com/rust-embedded/embedonomicon
Rust 嵌入式宝典官方原文在线版:https://docs.rust-embedded.org/embedonomicon/
Rust 嵌入式宝典中文翻译仓库:https://github.com/XxChang/embedonomicon
Rust 嵌入式宝典中文翻译在线版:https://xxchang.github.io/embedonomicon/
文章预览:
[color=var(--fg)]嵌入式宝典
嵌入式宝典带领你经历从零创造一个 #![no_std] 应用的过程,经历为Coterx-M微控制器搭建架构特定的功能的迭代过程。
[color=var(--fg)]目的
通过阅读这本书你将会学到
  • 搭建一个 #![no_std] 应用。这比搭建一个 #![no_std] 库更复杂,因为目标系统可能没有运行一个OS(或者你的目标就是搭建一个OS!),而且你的程序可能是目标中运行的唯一进程(或者第一个进程)。在这种情况下,程序可能需要为目标系统进行定制。
  • 精细控制一个Rust程序的存储布局的技巧。你将学到链接器(linkers),链接器脚本和Rust中那些能让你控制Rust程序某些ABI的功能。
  • 实现可以被静态重载(没有运行时消耗)的默认功能的一个技巧。

[color=var(--fg)]目标读者
这本书主要面向两个读者:
  • 希望为一个生态系统还没有支持的架构提供裸板支持(比如,自Rust 1.28以来的Cortex-R),或者为一个刚获得Rust支持的架构提供支持(比如 未来可能有Xtensa)
  • 对像是 [color=var(--links)]cortex-m-rt,[color=var(--links)]msp430-rt 和 [color=var(--links)]riscv-rt 这样的 runtime 库的不寻常的实现感到好奇的人。

[color=var(--fg)]要求
这本书是自洽的。读者不需要熟悉Cortex-M架构,也不需要一个Cortex-M微控制器 -- 这本书里包含 的所有例子能在QEMU中测试。然而,你需要安装下面的工具来运行和检查这本书中的示例:
  • 这本书中所有代码使用的是2018版的Rust。如果你不熟悉2018的特性和术语,阅读 [color=var(--links)]edition guide
  • Rust 1.31 或者更新的具有ARM Cortex-M编译支持的工具链。
  • [color=var(--links)]cargo-binutils. v0.1.4 或者更新的版本。
  • [color=var(--links)]cargo-edit.
  • 有ARM仿真支持的QEMU。qemu-system-arm 程序必须被安装在你的电脑上。
  • 有ARM支持的GDB 。




[color=var(--fg)]#![no_std] 是什么意思?
#![no_std] 是一个crate层的属性,其指出crate将链接到 [color=var(--links)]core 而不是 [color=var(--links)]std crate,但是这对应用来说意味着什么呢?
std crate 是Rust的标准库。它包含的功能需要假设程序将运行在一个操作系统上而不是[直接运行在裸机]上。std 也假设操作系统是一个通用目的操作系统,像是会在服务器和桌面看到的那些系统。因此,std 在通常会在操作系统中的找到的那些功能:线程,文件,套接字,一个文件系统,进程,等等之上,提供一个标准的API 。
换句话说,core crate是std crate的一个子集,其不对将运行程序的系统做任何假设。它提供与语言的基本类型,像是浮点数,字符串和切片有关的APIs,也提供像是原子操作和SIMD指令这样暴露处理器特性的APIs 。然而它缺少涉及到堆内存分配和I/O有关的APIs。
对于一个应用来说,std 不仅仅只是提供一种方法访问OS抽象。std 在某些情况下,也提供栈溢出保护,处理命令行参数,在一个程序的main函数被启动前打开主线程。一个 #![no_std] 应用缺少上述的所有运行时,因此它必须初始化它自己的运行时,如果有需要的话。
由于这些特点,一个 #![no_std] 应用可以成为第一个或者是唯一一个运行在一个系统上的代码。它可以成为许多一个标准Rust应用无法成为的东西,比如:
  • 一个操作系统的内核。
  • 固件。
  • 一个启动引导。



简体中文 PDF 版本,想看最新的请直接看在线版本:
《Rust 嵌入式宝典 -- The Embedonomicon》.pdf (5.73 MB, 下载次数: 136)



回复

使用道具 举报

38

主题

194

回帖

318

积分

高级会员

积分
318
发表于 2022-10-12 15:33:43 | 显示全部楼层
这个和传统的开发方式比起来,有什么特点?
回复

使用道具 举报

49

主题

49

回帖

196

积分

初级会员

积分
196
 楼主| 发表于 2022-10-12 15:48:09 | 显示全部楼层
会飞的猪_2020 发表于 2022-10-12 15:33
这个和传统的开发方式比起来,有什么特点?

Rust 的作者说:Rust 是一种采用过去的知识解决将来的问题的技术
Rust 的特性也是如此。
回复

使用道具 举报

1

主题

369

回帖

372

积分

高级会员

积分
372
发表于 2022-10-12 21:40:25 | 显示全部楼层
rust是未来,有时间学习一下
回复

使用道具 举报

13

主题

191

回帖

230

积分

高级会员

积分
230
发表于 2022-10-17 14:30:44 | 显示全部楼层
牛批,学习一下,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 08:12 , Processed in 0.185916 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表