类型化 factory、静态实例与多态 face

当前平台保留 typed factory 查找和 C 多态。配置生成精确实例;factory 查找只返回它们,不构造、初始化、加锁或探测。硬件启动和请求执行是各自显式动作。

当前 factory ID、共享只读 ops 与独立实例 context

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 或物理资格。

一次调用执行什么

动作

实际工作

nx_factory_uart(id)

选择并返回已有只读 UART face

nx_platform_start()

执行选定初始化,保留清理结果

公共 I/O 操作

验证 face,再分发 ops(context, ...)

IRQ 入口

访问固定具体 provider 和其拥有的硬件

显式 service/wait

推进或观察选定生命周期

Stop

按合同关闭/排空;不能提前收回仍在借用的存储

产品可在 provider 存储生命周期内保留 face。停止硬件不会撤销指针,也不会同步调用方。应用必须确保调用方与 publisher 停止访问并完成必要同步,才能回收外部 adapter 存储。Getter 不改变模式或悄悄取得执行所有权。

验证生成设计

以下完整维护装配选择独立 Native 实例:

维护中的生成 factory 夹具;其软件 Board 不是物理 PCB。
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;本页解释设计,不重复函数声明。