类型化 factory、静态实例与多态 face¶
当前平台保留 typed factory 查找和 C 多态。配置生成精确实例;factory 查找只返回它们,不构造、初始化、加锁或探测。硬件启动和请求执行是各自显式动作。
FIG-04 表示当前身份结构。Controller 与 child endpoint 有不同接口和 ID,即使实现共享同一物理总线。
生成器拥有的责任¶
一份 schema-2 TOML 选择实例名、binding、模式和精确容量。严格 resolver 产生 typed IR;emitter 发布只读 face、共享 ops 引用、独立私有 context、固定 IRQ 接线和紧凑 getter。Native 装配同样取得独立模型状态;测试单例不是生产实例生成机制。
每次装配生成自己的 nexus_factory.h,其 ID 不是通用 header 或持久编号。默认 ID 是紧凑 uint16_t alias 和具名常量。COUNT、无效和未选择项返回 NULL。可选 nominal strong ID 与 capability record 必须明确配置;芯片能力记录不授予 Board route 或物理资格。
一次调用执行什么¶
动作 |
实际工作 |
|---|---|
|
选择并返回已有只读 UART face |
|
执行选定初始化,保留清理结果 |
公共 I/O 操作 |
验证 face,再分发 |
IRQ 入口 |
访问固定具体 provider 和其拥有的硬件 |
显式 service/wait |
推进或观察选定生命周期 |
Stop |
按合同关闭/排空;不能提前收回仍在借用的存储 |
产品可在 provider 存储生命周期内保留 face。停止硬件不会撤销指针,也不会同步调用方。应用必须确保调用方与 publisher 停止访问并完成必要同步,才能回收外部 adapter 存储。Getter 不改变模式或悄悄取得执行所有权。
验证生成设计¶
以下完整维护装配选择独立 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 binary,验证冷态查找、共享 ops 下的独立 context、bus/endpoint 身份、无效 ID、stop/restart 和隔离保留。这些接口的权威是接入合同及生成/公开 header;本页解释设计,不重复函数声明。