使用带有位域的供应商库进行映射注册是个好主意吗?

问题描述

对于TLE985x,英飞凌使用位域来映射其库中的寄存器。 由于我是嵌入式编程的新手,因此我了解了位域。许多文章提到了位域的不良影响。现在的问题是,当位域某种程度上不好时,英飞凌为什么要在其库中使用它?

感谢您的帮助

解决方法

使用供应商的默认寄存器映射还是自行部署都是与项目有关的。如果对可移植性和一般源代码质量有很高的要求,则必须制作自己的寄存器映射。

可以在以下位置找到有关该主题的一些讨论:How to access a hardware register from firmware?如该帖子所述,供应商有多个原因推出其自己的自定义糟糕的寄存器映射:

  • 使调试寄存器映射更容易,尤其是在使用没有特定部件支持的cr脚的调试器时(例如各种Eclipse风格的调试器)。诸如Lauterbach,iSystem,Crossworks等的高质量调试器确实具有部分支持,无论这些寄存器如何在C源代码中声明,您都可以在其中很好地观察寄存器。
  • 硅供应商绝对没有理由让您更轻松地从他们的硅移植到其他硅。恰恰相反。首先,寄存器映射当然是不可移植的。但是类似地,工具供应商不希望您移植到同一芯片的另一个编译器。
  • 众所周知,硅供应商在编写固件方面不称职。只要每个人都记得,情况就是如此。我不会在这里指向任何特定的供应商,他们对此都无可救药。

但是,对于英飞凌,您可以做的是问:“嘿,您似乎非常喜欢汽车电子产品。自1998年以来,汽车行业一直在使用MISRA-C。能否在2020年提供符合MISRA-C标准的库?您不希望汽车客户使用您的产品吗?”有很多有趣的喃喃自语的反应。