【问题标题】:How to use types in embedded C for portable bare metal software [closed]如何将嵌入式 C 中的类型用于便携式裸机软件 [关闭]
【发布时间】:2026-02-09 13:15:02
【问题描述】:

我正在用 C 语言为特定的微控制器编写我的第一个裸机应用程序。我想让它尽可能地便携,但我不确定使用 C 类型的正确方法是什么。我有两个选择:

  • 使用典型的 C 标准类型,例如 charintlong 等。
  • 对整数类型使用stdint.h的类型,例如uint8_tint32_t等,其余类型使用chardouble

哪个选项最好?

【问题讨论】:

  • 第三个选项是什么?
  • 如果您想编写可移植代码(或任何 C 代码),请确保您了解 C 的错误功能,即 通常的算术转换 及其 整数推广 规则。它们与类型本身一样重要。
  • 可能的欺骗:Reasons to use (or not) stdint
  • stdint.h 简单地转换为原生/实际 C 类型 char int long。在针对特定目标的工具中,这种变化很少见。但是如果移植到另一个平台(如果你的代码无论如何都不会移植的话),stdint 方法很好。 stdint 方法有一个 C 库的问题,它有点不适用于裸机,并且取决于工具可以是 PITA(还有 C 库如何确保它与该编译器一起使用的问题(有时它不适用))。

标签: c types embedded bare-metal hardware-programming


【解决方案1】:

使用stdint.h 定义明确的整数类型可以更轻松地将代码移植到另一个控制器。

例如: int 类型的大小取决于您的机器(16 位或 32 位)

请记住:
如果您想使用 MISRA 标准,则不允许使用像 int 这样的标准类型。

【讨论】:

  • Mike,我要补充一点,它仅适用于必须具有明确定义宽度的整数类型。对于普通整数计算,可能会使用普通 int,这样您就可以利用具有更大原生 int 类型的控制器。
  • @Paul Ogilivie 当然可以!
最近更新 更多