使用 Swift 创建嵌入式软件

为微控制器等设备开发高效、可靠的固件

  • 安全 在编译时消除缓冲区溢出和空指针崩溃,确保您的固件可靠且稳健。
  • 可互操作 无需包装器或运行时粘合代码,即可重用现有的 C/C++ 驱动程序和 SDK,几分钟内完成集成。
  • 小巧 生成以千字节计的有意义的程序,能够在资源受限的设备上运行,没有隐藏开销。
开始使用

支持多种嵌入式平台

A sample Swift code snippet with a blinking microcontroller next to it
  • 与 Raspberry Pi Pico SDK 集成 利用无缝互操作性,直接从您的 Swift 代码中使用 Pico SDK 的现有 API。 打开指南
  • 在 STM32 芯片上实现裸机运行 为了获得最大控制权,您可以完全裸机运行并使用 Swift MMIO 来操作硬件设备。 打开指南

Embedded Swift 不限于特定的硬件设备或平台。它具有很强的通用性,可以与现有的 SDK 和构建系统集成, 也可以用于纯裸机开发。Swift 工具链可以支持大多数常见的 ARM 和 RISC-V 芯片。

了解更多关于与其他平台和构建系统的集成

探索示例项目

  • Harmony
    Harmony 蓝牙音箱 使用 Raspberry Pi Pico W 构建带有铁磁流体可视化效果的蓝牙音箱。 了解更多
  • Matter 和 HomeKit 智能灯
    Matter 和 HomeKit 智能灯 使用 ESP32 微控制器实现可通过 HomeKit 控制的 Matter 智能灯配件。 了解更多
  • 交互式 UI 示例 使用流行的嵌入式图形库 LVGL 在 STM32 开发板上构建具有丰富 UI 和触摸输入功能的项目。 了解更多
  • PlaydateKit
    PlaydateKit 使用 PlaydateKit 创建交互式游戏,它为 Playdate 游戏机提供了易于使用的 Swift 绑定。 了解更多
在 Github 上探索更多 Swift 嵌入式示例和模板

深入嵌入式 Swift

探索嵌入式 Swift 如何将泛型、协议和异步/等待等 Swift 特性定制为固件优化的编译模式,为裸机设备生成具有可预测性能的紧凑二进制文件。

了解更多

阅读博客

  • 各种嵌入式开发板
    在微控制器上开始使用嵌入式 Swift 通过使用新的嵌入式 Swift 编译模式的实际示例,了解 Swift 如何在 ARM 和 RISC-V 微控制器上运行。 阅读更多
  • 灰度风格的打砖块游戏
    Swift 小游戏:为 Playdate 构建微型游戏 了解如何使用 Swift 在 Playdate 上构建微型游戏,包括完整源代码、硬件演示和嵌入式 Swift 的深入探讨。 阅读更多
阅读更多

符合人体工程学且性能优异

通过 Swift-MMIO 的类型安全、表达力强的 API,您可以自信地访问硬件寄存器。您的 Swift 代码会被编译成最小化、高效的机器码——为嵌入式开发者提供所需的强大功能和正确性。

了解更多
符合人体工程学且性能优异

挤进最小的空间

仅用 788 字节的编译后代码,Embedded Swift 就能在 Playdate 掌机上运行康威生命游戏——将高级抽象与低级位操作完美结合,实现实时动画效果。

了解更多
/// Updates each pixel of the current row based on
/// the surrounding rows in the previous frame.
func update(above: Row, current: Row, below: Row) {
  var byte: UInt8 = 0
  var bitPosition: UInt8 = 0x80
  for column in 0..<Frame.columns {
    let sum = above.sum(at: column)
      + current.middleSum(at: column)
      + below.sum(at: column)
    let isOn = current.isOn(at: column)
    if sum == 3 || (isOn && sum == 2) {
      byte |= bitPosition
    }
    bitPosition >>= 1
    if bitPosition == 0 {
      self[Int(column / 8)] = ~byte
      byte = 0
      bitPosition = 0x80
    }
  } 
}
一台 Playdate 设备