专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

根据FAT表研究MSP430内存对齐问题

作者:未知   来源:转自学会珍惜LW   点击数:  更新时间:2014年08月27日   【字体:

      这两天仔细研究了下FAT32,发现里面涉及到了一个大端、小端对齐有点意思,这里也简单总结一下。先在这里说明一下,MSP430是小端对齐的,还有FAT32文件系统中存放字段的顺序也是小端模式,所以用MSP430来实现FAT32文件系统的话,读取数据的时候不需要做特殊处理~

 

      下面简单讲一下大端对齐和小端对齐。

       我们知道,我们定义变量的时候,在内存中会给该变量分配一个位置,如果该变量是一个char型的变量,那么只会分配给它一个字节的位置,但是如果该变量int型或者long int型呢?这里以16位的C编译器编译结果来看的话,int型占2个字节,long int型占4个字节,那具体是如何分配呢?我们以0x12345678这个4字节数据为例。

       如果在内存中,按地址从低往高,存储是4个字节的数据依次是0x78,0x56,0x34,0x12的话,则为小端存储,如下图所示;

       如果在内存中,按地址从低往高,存储的4个字节的数据依次是0x12,0x34,0x56,0x78的话,则为大端存储如下图所示;

       不同的CPU,对齐方式不同,所以如果我们在移植程序时,涉及到这种多个字节拼凑成多个字节的数据出问题时,可以考虑是否是内存对齐方式的问题。

        FAT表一般有两张,两张表紧挨着,内容完全一样,第二张是起备份作用。

 

        FAT表中的编号是从0开始,下面依次是第1簇,第2簇……

        其中第0簇和第1簇是存放的FAT表本身,文献里没有看到这种说法,文献里只所数据簇是从第2簇开始,但是这样理解应该也可以;

        第2簇是首目录簇,存放的是文件的文件名、文件格式、文件大小、起始位置等信息;

        真正的数据簇是从第3簇开始的。所以如果以SD卡及FAT32文件系统为例,将SD卡格式化之后,存入一个文件,会发现其FAT表的第一个扇区的数据如下图所示。红线处为第一个存放数据的簇,为第3簇,是紧跟在首目录簇后面的那一簇。



        

关闭窗口

相关文章