编写嵌入式软件的一个独特挑战是,它要求嵌入式开发人员不仅要理解硬件的微小细节,还要理解他们用来激活硬件的编程语言。有时候,最简单的概念比人们想象的要复杂得多。在理解C语言中的基本变量类型时尤其如此。

每个程序员都熟悉char、integer、long等常见的变量类型。许多编程语言都包含这些变量类型,但它们不一定代表不同语言之间相同的物理内存空间。事实上,在C编程的嵌入式世界中,用于存储整数的字节数会因编译器和目标平台而异!任何新的开发人员都可能认为情况肯定不是这样,但是看看图1中三个不同嵌入式微控制器的实验结果。

图1–使用Sizeof()获取存储每种数据类型的字节数

这不仅对软件与内存映射设备的接口方式有非常实际的影响,而且还会影响软件中计算和其他功能的性能。这也使得几乎不可能将代码从一个平台移植到另一个平台,使编写可重用的代码变得非常困难,但是,从ISO C99开始,嵌入式开发人员人员的可移植性问题有了一个解决方案。

ISO C99标准通过名为stdint.h的头文件引入了可移植数据类型。该头文件包含在编译器中,创建固定宽度的数据类型。固定宽度数据类型确保8位变量是8位,16位变量是16位,以此类推。这确保了使用这些数据类型的C代码在不同的平台上具有相同的宽度!图2显示了一些常见的有符号和无符号整数值。

图2–常见的整数类型

这些只是在stdint.h中定义的变量类型的几个例子。强烈建议任何开发人员花一些时间检查此标头。有一些非常有用的宏可以用来获得该数据类型可以存储的最小值和最大值。这对于初始化变量和代码中的边界检查都很有用。甚至还有int_fast8_t这样的类型定义,它被定义为最快的8位有符号整数类型。甚至还有至少有一定宽度的类型的定义,比如uint_least16_t。

如果你仍在使用内置的编译器变量类型char、int、long等,那么这是研究stdint.h并开始编写代码的大好时机,你可以编写一次代码,然后从此开始移植。请记住,这个头文件内置在C99中,如果使用的编译器不是C99或更高版本,可能需要构建自己的stdint.h版本。从长远来看,这绝对值得嵌入式开发人员一试!

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部