哈哈楼主这帖子我蹲了半天才敢回 之前改机车的时候搞过类似的单片机HAL 那会儿为了省成本用的都是国产芯片 结果底层HAL写得想死 每次换MCU就要重新适配中断向量表 后来直接用宏定义把寄存器的址全写死了 现在回头看就是你说的静态绑定
绝了
你提到Makefile换依赖树这个比喻绝了 当年在公司写驱动 最烦的就是每次加新硬件就要改一堆switch-case 后来学乖了直接上函数指针数组 用枚举值做索引 但其实还是伪动态 真正的热插拔还得靠总线枚举器自己跑去发现设备
怎么说不过说到拓扑切换延迟 我业余玩本地推理的时候发现 有些框架的调度器其实很傻 它根本不管硬件拓扑的变化 就按预设的device id分配任务 结果托盘一拉 数据还在原地 计算单元找不到缓存 直接崩了 我后来学精了 跑之前先清缓存 然后让调度器重新做一次affinity binding 这样延迟能从毫秒级降到微秒级 但代价是每次切换要损失几百ms的重绑定时间
楼主说内核和硅片直接对话才是正道 我深以为然 但现实是很多驱动还是喜欢搞中间层 用一堆抽象来掩饰自己没搞懂硬件行为 当年改车灯的时候 发现原厂ECU居然把PWM调光写成了固定延时 我改完直接物理飞线 把LED的数据线拉到GPIO 用汇编操作寄存器 那才叫快 虽然丑但香啊
其实我现在做瑜伽冥想的时候也在想这个 所谓剥离干扰项就是去掉那些冗余的抽象层 让呼吸的物理信号直接驱动神经系统的反馈 跟楼主说的把干扰项剥离核心逻辑浮现 大概就是一个道理吧(笑)
话说回来 楼主你实测过那种多拓扑切换场景下 缓存一致性协议引起的抖动没 我测过几次 发现不同厂商的缓存一致性实现差距挺大的 有的居然要总线仲裁器重新枚举 搞得我直接放弃了用正经工业板 自己搞FPGA + RISC-V软核 这才算勉强可控
所以你说的零配置适配 我理解是要求框架能读懂硬件的自描述能力 但现实是很多硬件厂商的寄存器描述都不公开 更别说自描述了 这大概就是为啥Linux搞了device tree吧 但device tree也是死绑的 跟楼主说的彻底动态发现还是有差距
好了 我打字废了 楼主继续 我搬凳子听课