类型化 factory、静态实例与多态接口面¶
当前平台保留类型化工厂查找和 C 多态。配置生成精确实例;factory 查找只返回它们,不构造、初始化、加锁或探测。硬件启动和请求执行是各自显式动作。
FIG-04 表示当前身份结构。控制器与子端点端点有不同接口和 ID,即使实现共享同一物理总线。
生成器拥有的责任¶
一份 schema-2 TOML 选择实例名、绑定、模式和精确容量。严格解析器产生类型化 IR;生成器发布只读接口面、共享 ops 引用、独立私有上下文、固定 IRQ 接线和紧凑获取函数。Native 装配同样取得独立模型状态;测试单例不是生产实例生成机制。
每次装配生成自己的 nexus_factory.h,其 ID 不是通用头文件或持久编号。默认 ID 是紧凑 uint16_t alias 和具名常量。COUNT、无效和未选择项返回 NULL。可选名义强类型 ID 与 capability 记录必须明确配置;芯片能力记录不授予 Board 路由或物理资格。
一次调用执行什么¶
动作 |
实际工作 |
|---|---|
|
选择并返回已有只读 UART 接口面 |
|
执行选定初始化,保留清理结果 |
公共 I/O 操作 |
验证接口面,再分发 |
IRQ 入口 |
访问固定具体提供者和其拥有的硬件 |
显式 service/wait |
推进或观察选定生命周期 |
停止 |
按合同关闭/排空;不能提前收回仍在借用的存储 |
产品可在提供者存储生命周期内保留接口面。停止硬件不会撤销指针,也不会同步调用方。应用必须确保调用方与发布者停止访问并完成必要同步,才能回收外部 adapter 存储。获取函数不改变模式或悄悄取得执行所有权。
验证生成设计¶
以下完整维护装配选择独立 Native 实例:
schema = 2
board_package = "multi_board"
backend = "native"
clock = "model"
[factory]
capabilities = true
[memory]
main_stack_bytes = 2048
libc_heap_bytes = 0
[gpio.led_a]
binding = "led0"
mode = "output"
[gpio.led_b]
binding = "led1"
mode = "output"
[uart.link_a]
binding = "uart0"
mode = "irq"
baud = 115200
[uart.link_a.rx]
format = "events"
capacity = 4
[uart.link_a.irq]
priority = 5
[uart.link_b]
binding = "uart1"
mode = "irq"
baud = 115200
[uart.link_b.rx]
format = "events"
capacity = 4
[uart.link_b.irq]
priority = 5
[spi.bus_spi_a]
binding = "spi0"
mode = "short-poll"
[spi.bus_spi_b]
binding = "spi1"
mode = "short-poll"
[spi_device.sensor_spi_a]
controller = "bus_spi_a"
model_bytes = 64
[spi_device.sensor_spi_b]
controller = "bus_spi_a"
model_bytes = 64
[spi_device.sensor_spi_c]
controller = "bus_spi_b"
model_bytes = 64
[i2c.bus_i2c_a]
binding = "i2c0"
mode = "poll-messages"
[i2c.bus_i2c_b]
binding = "i2c1"
mode = "poll-messages"
[i2c_device.sensor_i2c_a]
controller = "bus_i2c_a"
model_bytes = 64
address = 80
[i2c_device.sensor_i2c_b]
controller = "bus_i2c_a"
model_bytes = 64
address = 81
[i2c_device.sensor_i2c_c]
controller = "bus_i2c_b"
model_bytes = 64
address = 80
[flash.flash0]
binding = "flash0"
mode = "poll-byte"
[watchdog.watchdog0]
binding = "watchdog0"
mode = "independent"
[exti.exti0]
binding = "exti0"
mode = "edge-event"
edge = "both"
event_capacity = 4
[exti.exti0.irq]
priority = 5
[pwm.pwm0]
binding = "pwm0"
mode = "fixed-pwm"
period_ticks = 1000
duty_ticks = 0
tick_hz = 1000000
[adc.adc0]
binding = "adc0"
mode = "low-rate-scan"
channels = [8, 9]
sample_times = [7, 7]
reference_mv = 3300
异步教程运行完整生成 factory 可执行文件,验证冷态查找、共享 ops 下的独立上下文、总线/端点身份、无效 ID、停止/重启和隔离保留。这些接口的权威是接入合同及生成/公开头文件;本页解释设计,不重复函数声明。