原创大约 15 分钟
多核嵌入式开发里有一种容易产生误判的现象:共享变量放在 NonCached RAM,读写都是简单赋值,两边也都进入了 SchM Exclusive Area,但事件队列和业务状态仍可能不一致。
这里不需要先假设硬件缓存出错。更值得追问的是:
“事件已发布”与“事件对应的数据已就绪”,是不是同一个不可分割的状态转换?
本文以 AUTOSAR Classic COM 的一种 Deferred Rx + EventCache 实现为例,借助一个可构造的双核交错,讨论缓存可见性、原子性、内存顺序与跨核互斥之间的区别,以及事件驱动系统该怎样维护状态不变量。
文中的代码是根据实际函数关系抽象的示意性伪代码,不是 AUTOSAR 对所有 COM 实现的统一规定。具体项目还应遵循所使用组件的多核部署和并发访问约束。
原创大约 15 分钟
在嵌入式工程里,经常会遇到两种静态库场景:
- 作为 Producer:把自己的源码编译成
.a,交给其他团队或第三方集成; - 作为 Consumer:拿到供应商提供的
.a,再链接进自己的 ECU 工程。
两种场景其实是同一条构建链的两端。
本文结合 TC397 + TASKING + AUTOSAR Classic 工程,完整梳理:
.c
│
│ Compile
▼
.o
│
│ Archive
▼
.a
│
│ Link
▼
ELF
│
▼
HEX / ECU
本文关注 Compile、Archive、Link 三个阶段的职责,以及嵌入式静态库交付给第三方时需要满足的条件。
原创大约 10 分钟