嵌入式应用开发全解析
1. 可移植性编码
在桌面系统和嵌入式目标系统中,C 语言并非完全统一。C 语言的创造者将其视为创建汇编代码的框架,这使得 C 语言存在一些差异,这些差异并非语言缺陷,而是设计使然。大多数用户在进行高级编程时可能不会遇到这些问题,但在底层编程时就需要了解它们。以下是一些在使用 C 语言进行可移植编码时需要考虑的因素:
- 字节序(Endianess) :描述了多字节数据的存储方式。大端字节序(Big-endian)系统中,最高字节先存储,低字节依次存储在后续内存位置;小端字节序(Little-endian)则相反,最低字节先存储,高字节随后。例如,阿拉伯数字 78,123,456 是大端字节序,如果是小端字节序则表示为 456,123,78。如果代码是为获取第一个字节而编写,在大端和小端机器上的结果会截然不同,但代码本身形式上是正确的,且能正常编译。
- 字对齐(Word alignment) :一种存储数据的方式,使字节存储在内存位置上能被系统字长整除。在大多数系统中,一个字为 4 字节,这意味着从内存中获取的地址必须能被 4 整除,以方便处理器设计者优化处理器设计,使其能更快地访问内存。为了使数据结构对齐,编译器会在数据结构中插入填充字节,但没有统一的填充标准,这可能导致代码因越界或访问不足的错误而失败,进而损坏数据。
- 容量(Capacities) :整数通常为 2 字节长,可表示的数字范围最大为 56535,但对于更大的数字,其存储方式没有统一标准。例如,PowerPC 系统可能用 12 字节存储长整数,而 x86 系统可能使用 16 字节。在
超级会员免费看
订阅专栏 解锁全文
1715

被折叠的 条评论
为什么被折叠?



