news 2026/8/29 9:19:51

Windows on Arm开发实战:ARM64环境搭建与x86迁移避坑指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Windows on Arm开发实战:ARM64环境搭建与x86迁移避坑指南

最近一段时间,Windows on Arm 相关的消息明显密集了起来。微软在官方生态盘点中再次梳理了 Windows on Arm 的进展,英伟达 RTX Spark 也被纳入阵营,多家 OEM 计划在今年秋季上线新一代 Arm PC。对普通用户来说,这可能只是“笔记本续航变长”的一条新闻;但对开发者而言,这背后是芯片架构、应用分发、驱动模型、开发工具链和部署基础设施的连锁变化。本文不打算复述发布会,而是从开发者角度拆解这次进展,讲清楚 Windows on Arm 的技术背景、生态现状、开发环境搭建方法,以及从 x86 迁移到 Arm 平台时容易踩的那些坑。

读完这篇文章,你会搞清楚几个问题:Windows on Arm 和传统 Windows 电脑到底有什么本质区别;什么是 arm64 原生应用,什么是模拟层;开发者在 Arm Windows 上如何搭建 WSL、Docker、QEMU 等常用环境;以及当自己或团队遇到“程序装不上、跑不动、编译失败”时,该按什么顺序排查。内容尽量贴近实际开发场景,命令和配置都给出可复制的示例,但也会提醒你根据实际版本和网络环境调整。

1. Windows on Arm 是什么,为什么现在关注度飙升

1.1 从“高功耗 x86 笔记本”到“Arm PC”的转变

传统 Windows 笔记本绝大多数使用 x86/x64 架构的 Intel 或 AMD 处理器,而 Windows on Arm 指的是 Windows 操作系统运行在采用 Arm 架构处理器的设备上。Arm 架构过去更多出现在手机、平板、嵌入式设备和服务器场景,特点是功耗低、能效比高,但对软件兼容性要求更高。

Windows 尝试进入 Arm 生态并非新鲜事,早期 Windows RT 因为应用数量太少而失败,后续 Windows 10 时期又开始支持骁龙平台,但性能和兼容性一直不尽如人意。直到最近两年,高通 Snapdragon X 系列芯片的出现,才让 Windows on Arm 在性能上真正有了可比性。微软这次盘点又把英伟达 RTX Spark 和多家 OEM 秋季新品拉到一起,说明 Arm PC 不再只是“办公本”“上网本”的概念,而开始向更完整的桌面生态演进。

1.2 x86 和 Arm 的核心区别

教科书上会把 x86 称为复杂指令集计算(CISC),把 Arm 称为精简指令集计算(RISC),这是两者最直观的差异。但对开发者来说,更重要的区别在于软件生态的构建方式不同:x86 经过几十年积累,几乎所有软件都有现成的安装包,驱动、运行库、杀毒软件、输入法都能直接装;Arm 虽然指令更简洁、能效更优,但大量软件需要专门为 arm64 编译,或者通过翻译层运行。

另一个容易被忽略的差异是驱动模型。Windows 上跑的普通应用可以通过兼容层翻译执行,但内核驱动不行,必须在 Arm 环境下重新编译适配。这就是为什么老打印机、老网卡、老安全软件在 Arm PC 上经常出现“识别不到设备”或“驱动安装失败”的原因。现代 Arm 和 x86 处理器虽然在微架构层面已经互相借鉴,指令集边界没有教科书那么泾渭分明,但应用分发和驱动适配的生态鸿沟依然是真实存在的。

1.3 微软此次盘点的关键信号:RTX Spark 与多厂商秋季新品

这次盘点最值得开发者关注的是芯片层的变化。过去 Windows on Arm 几乎是高通一家独大,而英伟达 RTX Spark 的入局,最有想象力的部分不是“又多了一块 GPU”,而是把英伟达在图形计算、CUDA 生态和 AI 推理加速方面的能力带到了 Arm 平台。如果独立 GPU 和对应的软件栈能在 Arm Windows 上落地,Windows on Arm 就不再只是“轻薄长续航办公本”的定位,而可能延伸到内容创作、端侧推理甚至轻度工作站场景。

与此同时,多家 OEM 厂商计划在今年秋季上线 Arm PC,意味着市场会从“单一芯片、单一品牌的尝鲜产品”变成“多品牌、多形态、多渠道供应”的成熟品类。对开发团队来说,测试设备的可选择性会明显增加,不用再守着某一台开发机做兼容性验证,这是一个非常积极的信号。

2. 进展拆解:芯片、系统、应用生态的变化

2.1 芯片层:不止是高通,英伟达 RTX Spark 入场

芯片是 Windows on Arm 生态的底座。高通 Snapdragon X 系列已经证明了 Arm 芯片在 Windows 上的日常性能和 AI 算力,而英伟达的加入则补足了另一个关键短板:图形和通用计算能力。RTX Spark 这个名字背后是一整套显卡产品线和软件生态,它进入 Arm PC 的意义在于,开发者未来可能不再只用集成显卡跑 Web 渲染和视频解码,而是可以在 Arm 平台上做更重的 GPU 加速任务。

当然,这里需要理性看待。独立显卡进入 Arm 笔记本并不等于所有 Windows 软件都能自动识别和调用 GPU,还需要英伟达提供完整的 ARM64 驱动和运行时,也需要应用自身针对 arm64 平台做适配。不过从微软官方的生态盘点来看,这个方向已经被纳入正式路线图,接下来的版本更新和驱动迭代会逐步把这块拼图补齐。

2.2 系统层:Windows 11 与新的模拟层机制

Windows on Arm 的应用兼容思路可以概括为“能原生就原生,不能原生就模拟”。微软在 Windows 11 的后续大版本更新中,把模拟层升级为 Prism,它会将 x86 和 x64 应用翻译成 Arm 指令集执行。这个翻译过程对用户是透明的,传统 Windows 软件大多可以正常安装和启动,但性能会有一定折扣,尤其是 x64 应用在翻译执行时损失更明显。

系统层的另一个重要改进是驱动分发。Windows 更新已经能更好地识别 Arm 设备的固件和驱动包,OEM 可以像 x86 设备一样通过 Windows Update 推送驱动,减少用户手动找驱动安装包的痛苦。对于开发者来说,这意味着测试镜像、系统重置、设备迁移的流程会逐步和普通 Windows 电脑一致,不会再因为驱动问题而无法完成环境初始化。

2.3 应用层:办公、浏览器、开发工具现状

目前主流办公软件和浏览器基本都有原生 arm64 版本。Microsoft Office、Edge、Chrome、Firefox 都提供了针对 Arm 平台的安装包,日常办公和网页开发问题不大。Microsoft Store 也会自动根据设备架构选择下载 arm64 版本,大部分情况下不需要用户手动判断安装包类型。

开发工具链同样在快速补齐。Visual Studio Code 有原生 arm64 安装包,Visual Studio 2022 也提供了 ARM64 版本。.NET、Python、Node.js、OpenJDK 等主流运行时均支持 win-arm64。WSL2 在 Arm Windows 上运行的是原生 ARM64 Linux,安装 Ubuntu 或其他发行版后可以直接跑 arm64 包,这对后端和运维开发非常关键。Docker Desktop 也有 arm64 安装包,配合 WSL2 后可以构建和运行 arm64 容器镜像。

不过,仍有一批工具“名义上能用,实际上体验一般”,尤其是旧版 Windows 桌面插件、部分加速器、输入法以及依赖内核驱动的安全软件。这些工具的适配进度取决于厂商投入,和系统本身关系不大。

2.4 硬件层:秋季 Arm PC 意味着什么

多厂商在秋季上线 Arm PC,意味着市场将进入“多芯片、多品牌”的阶段。对用户来说,笔记本的选择不再只有高通一个选项,而是可以根据性能、屏幕、接口、价格去挑选。对开发者来说,这意味着需要测试的设备矩阵会扩大,兼容性验证不能只看单一平台。

如果团队计划在年底采购开发机,建议提前留意以下几个方面:是否有官方 arm64 驱动;是否支持 WSL2 和 Hyper-V;BIOS 是否提供固件更新渠道;以及厂商是否承诺后续 Windows 大版本更新的完整支持。这些因素会比单纯看 CPU 跑分重要得多,因为开发机器的核心价值是“环境可复现、问题可排查、系统可维护”。

3. 开发者视角:Arm Windows 开发环境搭建

3.1 先确认你的系统是什么架构

在折腾任何环境之前,首先要确认自己当前运行的是不是 Arm 架构,以及应用是在原生模式还是模拟模式下运行。Windows 上最直接的方法是查看环境变量。

在 PowerShell 中运行:

# 查看当前 Windows 系统的架构 $env:PROCESSOR_ARCHITECTURE

如果输出是ARM64,说明当前系统是 64 位 Arm 架构。如果输出是AMD64,说明系统是传统 x64 架构。也可以使用systeminfo命令查看,输出中会有一行类似System Type: ARM-based PCx64-based PC的信息。

任务管理器也能帮我们判断应用是否运行在模拟层。打开任务管理器,切换到“详细信息”标签页,右键表头选择“选择列”,勾选“架构”。如果看到某个进程显示x64,而系统本身是 ARM64,那么这个进程就是通过模拟层运行的;如果显示Arm64,则是原生 arm64 进程。

3.2 安装 WSL2 与容器运行环境

WSL2 是 Windows on Arm 上最值得优先搭建的开发环境。它运行的是原生 ARM64 Linux,相比在 x86 上模拟虚拟机,性能和兼容性都要好得多。在管理员 PowerShell 中执行:

wsl --install

安装完成后,可以在 WSL 终端中检查架构:

uname -m

在 Arm 架构的 Windows 主机上,WSL 内通常会输出aarch64,说明当前 Linux 内核和用户空间都是 Arm64 版本。

Docker Desktop 在 Windows on Arm 上同样建议安装。安装时留意官网是否提供 arm64 版本,安装完成后可以执行:

docker info --format '{{.Architecture}}'

如果输出aarch64,说明 Docker 引擎运行在 Arm 原生模式下。拉取镜像时建议显式指定平台,避免拉到不匹配的镜像:

docker pull --platform=linux/arm64 alpine

3.3 在 Arm Windows 上安装原生开发工具

安装开发工具时,最容易踩的坑是“下载了 x64 安装包,Windows 也能装,但实际跑起来是在模拟层”。所以统一原则是:优先从官网或 Microsoft Store 下载带 arm64 标识的版本

以 VS Code 为例,官网下载页面通常会提供多个安装包,选择User Installerarm64版本。Python 安装包则要选择Windows arm64版本。Node.js 同样提供 win-arm64 的.msi.zip。Visual Studio 2022 在安装器中会显示是否为 ARM64 版本,选中后可以继续安装 C++ 桌面开发、.NET 桌面开发等工作负载。

安装完成后,可以用一个简单的命令验证工具链是否原生:

node -p "process.arch"

如果输出arm64,说明当前 Node.js 是原生 arm64 进程。

3.4 通过 QEMU 模拟 ARM 环境做嵌入式调试

如果你平时做嵌入式开发,又手头暂时没有 Arm 开发板,可以使用 QEMU 在 Windows 上模拟 ARM 环境。QEMU 是一个开源模拟器,支持系统级模拟和用户态模拟两种模式。

Windows 下可以通过 winget 安装:

winget search qemu winget install --id QEMU.QEMU -e

安装完成后,可以使用系统级模拟启动一个 ARM64 Linux 虚拟机。下面是一个示意命令,需要提前准备好 ARM64 的内核镜像和根文件系统:

qemu-system-aarch64 -M virt -cpu cortex-a57 -smp 2 -m 2048 -nographic -kernel Image -drive file=rootfs.img,format=raw

这里-M virt表示使用虚拟化平台,-cpu cortex-a57指定 CPU 型号,-smp 2配置两个 CPU 核,-m 2048分配 2GB 内存,-kernel-drive分别指定内核和根文件系统。对于快速验证单个 ARM64 Linux 可执行文件的场景,也可以使用用户态模式:

qemu-aarch64 ./hello_arm64

用户态模式不需要完整操作系统,在 x86 电脑上也能直接运行 ARM64 Linux 编译产物,适合在 CI 或者日常开发中做快速冒烟测试。

4. 交叉编译:在 x86 电脑上生成 Arm 程序

4.1 交叉编译解决什么问题

所谓交叉编译,就是在一种架构的机器上,编译生成另一种架构上运行的二进制程序。典型场景是:开发机是 x86 Windows,但目标设备是 ARM Linux 开发板,或者目标是 Windows on Arm 设备。如果没有交叉编译,就需要在目标设备上安装整套编译工具链,这对于开发板、服务器或者受控设备来说往往很不现实。

理解交叉编译后,你就能把“构建环境”和“运行环境”解耦。开发和编译在性能更强的 x86 机器上完成,最终产物复制到 Arm 设备上运行。对于 Windows on Arm 生态来说,这也意味着开发者不需要强迫自己先买一台 Arm PC,也可以为 Arm 平台生成原生程序。

4.2 使用 GNU 工具链交叉编译到 ARM Linux

以 Ubuntu/WSL 环境为例,编译一个 ARM64 Linux 程序需要安装交叉编译工具链:

sudo apt update sudo apt install -y gcc-aarch64-linux-gnu

编写最简单的 C 程序,文件名为hello.c

#include <stdio.h> int main(void) { printf("Hello Arm64!\n"); return 0; }

使用交叉编译工具链编译:

aarch64-linux-gnu-gcc hello.c -o hello_arm64

编译完成后,用file命令查看产物类型:

file hello_arm64

正常情况下会看到类似输出:

hello_arm64: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV)

在 x86 机器上直接运行这个文件会提示Exec format error,因为当前内核无法识别 ARM64 指令集。如果安装了qemu-user-static,则可以通过 QEMU 用户态模式运行:

qemu-aarch64 ./hello_arm64

输出:

Hello Arm64!

这就是交叉编译和模拟执行配合工作的完整示例。

4.3 嵌入式方向的 Arm Compiler 和 MCU 工具链

很多开发者接触“Arm 编译器”是从嵌入式方向开始的,比如 Arm Compiler for Embedded 5/6、arm-linux-gnueabihf-gcc 等。这些工具链面向的是 Cortex-M、Cortex-R 等 MCU,芯片上没有完整操作系统,编译产物通常是要烧写到 Flash 里的固件。

这里要特别提醒:这些嵌入式工具链和 Windows on Arm 的 arm64 应用工具链完全不是一回事。前者面向裸机或 RTOS 环境,后者面向通用操作系统;前者的目标是.hex.bin固件,后者的目标是.exe或系统库;前者的调试方式是 JTAG/SWD,后者的调试方式是 Visual Studio 或 VS Code 的远程调试。配置环境时不要把两者混用,否则很容易出现“编译器版本不对”“目标文件无法运行”等奇怪的坑。

4.4 检查生成文件的架构

当你不确定手里某个.exe.dll到底是 x86、x64 还是 arm64 时,可以写一个简单的 PowerShell 脚本解析 PE 文件头。PE 文件的头部包含 Machine 字段,对应关系如下:0x014c 表示 x86,0x8664 表示 x64,0xAA64 表示 Arm64,0x01c4 表示 ARM。

$path = "C:\path\to\app.exe" $bytes = [System.IO.File]::ReadAllBytes($path) $peOffset = [BitConverter]::ToInt32($bytes, 0x3C) $machine = [BitConverter]::ToUInt16($bytes, $peOffset + 4) switch ($machine) { 0x8664 { "x64" } 0x014c { "x86" } 0xAA64 { "Arm64" } 0x01c4 { "ARM" } default { "Unknown: 0x{0:X}" -f $machine } }

$path换成实际文件路径,运行后就能快速判断当前文件属于哪种架构。这个脚本在排查“为什么这个程序在 Arm 设备上跑得慢”或“为什么提示架构不兼容”时非常实用。

5. 常见问题与排查思路

5.1 程序安装或启动报错

在 Windows on Arm 上,最常遇到的问题是应用无法安装、安装后无法启动、启动后闪退,或运行时性能异常。

如果程序安装包本身支持 x64 模拟,但安装后无法启动,可以先用任务管理器查看进程架构,确认程序是否运行在模拟层。如果程序是 x64 进程且频繁崩溃,通常是应用使用了较新的指令集或依赖了不受模拟层支持的内核 API。解决办法是检查官网是否提供 arm64 版本,或者升级到最新版本看是否适配了 Arm 平台。

如果程序提示“系统找不到指定的路径”或“缺少 DLL”,则要考虑是否只复制了主程序而没有复制完整的运行库。Windows on Arm 的模拟层可以翻译执行大多数用户态代码,但 VC++ 运行库、DirectX 运行库等仍需要正确安装对应架构版本。

5.2 驱动、外设与打印问题

驱动是 Windows on Arm 兼容性最大的短板之一。普通应用可以被翻译执行,但驱动必须针对 Arm 重新编译,所以如果你的设备依赖老牌硬件厂商的专用驱动,很可能在 Arm PC 上无法使用。

遇到外设无法识别时,先查看设备管理器里是否有“未知设备”或带黄色感叹号的设备。右键查看硬件 ID,再搜索该硬件 ID 是否支持 arm64 驱动。如果没有官方驱动,可以考虑换用支持通用类驱动的设备,比如 USB 键盘鼠标、标准 UVC 摄像头等。

打印机问题尤其常见。很多打印机厂商只维护 x64 驱动,Arm Windows 上要么使用系统自带的通用打印机驱动,要么通过厂商云打印方案解决。部署到企业环境时,建议先列出现有外设清单,逐一评估驱动兼容性,避免采购后才发现无法使用。

5.3 开发工具链与中间件问题

开发环境中常见的问题是工具链架构不匹配。比如在 Arm Windows 上安装了 x64 版本的 JDK,虽然能运行,但进程跑在模拟层,性能会打折扣。解决思路是统一安装 arm64 版本的 JDK、Python、Node.js,并检查环境变量是否指向了正确路径。

另一个典型问题是中间件安装。比如 Redis 在 Windows 上原本就没有官方原生支持,在 Arm Windows 上更是如此。更可靠的方案是使用 WSL2 或 Docker 运行 Linux 容器,例如:

docker run -d --name redis -p 6379:6379 redis:7

这样做的好处是环境与 Linux 服务端一致,也方便后续迁移到云服务器。

5.4 兼容性排查清单

遇到兼容性问题时,可以按照以下顺序逐步排查:

问题现象常见原因解决思路
程序无法安装安装包仅支持 x86/x64,或缺少对应运行库查找 arm64 安装包,安装对应架构的 VC++ 运行库
程序能启动但明显卡顿程序以 x64 模式运行在模拟层查看任务管理器进程架构,优先使用原生 arm64 版本
外设驱动安装失败驱动未提供 arm64 版本查看硬件 ID,查找厂商 arm64 驱动或更换兼容设备
Docker 拉取镜像平台不对镜像没有 arm64 分层,或未指定平台使用--platform=linux/arm64拉取多架构镜像
WSL 启动失败WSL 内核或虚拟化组件未正确安装执行wsl --update,确认 BIOS 开启虚拟化
MSVC 无法编译 ARM64 程序Visual Studio 缺少 ARM64 构建工具在 VS Installer 中勾选 ARM64 相关组件

排查时建议先做两件事:确认系统架构,确认进程架构。这两种信息能快速筛掉一半的“环境问题”。

6. 最佳实践与工程建议

6.1 优先采用原生 arm64 软件

在 Windows on Arm 上,性能差距最大的场景不是浏览器和办公软件,而是计算密集型的开发工具链。同样是编译前端项目,Node.js 运行在模拟层和原生层的耗时可能相差数倍。因此建议团队建立一个“必要工具清单”,凡是经常执行的开发工具,都尽量寻找 arm64 版本。

具体做法是,在构建脚本或安装文档中明确写出每个工具的下载要求和校验方式,避免同事随手下载了 x64 版本。在 CI 流水线里也可以加入架构检查步骤,统一保证拉取到的依赖包和环境一致。

6.2 多架构镜像与 CI 构建策略

容器镜像是最容易实现多架构支持的一环。使用 Docker Buildx 可以在一次构建中同时生成 amd64 和 arm64 镜像,并自动推送到镜像仓库。

docker buildx build --platform linux/amd64,linux/arm64 -t your-registry/demo:latest --push .

这种方式对 Windows on Arm 非常有价值:开发者在 Arm 笔记本上构建镜像,CI 服务器在 x86 上构建,最终产出的镜像同时覆盖两种架构,部署时可以根据目标机器自动拉取对应平台镜像。

如果团队的应用是纯 Java、Python、Go 等跨语言运行时,多架构镜像的成本很低。如果是 C++ 或包含本地库的项目,则需要把 arm64 编译加入持续集成矩阵,尽早暴露交叉编译问题。

6.3 数据库与中间件尽量容器化

在 Windows on Arm 上,直接安装 MySQL、PostgreSQL、Redis 等中间件往往面临“没有官方 arm64 Windows 包”的问题。更稳妥的做法是统一使用 Docker 或 WSL2 运行。

生产环境部署时,也应优先考虑云数据库或容器化方案,避免被本地操作系统的架构绑定。数据库属于有状态服务,任何变更前都必须做好备份,迁移前建议先在小规模测试环境验证导出导入流程,再对生产库执行变更操作。权限方面坚持最小权限原则,不要用 root 或管理员账号跑日常任务。

6.4 给 AI 与边缘侧应用的提醒

如果团队正在做端侧 AI 推理或边缘计算,Windows on Arm 值得重点关注。Arm 芯片通常集成 NPU,在能效比上比传统 x86 平台更适合持续运行推理任务。英伟达 RTX Spark 入局后,GPU 加速方案也有了更多可能。

但 AI 落地不能只看硬件。首先要确认推理框架是否支持 arm64 Windows,比如 PyTorch、ONNX Runtime 的 Windows arm64 轮子是否齐全;其次要确认驱动和运行时的授权方式;最后要在目标设备上做完整性能测试,不能简单拿 x86 的基准测试数据外推。部署到生产环境前,还要把模型文件、权重、推理日志统一纳入版本管理,保证环境可复现。

7. 总结与后续学习路线

7.1 本文核心收获

回到微软这次盘点的主题,Windows on Arm 已经从“能不能跑”进入“好不好用”的阶段。芯片厂商增多,英伟达 RTX Spark 入局,OEM 秋季新品也有了明确时间表,

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/29 9:18:40

双STM32协同设计实战:通信、电源与调试全解析

1. 为什么一块板上要塞两颗STM32&#xff1a;这事的真实动机 先讲个场景。上个月我在调一块带无刷电机驱动的传感器采集板&#xff0c;主控用的是一颗STM32F103&#xff0c;跑着三路PID闭环。电机的PWM一开&#xff0c;电流采样中断偶尔会抖&#xff0c;本来2kHz的采样率硬被挤…

作者头像 李华
网站建设 2026/8/29 9:18:12

YOLOv8+PyTorch花卉识别毕设实战:从环境搭建到模型部署

每年到毕业季&#xff0c;都能看到大量花卉识别的毕设题目。这个方向看起来简单&#xff0c;但真正动手时很多同学会卡在同一个地方&#xff1a;网上教程要么只讲“调包运行”&#xff0c;代码跑完却讲不清原理&#xff1b;要么从 CNN 一路讲到 Transformer&#xff0c;一百多页…

作者头像 李华
网站建设 2026/8/29 9:17:01

AI Agent自主开发浏览器游戏:从自动生成到部署上线的完整流程

之前看到 “Show HN: My AI agent built and shipped a browser game on its own” 这个标题时&#xff0c;我的第一反应不是“AI 又能写游戏了”&#xff0c;而是“它到底是怎么把‘写代码、跑测试、部署上线’这一整条链路自己走完的”。因为写一个网页游戏并不难&#xff0c…

作者头像 李华
网站建设 2026/8/29 9:14:51

Kotlin object是懒汉还是饿汉?拆解单例实现机制与JVM初始化真相

上个月面了一个做 Android 的候选人&#xff0c;项目经历里把 Kotlin 写得很熟练&#xff0c;聊到单例的时候我随口问了句&#xff1a;“Kotlin 的 object 声明是懒汉还是饿汉&#xff1f;”他明显愣了一下&#xff0c;然后开始背&#xff1a;object 在类加载时初始化&#xff…

作者头像 李华
网站建设 2026/8/29 9:14:37

DAC数模转换器原理与应用:从权电阻网络到实战波形发生器

1. 从数字到模拟&#xff1a;DAC究竟在做什么&#xff1f; 如果你玩过单片机或者FPGA&#xff0c;肯定对GPIO口输出高电平&#xff08;3.3V或5V&#xff09;和低电平&#xff08;0V&#xff09;再熟悉不过了。这就是数字世界的语言&#xff0c;非0即1&#xff0c;非黑即白。但现…

作者头像 李华