Rust嵌入式开发进阶之路(十年经验工程师私藏笔记曝光)

第一章:Rust嵌入式开发概述

Rust 正在成为嵌入式系统开发中备受关注的编程语言,凭借其内存安全、零成本抽象和无运行时开销的特性,为资源受限的微控制器环境提供了可靠的开发选择。与传统的 C/C++ 相比,Rust 在编译期即可防止空指针解引用、数据竞争等常见错误,显著提升系统稳定性。

核心优势

  • 内存安全:无需垃圾回收机制,通过所有权系统保证内存安全
  • 高性能:生成的机器码效率接近 C 语言
  • 跨平台支持:可通过 target 配置支持 Cortex-M、RISC-V 等架构
  • 丰富的生态系统:embedded-hal 抽象硬件接口,促进驱动复用

开发环境搭建

使用 Rust 进行嵌入式开发需安装交叉编译工具链。以下为基本步骤:
  1. 安装 Rust 工具链:
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  2. 添加目标架构支持(以 ARM Cortex-M3 为例):
    rustup target add thumbv7m-none-eabi
  3. 安装二进制工具如 cargo-binutils 用于生成镜像文件:
    cargo install cargo-readobj cargo-objcopy

最小可执行示例

以下是一个运行在裸机环境的简单程序,点亮 LED:
// 使用 no_std 环境,不依赖标准库
#![no_std]
#![no_main]

use cortex_m_rt::entry;
use panic_halt as _;

#[entry]
fn main() -> ! {
    // 模拟初始化 GPIO
    let gpio = unsafe { &*0x50000000u32 as *const u32 };
    unsafe { core::ptr::write_volatile(gpio, 1); }

    loop {
        // 主循环保持运行
    }
}

常用工具链组件对比

工具用途示例命令
cargo-embed烧录固件并启动调试日志cargo embed --release
probe-rs提供调试探针支持支持 ST-Link、J-Link 等设备

第二章:Rust嵌入式核心概念与底层机制

2.1 内存管理与所有权在嵌入式环境的应用

在资源受限的嵌入式系统中,内存管理至关重要。Rust 的所有权机制无需垃圾回收即可保障内存安全,特别适合裸机(bare-metal)开发。
栈上分配与所有权转移
嵌入式应用常避免堆分配以减少不确定性。以下代码展示栈上数据的所有权传递:

fn process_sensor(data: [u8; 32]) -> u16 {
    data.iter().map(|&x| x as u16).sum()
}
let raw = [0u8; 32];
let sum = process_sensor(raw); // 所有权转移,但数组按值复制
由于 [u8; 32] 实现了 Copy trait,调用后 raw 仍可使用,适用于传感器数据处理场景。
生命周期确保引用安全
使用显式生命周期标注,防止悬垂指针:
变量生命周期用途
buffer'a存储ADC采样结果
view'a指向buffer的切片
这保证了引用在有效期内被安全访问,契合实时任务调度需求。

2.2 零成本抽象与硬件寄存器的高效交互

在嵌入式系统开发中,零成本抽象是实现高性能硬件控制的核心原则。它允许开发者使用高级语法构造,而编译后不引入运行时开销。
寄存器级操作的类型安全封装
通过静态分发和泛型机制,可在不牺牲性能的前提下提供类型安全的寄存器访问:

#[repr(transparent)]
struct Reg(volatile::Volatile);

impl Reg {
    fn write(&self, value: u32) {
        unsafe { self.0.write(value); }
    }
}
上述代码将裸寄存器封装为安全接口,repr(transparent) 确保内存布局与原始类型一致,编译器可完全内联调用,生成与直接指针操作等效的机器码。
编译期计算与常量传播
利用 Rust 的 const 泛型和编译期求值能力,位域偏移与掩码可于编译时确定:
  • 字段位置通过 const 函数计算
  • 复合写入合并为单条指令
  • 无效路径被死代码消除
最终生成的二进制代码仅包含必要的读-改-写序列,实现语义丰富但零额外开销的硬件交互模型。

2.3 unsafe代码的安全边界与外设驱动编写实践

在嵌入式Rust开发中,unsafe是访问硬件寄存器和实现外设驱动的必要手段,但必须严格划定安全边界。
安全封装硬件访问
通过抽象出安全API,将unsafe限制在最小范围内:

pub struct GpioPin {
    reg: *mut u32,
}

impl GpioPin {
    pub fn set_high(&self) {
        unsafe { core::ptr::write_volatile(self.reg, 1); }
    }
}
上述代码中,set_high封装了对寄存器的写操作。用户无需直接调用unsafe,而内部实现通过core::ptr::write_volatile确保写操作不被优化,适用于内存映射I/O。
外设驱动设计原则
  • 初始化阶段验证资源唯一性,防止重复借用
  • 使用类型系统区分输入/输出模式
  • 所有寄存器访问限定在unsafe块内,并附注原因

2.4 中断处理与异步任务调度模型解析

在现代操作系统中,中断处理是实现高效异步任务调度的核心机制。硬件中断触发后,CPU暂停当前执行流,跳转至中断服务例程(ISR),完成关键响应操作。
中断下半部机制
为避免长时间占用中断上下文,耗时操作被延迟执行。常见的下半部实现包括软中断、tasklet和工作队列。

// 工作队列示例:定义并初始化
struct work_struct my_work;
void work_handler(struct work_struct *work) {
    printk("Deferred task execution\n");
}
INIT_WORK(&my_work, work_handler);
schedule_work(&my_work); // 调度执行
上述代码注册一个可延后执行的任务,由内核工作队列在线程上下文中调用,避免阻塞中断处理。
异步调度模型对比
机制执行上下文适用场景
硬中断中断上下文紧急响应,如键盘输入
工作队列进程上下文可睡眠的复杂任务

2.5 编译优化与二进制尺寸控制技巧

在构建高性能且轻量的应用时,编译优化与二进制尺寸控制至关重要。合理配置编译器选项不仅能提升执行效率,还能显著减少输出体积。
启用编译器优化级别
GCC 和 Clang 支持多种优化等级,常用 `-O2` 或 `-Os` 来平衡性能与尺寸:
gcc -Os -flto -s -o app app.c
其中 `-Os` 优化代码大小,`-flto` 启用链接时优化,`-s` 移除符号表信息,有效压缩最终二进制。
移除无用代码与资源
使用死代码消除(Dead Code Elimination)和函数剥离:
  • --gc-sections:移除未引用的代码段和数据段
  • 配合 -fdata-sections -ffunction-sections 按函数粒度分割
静态分析辅助优化
通过 size 命令分析段分布:
SegmentSize (bytes)
.text12032
.data512
.bss2048
定位大体积模块并针对性重构。

第三章:开发环境搭建与工具链实战

3.1 搭建交叉编译环境与目标配置文件详解

在嵌入式开发中,交叉编译环境是实现主机与目标平台分离编译的核心。首先需安装对应架构的工具链,例如针对 ARM 平台可使用 `gcc-arm-linux-gnueabihf`。
工具链安装与环境变量配置

# 安装 ARM 交叉编译工具链
sudo apt install gcc-arm-linux-gnueabihf

# 设置环境变量
export CC=arm-linux-gnueabihf-gcc
export CXX=arm-linux-gnueabihf-g++
上述命令安装了 ARM 架构的 GCC 编译器,并通过 CC 和 CXX 环境变量指定默认交叉编译器,确保构建系统自动调用正确工具。
目标配置文件结构解析
目标配置文件(如 .config)定义了内核或构建系统的编译选项。常用字段包括:
  • ARCH:指定目标架构,如 arm、arm64
  • CROSS_COMPILE:设置交叉编译前缀,如 arm-linux-gnueabihf-
  • CONFIG_*:启用或禁用特定内核功能

3.2 使用Cargo和Xbuild构建固件镜像

在嵌入式Rust开发中,标准的Cargo构建流程无法满足无操作系统环境下的编译需求。为此,`cargo-xbuild`作为扩展工具,允许用户基于自定义的JSON目标规范进行交叉编译。
安装与配置Xbuild
首先需全局安装xbuild:
cargo install cargo-xbuild
该命令将`cargo xbuild`命令注入Cargo工具链,支持替代默认链接器行为。
构建固件镜像
通过以下指令触发固件编译:
cargo xbuild --target thumbv7m-none-eabi --release
其中`thumbv7m-none-eabi`指定ARM Cortex-M3架构,`--release`启用优化以生成紧凑的二进制镜像。
关键优势对比
特性CargoXbuild
自定义链接脚本受限支持
裸机目标支持否是

3.3 调试工具链整合:GDB、OpenOCD与probe-rs实战

在嵌入式Rust开发中,高效的调试依赖于GDB、OpenOCD与probe-rs的协同工作。GDB作为前端调试器,通过JTAG或SWD协议与目标芯片通信。
典型调试流程配置
# 启动OpenOCD服务
openocd -f interface/stlink-v2-1.cfg -f target/stm32f4x.cfg

# 在另一终端启动GDB并连接
arm-none-eabi-gdb target/thumbv7m-none-eabi/debug/app
(gdb) target extended-remote :3333
(gdb) monitor reset halt
上述命令依次加载ST-Link调试器配置和STM32F4目标芯片定义,GDB通过TCP端口3333与OpenOCD通信,实现断点设置与内存检查。
probe-rs替代方案优势
  • 纯Rust实现,跨平台兼容性更强
  • 支持RTT实时数据传输,便于日志输出
  • 集成到cargo embed,简化调试流程
使用cargo embed --release可一键烧录并进入调试会话,极大提升开发效率。

第四章:典型外设驱动开发案例精讲

4.1 GPIO控制与LED闪烁程序的模块化设计

在嵌入式开发中,GPIO控制是基础且关键的操作。将LED闪烁程序进行模块化设计,有助于提升代码可维护性与复用性。
模块划分原则
  • 分离硬件初始化与业务逻辑
  • 封装通用GPIO操作函数
  • 使用配置宏定义引脚参数
核心代码实现

#include "gpio.h"

#define LED_PIN 25

void led_init() {
    gpio_set_dir(LED_PIN, GPIO_OUT);
}

void led_toggle() {
    gpio_put(LED_PIN, !gpio_get(LED_PIN));
}
上述代码中,led_init() 设置LED引脚为输出模式,led_toggle() 实现电平翻转。通过宏定义引脚编号,便于硬件迁移。
模块调用示例
在主循环中周期调用 led_toggle() 并延时,即可实现呼吸灯效果,模块间低耦合,易于集成至RTOS或中断系统。

4.2 UART通信协议实现与串口日志输出

在嵌入式系统开发中,UART作为最基本的异步串行通信接口,广泛用于设备调试与数据传输。其协议通过起始位、数据位、可选的奇偶校验位和停止位构成帧结构,实现可靠的点对点通信。
UART初始化配置
典型配置需设定波特率、数据位长度及停止位数量。以下为基于STM32的HAL库初始化示例:

UART_HandleTypeDef huart1;

huart1.Instance = USART1;
huart1.Init.BaudRate = 115200;
huart1.Init.WordLength = UART_WORDLENGTH_8B;
huart1.Init.StopBits = UART_STOPBITS_1;
huart1.Init.Parity = UART_PARITY_NONE;
huart1.Init.Mode = UART_MODE_TX_RX;
HAL_UART_Init(&huart1);
上述代码设置串口1以115200bps传输8N1格式数据,支持收发双工操作。参数需与接收端严格匹配,否则将导致帧错误。
串口日志输出实现
通过重定向printf至UART,可实现便捷的日志输出:
  • 重载fputc函数,将字符写入串口发送缓冲区
  • 使用中断或DMA方式提升传输效率
  • 添加缓冲区保护机制防止并发访问冲突

4.3 SPI接口驱动OLED显示屏实战

在嵌入式系统中,使用SPI接口驱动OLED显示屏是实现图形化人机交互的关键技术。通过硬件SPI总线,可高效传输图像数据与控制指令。
硬件连接配置
典型接线如下表所示:
OLED引脚MCU引脚
SCKPB13
MOSIPB15
CSPB12
DCPA8
RSTPA9
初始化SPI通信
SPI_InitTypeDef spi;
spi.SPI_Mode = SPI_MODE_MASTER;
spi.SPI_BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; // 波特率预分频
spi.SPI_DataSize = SPI_DATASIZE_8BIT;
SPI_Init(SPI2, &spi);
SPI_Cmd(SPI2, ENABLE);
该代码配置SPI为主模式,时钟频率为系统时钟/16,确保OLED能稳定接收数据。
写入显示数据
通过区分命令与数据模式(由DC引脚控制),可向OLED发送初始化序列或帧缓冲区内容,实现动态画面更新。

4.4 定时器与PWM波形生成的精确时序控制

在嵌入式系统中,定时器是实现高精度时序控制的核心外设。通过配置定时器的预分频器和自动重载值,可精确设定PWM波形的频率与占空比。
PWM基本参数计算
定时器的PWM输出依赖于两个关键参数:周期(ARR)和比较值(CCR)。其关系如下:
  • PWM频率 = 定时器时钟 / ((ARR + 1) × (PSC + 1))
  • 占空比 = CCR / ARR
代码实现示例

// 配置TIM3生成1kHz PWM,占空比50%
TIM_HandleTypeDef htim3;
htim3.Instance = TIM3;
htim3.Init.Prescaler = 83;        // 84MHz → 1MHz
htim3.Init.Period = 999;          // 1kHz PWM
HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 500); // 50% 占空比
上述代码将84MHz时钟经预分频至1MHz,设置周期为1000个计数,比较值为500,从而生成1kHz、50%占空比的PWM信号。

第五章:未来趋势与生态演进

云原生架构的持续深化
随着 Kubernetes 成为容器编排的事实标准,越来越多企业将核心业务迁移至云原生平台。例如,某大型电商平台通过引入 KubeVirt 实现虚拟机与容器的统一调度,提升资源利用率 35%。其部署流程如下:

// 启动虚拟机实例
vm := &kubevirtv1.VirtualMachine{
    ObjectMeta: metav1.ObjectMeta{Name: "app-vm"},
    Spec: kubevirtv1.VirtualMachineSpec{
        Running: true,
        Template: &kubevirtv1.VirtualMachineInstanceTemplateSpec{
            Spec: kubevirtv1.VirtualMachineInstanceSpec{
                Domain: kubevirtv1.DomainSpec{
                    Devices: kubevirtv1.Devices{Disks: []kubevirtv1.Disk{{Name: "rootfs", DiskDevice: kubevirtv1.DiskDevice{Disk: &kubevirtv1.DiskTarget{Bus: "virtio"}}}}},
                },
            },
        },
    },
}
服务网格的智能化演进
Istio 正在集成更多 AI 驱动的流量预测机制。某金融公司利用其 Telemetry V2 架构收集调用链数据,并结合 Prometheus 与自研模型实现异常调用自动熔断。
组件用途部署频率
Envoy数据平面代理每节点1实例
Pilot配置分发高可用双活
Galley策略验证每日滚动更新
边缘计算与轻量运行时融合
K3s 和 MicroK8s 等轻量级发行版在 IoT 场景中广泛应用。某智能制造工厂在 200+ 边缘节点部署 K3s,通过 GitOps 模式由 ArgoCD 统一管理应用版本。
  • 边缘节点平均延迟从 120ms 降至 18ms
  • 固件更新周期由周级缩短至小时级
  • 使用 Flannel + HostGateway 模式优化内部通信

相关推荐

YOLOv8作物病害检测实战源码

这是一套基于YOLOv8n的农田病虫害目标检测系统,对叶片照片做目标检测,识别健康叶片、褐斑病、白粉病、锈病四类,并给出对应防治建议。全流程纯CPU可跑,配套交付完整Python源码、9章实战教程(md/html/pdf三种格式)、100张自造样本及YOLO标签、训练曲线与混淆矩阵截图、Tkinter界面和答辩PPT。 系统围绕五项功能展开:同一套推理逻辑覆盖图像、视频、摄像头三种来源;图形界面选文件即检测,画面叠彩色框标注病名与置信度,右侧面板同步给出症状与防治措施;检测记录自动写入CSV,统计页一键生成四类病害占比饼图;训练结束自动产出损失与精度曲线;内置防治建议文案库,检测命中即回填面板。 选型用YOLOv8n nano档,参数量约320万、权重约6.2MB,CPU单帧几十毫秒,小样本训练5到8分钟完成。数据由data_gen.py程序化绘制100张叶片图,固定随机种子,重跑分布一致,不依赖公开数据集。依赖全部锁版本,教程第7章整理了19条真实报错及排查方法,第8章给出换模型档、换PlantVillage数据集的迁移路径。 适合做计算机视觉方向课程设计或毕业设计的学生,也适合智慧农业方向想了解检测模型如何落进业务面板的学习者。不需要GPU,不需要系统学过目标检测,教程第3章会按需补齐原理。 使用时先pip install -r requirements.txt装好依赖,download_data.py下载预训练权重,data_gen.py生成样本后train.py训练,完成后用main.py infer批量检测或main.py gui启动界面。

探索底层硬件的神器:Rust-x86库

探索底层硬件的神器:Rust-x86库 在现代软件开发中,虽然高级语言带来了前所未有的开发效率和跨平台能力,但面对那些需要直接与硬件对话的场景,如系统内核开发、嵌入式编程以及性能优化时,开发者往往渴望更底层的控制力。今天,我们要推荐的是一款名为Rust-x86的开源库,它为那些追求极致的开发者开启了一扇直接操作x86/AMD64架构硬件的大门。 项目介绍 Rust-x86是一个用Rust编写的高效...

gitblog_00023的博客 1112

数据挖掘实战:决策树 + 聚类 + 关联规则,零 Key 离线可跑(Python 源码)

数据挖掘实战包。用 Python 标准库实现 CART 风格决策树、K-Means 聚类与 Apriori 关联规则,在虚构「星河便利店」会员表和购物篮上跑通分类、分群与购物篮分析,并给出准确率、轮廓系数、支持度/置信度/提升度。零第三方依赖、零 API Key 即可离线跑通。含 4 个样例、离线冒烟、中文 README(含「使用方法」)。均为作者原创可运行源码。MIT。作者 blog.youkuaiyun.com/mtl1994

Rust 与嵌入式开发:从硬件驱动到完整系统

引言在嵌入式开发领域,传统上 C 和 C++ 占据着主导地位。然而,随着技术的不断演进,Rust 作为一门新兴的编程语言,正逐渐崭露头角,为嵌入式开发带来了全新的思路与解决方案。Rust 语言凭借其独特的设计理念,在安全性、性能以及开发效率等方面展现出了显著的优势,尤其适用于对稳定性和可靠性要求极高的嵌入式系统开发场景。本文将深入探讨 Rust 在嵌入式开发中的应用,从硬件驱动的编写开始,逐步构建完整的嵌入式系统,展示 Rust 如何为嵌入式开发带来变革。

数字魔方操控师的博客 1448

科技中介服务机构在技术供需对接中如何实现服务流程的自动化与标准化?.docx

科技中介服务机构在技术供需对接中如何实现服务流程的自动化与标准化?

产业园区如何高效对接企业技术需求与高校科研成果?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

用 Rust 写嵌入式控制板:从硬件适配到固件部署的完整踩坑记录

Rust凭借其内存安全、零成本抽象和出色的性能,正在成为嵌入式开发的新宠。然而,从传统的C/C++转向Rust进行嵌入式开发时,你会遇到各种意想不到的坑。本文基于真实的开发经验,详细记录了从硬件选型、工具链配置、固件开发到部署的完整踩坑历程,希望能帮助你少走弯路。🚀在开始嵌入式Rust开发时,最常见的问题就是目标三元组(target triple)配置不对。 经验教训:不同的MCU需要不同的目标三元组。以下是常见映射:最初的二进制产物体积巨大,甚至超过了某些单片机的Flash容量。 坑的根源:嵌入式环境的

2401_85349622的博客 1168

国央企创新负责人如何快速掌握本地科技资源分布与匹配情况?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

用Rust探索RISC-V主板D1之GPIO

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 作者:山人几言 链接:https://www.zhihu.com/question/19704852/answer/19760467 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 如果是在已经适配好的linux内核上,那么相信已经有了完.

eydwyz的专栏 1191

国央企创新负责人如何实现科技成果的精准识别与高效筛选?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

高校技术转移办公室人员如何系统化管理科技成果信息?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

ICD10 openGauss版

ICD10 openGauss版

科技中介服务机构如何构建标准化、模块化的智能服务工具?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

产业园区运营负责人如何利用平台实现企业创新需求的精准分析与服务推送?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

fab-pm-optimizer-python-entry-py39-20261021-v1-1-0

fab-pm-optimizer-python-entry-py39-20261021-v1-1-0

PSIM-三相维也纳VIENNA整流器电压电流双闭环+中点电位平衡SVPWM控制仿真

内容概要:本文档详细介绍了一种基于PSIM软件实现的三相维也纳(VIENNA)整流器仿真模型,重点实现了电压电流双闭环控制与中点电位平衡的SVPWM调制策略。该仿真系统通过精确的控制算法有效提升了整流器的功率因数,降低了输入电流谐波含量,并解决了三电平拓扑中常见的直流侧中点电位偏移问题,具有较高的工程实用价值,适用于高效率、高功率密度的电力电子系统设计与科研验证。文档还整合了丰富的配套资源,涵盖多种电力电子变换器拓扑结构、先进控制算法及典型应用场景,形成了系统化的技术资料体系,有助于深入理解现代整流技术的核心原理与发展动态。; 适合人群:面向从事电力电子、电气工程、新能源变换系统等领域的科研人员、高校研究生以及具备一定仿真基础的工程技术人员。; 使用场景及目标:①深入研究三相VIENNA整流器的工作机理与控制特性;②掌握电压外环、电流内环双闭环控制结构的设计方法;③理解并实现SVPWM调制技术与中点电位平衡控制策略的协同作用;④开展相关控制算法的仿真验证、性能优化与实验对比,为高性能整流装置的研发提供理论支撑和技术原型。; 阅读建议:建议结合文中列出的其他仿真案例(如PWM整流器、LLC谐振变换器、DAB变换器等)进行横向对比学习,充分利用所提供的PSIM、MATLAB/Simulink等多平台仿真资源,重点关注控制逻辑与主电路的耦合关系,通过参数调试与波形分析深化对系统动态响应和稳态性能的理解,强化“理论—建模—仿真—优化”的闭环研究能力。

高校技术转移办公室人员在推动成果转化落地过程中,如何实现科技成果的高效推介与价值评估?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

产业园区运营负责人如何利用数智工具提升园区企业的技术对接效率?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

上一篇: Rust调试技巧全解析:5个你必须掌握的GDB和LLDB核心用法
下一篇: 如何用Rust 6个月打造一款跨平台2D游戏?完整开发流程曝光
VarFun
博客等级 码龄1年 151粉丝 1977原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值