Rust 与 C/C++ 嵌入式的比较

相同点

  • 生成的目标文件都是二进制文件,也可生成 elf/hex/asm 文件
  • bin 文件的内容结构大体一致,都分为 text/bass/data
  • 单片机的启动原理一致,都是从中断向量表的 reset 向量执行,然后初始化数据段,bss段等内容
  • 都需要链接脚本文件链接所有目标文件
  • 应用层通常都从 main 函数中开始运行
  • 都可以由中断触发进入中断服务函数
  • 都能直接操作硬件寄存器
  • 都有裸指针操作内存或外设寄存器

差异

  • Rust 通常直接操作外设的寄存器,rust 可能会认为 unsafe, 需要特别标记
  • Rust 推荐使用 pac 抽象层来操作外设寄存器
  • Rust 的外设驱动抽象通常有统一的标准接口,便于移植
  • Rust 的外设驱动比较抽象,但执行依旧高效,且安全,能尽最大能力保证硬件与软件的统一性,避免软件对硬件进行非法复用操作
  • Rust 提供了大量的线程安全的标准库
  • Rust 除裸指针外,也有胖指针,切片等更安全更高抽象的指针,且运行依旧高效