Zig Blinky 示例

功能说明

该示例演示如何在 Zig 中通过 arcs.Gpio 打开设备、配置输出引脚并周期性翻转板载 LED。它是一个典型的“设备 HAL + 定时休眠”入门示例,适合快速理解 Zig 侧如何访问 ARCS SDK 的 GPIO 设备框架。

硬件连接

该示例面向 arcs_evb 板载 LED。

  • 设备: gpiob

  • 引脚: PAD_B[9]

  • 现象: LED 以 500ms 周期翻转,共切换 20 次

示例步骤

  1. 初始化 Zig 日志系统

  2. 打开 gpiob 设备

  3. PAD_B[9] 配置为 GPIO 输出

  4. 循环调用 toggle() 翻转 LED

  5. 通过 arcs.sleep(500) 控制闪烁节奏

  6. 输出结束日志并返回

编译

重要提示:在编译前,请先确认您使用的开发板型号。SDK 目前支持以下开发板:

  • arcs_evb - ARCS EVB 评估板

  • arcs_mini - ARCS Mini 开发板

根据您的开发板型号,选择对应的编译命令:

在 SDK 根目录执行编译:

# 使用 arcs_evb 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_evb

# 或使用 arcs_mini 开发板
./build.sh -C -S samples/<示例路径> -DBOARD=arcs_mini

Note

确保已安装对应的工具链。

建议将示例路径替换为:

./build.sh -C -S samples/libraries/zig/blinky -DBOARD=arcs_evb

烧录

编译完成后,使用 SDK tools 目录下的 cskburn 工具烧录固件:

./tools/burn/cskburn -s /dev/ttyUSB0 -b 3000000 0x0 build/arcs.bin -C arcs

Note

烧录参数说明

  • -s /dev/ttyUSB0:串口设备路径,需要根据实际情况修改 - Linux 系统:通常是 /dev/ttyUSB0/dev/ttyACM0 - 可通过 ls /dev/tty* 命令查看可用串口设备 - 不同开发板或 USB 转串口芯片可能使用不同的设备名

  • -b 3000000:烧录波特率(3Mbps)

  • 0x0:烧录起始地址

  • build/arcs.bin:编译生成的固件路径

  • -C arcs:芯片类型

注意事项

  • 确保开发板已正确连接到电脑

  • 如果无法识别串口设备,请检查 USB 连接线是否正常,或尝试其他 USB 端口

预期输出

串口中可看到类似日志:

=== Zig Blinky Demo ===
Calling zig_blinky_main()...
Blinky starting — opening gpiob...
gpiob opened successfully
LED pin 9 configured as output
LED ON  (toggle #0)
LED OFF (toggle #1)
...
Blinky done — 20 toggles completed
=== Zig Blinky PASSED ===

同时板载 LED 会持续闪烁约 10 秒。

在 CI 真机验证中,样例通过条件以串口出现 === Zig Blinky PASSED === 为准,而不是依赖人工观察 LED 现象。

核心 API

API

说明

arcs.Gpio.open()

打开 GPIO 设备

gpio.configOutput()

配置输出引脚

gpio.toggle()

翻转输出电平

arcs.sleep()

毫秒级休眠

关键代码

var gpio = arcs.Gpio.open("gpiob") catch return -2;
const LED_PIN: u32 = 9;

gpio.configOutput(LED_PIN, .{ .init_high = false }) catch return -3;

var count: u32 = 0;
while (count < 20) : (count += 1) {
    gpio.toggle(LED_PIN) catch {};
    arcs.sleep(500);
}

注意事项

  • 板型依赖: 当前引脚号和设备名依赖 arcs_evb 板级配置

  • 移植调整: 若切换到其他板型,需要同步调整 LED 对应设备和引脚

  • 覆盖范围: 示例主要验证 Zig GPIO HAL 的基础可用性,不覆盖输入、中断等高级模式