嵌入式领域 domain-embedded

该技能专注于使用Rust语言进行嵌入式系统开发,涵盖no_std环境、微控制器编程、硬件抽象层、中断处理和实时系统设计。关键词:嵌入式Rust,no_std,单片机,微控制器,固件开发,硬件抽象,中断安全,实时系统,裸机编程,Rust嵌入式开发。

嵌入式软件 0 次安装 0 次浏览 更新于 2/27/2026

name: domain-embedded description: “用于开发嵌入式/no_std Rust。关键词:嵌入式,no_std,微控制器,MCU,ARM,RISC-V,裸机,固件,HAL,PAC,RTIC,embassy,中断,DMA,外设,GPIO,SPI,I2C,UART,embedded-hal,cortex-m,esp32,stm32,nrf,嵌入式,单片机,固件,裸机” globs: [“/Cargo.toml", "/.cargo/config.toml”] user-invocable: false

项目上下文(自动注入)

目标配置: !cat .cargo/config.toml 2>/dev/null || echo "未找到 .cargo/config.toml 文件"


嵌入式领域

第3层:领域约束

领域约束 → 设计影响

领域规则 设计约束 Rust 含义
无堆内存 栈分配 heapless,无 Box/Vec
无标准库 仅核心库 #![no_std]
实时性 可预测的时序 无动态分配
资源受限 最小内存 静态缓冲区
硬件安全 安全的外设访问 HAL + 所有权
中断安全 ISR 中无阻塞 原子操作,临界区

关键约束

无动态分配

规则:不能使用堆内存(无分配器)
原因:确定性内存,无内存不足(OOM)
RUST:heapless::Vec<T, N>,数组

中断安全

规则:共享状态必须是中断安全的
原因:ISR 可能在任何时候抢占
RUST:Mutex<RefCell<T>> + 临界区

硬件所有权

规则:外设必须有明确的所有权
原因:防止冲突访问
RUST:HAL 获取所有权,单例模式

向下追溯 ↓

从约束到设计(第2层):

“需要兼容 no_std 的数据结构”
    ↓ m02-资源:heapless 集合
    ↓ 静态大小:heapless::Vec<T, N>

“需要中断安全的状态”
    ↓ m03-可变性:Mutex<RefCell<Option<T>>>
    ↓ m07-并发:临界区

“需要外设所有权”
    ↓ m01-所有权:单例模式
    ↓ m12-生命周期:硬件的 RAII

层级栈

层级 示例 目的
PAC stm32f4, esp32c3 寄存器访问
HAL stm32f4xx-hal 硬件抽象
框架 RTIC, Embassy 并发
特质 embedded-hal 可移植驱动

框架对比

框架 风格 最适合
RTIC 基于优先级 中断驱动应用
Embassy 异步 复杂状态机
裸机 手动 简单应用

关键 Crate

目的 Crate
运行时(ARM) cortex-m-rt
Panic 处理 panic-halt, panic-probe
集合 heapless
HAL 特质 embedded-hal
日志 defmt
闪存/调试 probe-run

设计模式

模式 目的 实现
no_std 设置 裸机 #![no_std] + #![no_main]
入口点 启动 #[entry] 或 embassy
静态状态 ISR 访问 Mutex<RefCell<Option<T>>>
固定缓冲区 无堆内存 heapless::Vec<T, N>

代码模式:静态外设

#![no_std]
#![no_main]

use cortex_m::interrupt::{self, Mutex};
use core::cell::RefCell;

static LED: Mutex<RefCell<Option<Led>>> = Mutex::new(RefCell::new(None));

#[entry]
fn main() -> ! {
    let dp = pac::Peripherals::take().unwrap();
    let led = Led::new(dp.GPIOA);

    interrupt::free(|cs| {
        LED.borrow(cs).replace(Some(led));
    });

    loop {
        interrupt::free(|cs| {
            if let Some(led) = LED.borrow(cs).borrow_mut().as_mut() {
                led.toggle();
            }
        });
    }
}

常见错误

错误 领域违规 修复方法
使用 Vec 堆分配 heapless::Vec
无临界区 与 ISR 的竞态条件 Mutex + interrupt::free
在 ISR 中阻塞 错过中断 推迟到主循环
不安全的外设访问 硬件冲突 HAL 所有权

追溯至第1层

约束 第2层模式 第1层实现
无堆内存 静态集合 heapless::Vec<T, N>
ISR 安全 临界区 Mutex<RefCell<T>>
硬件所有权 单例模式 take().unwrap()
no_std 仅核心库 #![no_std], #![no_main]

相关技能

当需要时 参见
静态内存 m02-资源
内部可变性 m03-可变性
中断模式 m07-并发
用于硬件的 Unsafe unsafe-checker