使用带有位字段的供应商库来映射寄存器是个好主意吗?
Is using the vendors libary with bitfields for mapping register a good idea?
对于 TLE985x,英飞凌使用位域来映射其库中的寄存器。
由于我是嵌入式编程的新手,所以我了解了位域。许多文章都提到了位域的不良影响。现在的问题是,当位域有些糟糕时,英飞凌为什么要在他们的库中使用它?
感谢您的帮助
是使用供应商提供的默认寄存器映射还是推出您自己的寄存器映射几乎 project-specific。如果对可移植性要求高,源码质量一般,就得自己做register map
可以在此处找到有关该主题的一些讨论:How to access a hardware register from firmware? 正如该 post 中所讨论的那样,供应商推出他们自己的自定义、糟糕的寄存器映射有几个原因:
- 使调试寄存器映射更容易,特别是在使用没有特定部件支持的糟糕调试器时(例如各种 Eclipse-flavoured)。 Lauterbach、iSystem、Crossworks 等高质量调试器确实有部分支持,您可以在其中很好地观察寄存器,无论这些寄存器在 C 源代码中是如何声明的。
- 芯片供应商绝对没有理由让您更轻松地从他们的芯片移植到其他芯片。恰恰相反。寄存器映射当然是 non-portable 一开始。但同样,工具供应商也不希望您为同一芯片移植到另一个编译器。
- 芯片供应商在编写固件方面是出了名的无能。只要每个人都记得,情况就是如此。我不会在这里指出任何特定的供应商,他们在这方面都非常糟糕。
然而,对于英飞凌,您可以问:“嘿伙计们,你们似乎很喜欢汽车电子产品。自 1998 年以来,汽车行业一直在使用 MISRA-C。怎么会2020 年你还不提供 MISRA-C 合规库?你不想让汽车客户使用你的产品?”会有很多有趣的喃喃自语的回应。
对于 TLE985x,英飞凌使用位域来映射其库中的寄存器。 由于我是嵌入式编程的新手,所以我了解了位域。许多文章都提到了位域的不良影响。现在的问题是,当位域有些糟糕时,英飞凌为什么要在他们的库中使用它?
感谢您的帮助
是使用供应商提供的默认寄存器映射还是推出您自己的寄存器映射几乎 project-specific。如果对可移植性要求高,源码质量一般,就得自己做register map
可以在此处找到有关该主题的一些讨论:How to access a hardware register from firmware? 正如该 post 中所讨论的那样,供应商推出他们自己的自定义、糟糕的寄存器映射有几个原因:
- 使调试寄存器映射更容易,特别是在使用没有特定部件支持的糟糕调试器时(例如各种 Eclipse-flavoured)。 Lauterbach、iSystem、Crossworks 等高质量调试器确实有部分支持,您可以在其中很好地观察寄存器,无论这些寄存器在 C 源代码中是如何声明的。
- 芯片供应商绝对没有理由让您更轻松地从他们的芯片移植到其他芯片。恰恰相反。寄存器映射当然是 non-portable 一开始。但同样,工具供应商也不希望您为同一芯片移植到另一个编译器。
- 芯片供应商在编写固件方面是出了名的无能。只要每个人都记得,情况就是如此。我不会在这里指出任何特定的供应商,他们在这方面都非常糟糕。
然而,对于英飞凌,您可以问:“嘿伙计们,你们似乎很喜欢汽车电子产品。自 1998 年以来,汽车行业一直在使用 MISRA-C。怎么会2020 年你还不提供 MISRA-C 合规库?你不想让汽车客户使用你的产品?”会有很多有趣的喃喃自语的回应。