![AUTOSAR分层-MCAL辨析 AUTOSAR分层-MCAL辨析](https://image.shishitao.com:8440/aHR0cHM6Ly9ia3FzaW1nLmlrYWZhbi5jb20vdXBsb2FkL2NoYXRncHQtcy5wbmc%2FIQ%3D%3D.png?!?w=700&webp=1)
8. AUTOSAR中MCAL虽然包含各种drvier,但毕竟是AL即抽象层,不应包含architecture和device特定的信息。应该只包含模型定义,不包含实现细节。
AUTOSAR文档中的分层结构如下:
0层:
![AUTOSAR分层-MCAL辨析 AUTOSAR分层-MCAL辨析](https://image.shishitao.com:8440/aHR0cHM6Ly9xcWFkYXB0LnFwaWMuY24vdHhkb2NwaWMvMC9iYTVkYWVkNmU0NzY5ZTg4ZjNkNjViYTdmYmE1NGFhZi8w.jpg?w=700&webp=1)
1层:
![AUTOSAR分层-MCAL辨析 AUTOSAR分层-MCAL辨析](https://image.shishitao.com:8440/aHR0cHM6Ly9xcWFkYXB0LnFwaWMuY24vdHhkb2NwaWMvMC8wZDEyMGM2Yzc1MWY4ZDg4MTBkYWI3YzQ3NWYxOTVlMS8w.jpg?w=700&webp=1)
从中可以看到,Microcontroller Abstraction Layer即MCAL包含的模块为:
![AUTOSAR分层-MCAL辨析 AUTOSAR分层-MCAL辨析](https://image.shishitao.com:8440/aHR0cHM6Ly9xcWFkYXB0LnFwaWMuY24vdHhkb2NwaWMvMC81YmNlMzFjZDk5MTRmZWIxZTY4Y2FkY2JjZWU0NWQ2Mi8w.jpg?w=700&webp=1)
是否有察觉到异常?
Microcontroller Abstraction Layer为抽象层,而各个Driver必然包含很多设备相关的细节。这两个是矛盾的。
Microcontroller Abstraction Layer应该抽象出不同开发商的相同类型device产品的driver的共同点。比如有很多Can Device的开发商,他们的设备都应该符合Can协议,提供相似的操作接口。MCAL应当负责提取出这套接口,建立模型。而非具体的Driver。
如此,层级结构图变成了:
![AUTOSAR分层-MCAL辨析 AUTOSAR分层-MCAL辨析](https://image.shishitao.com:8440/aHR0cHM6Ly9xcWFkYXB0LnFwaWMuY24vdHhkb2NwaWMvMC85ZmI3ODgxOTJjODdlNTZiYTI0NGFkMjY0MGMzZWIyNi8w.jpg?w=700&webp=1)
PS. 可以参考Linux kernel的实现中,有asm-generic/asm/mach相关的归类。
asm: Architecture Specific Macros
mach: Machine