1. 主页
  2. 自己动手从0到1学写FAT32文件系统
  3. 第1章 驱动框架
  4. 结构体打包

结构体打包

内容纲要

本课时介绍了有关结构体打包相关的操作。内容涉及编译配置,与FAT32本身无关,但却又是必要的。

主要内容

pragma

pragma是编译器本身所支持的特定标记,非C语言本身的特性。对于不同的编译器,pragma的用法有所不同。

本课程使用的是pragma pack(n)

  • pragma pack(1),指示结构体按1字节对齐。
  • pragma pack(),取消自定义的pragma pack(n),采用原系统默认的方式。

重点难点

本课时的重点是理解编译器在处理结构体的各字段在内存中的布局时,考虑到访问性能等因素,会插入额外的填充字节。

至于具体为何要插入,以及怎样插入、插入多少个字节,我没有深究过,也认为没有必要。只需了解到有这么一回事即可。

在这门课程中,我们只要学会怎样禁用编译器自动做这种插入操作。

注意事项

大小端处理

特别注意:本课程不讨论大端系统下读写FAT32文件系统的情况。目前,我们常用的CPU和MCU很多都是小端模式,大端我见的不多,用过则更少。为了简化起见,本课程只讨论小端模式。

在FAT技术文档中有提到,FAT32文件系统在处理磁盘等存储设备时,采用的是小端存储模式。而我们所用的pc机,采用的也是小端模式。二者一致,所以课程中没有提及大小端方面的问题。

常见问题

这篇文章对您有用吗?

我们要如何帮助您?

发表评论

电子邮件地址不会被公开。 必填项已用*标注