类型化 factory、静态实例与多态接口面

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

当前 factory ID、共享只读 ops 与独立实例上下文

FIG-04 表示当前身份结构。控制器与子端点端点有不同接口和 ID,即使实现共享同一物理总线。

生成器拥有的责任

一份 schema-2 TOML 选择实例名、绑定、模式和精确容量。严格解析器产生类型化 IR;生成器发布只读接口面、共享 ops 引用、独立私有上下文、固定 IRQ 接线和紧凑获取函数。Native 装配同样取得独立模型状态;测试单例不是生产实例生成机制。

每次装配生成自己的 nexus_factory.h,其 ID 不是通用头文件或持久编号。默认 ID 是紧凑 uint16_t alias 和具名常量。COUNT、无效和未选择项返回 NULL。可选名义强类型 ID 与 capability 记录必须明确配置;芯片能力记录不授予 Board 路由或物理资格。

一次调用执行什么

动作

实际工作

nx_factory_uart(id)

选择并返回已有只读 UART 接口面

nx_platform_start()

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

公共 I/O 操作

验证接口面,再分发 ops(context, ...)

IRQ 入口

访问固定具体提供者和其拥有的硬件

显式 service/wait

推进或观察选定生命周期

停止

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

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

验证生成设计

以下完整维护装配选择独立 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 可执行文件,验证冷态查找、共享 ops 下的独立上下文、总线/端点身份、无效 ID、停止/重启和隔离保留。这些接口的权威是接入合同及生成/公开头文件;本页解释设计,不重复函数声明。