專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

根據(jù)FAT表研究MSP430內(nèi)存對(duì)齊問(wèn)題

作者:未知   來(lái)源:轉(zhuǎn)自學(xué)會(huì)珍惜LW   點(diǎn)擊數(shù):  更新時(shí)間:2014年08月27日   【字體:

      這兩天仔細(xì)研究了下FAT32,發(fā)現(xiàn)里面涉及到了一個(gè)大端、小端對(duì)齊有點(diǎn)意思,這里也簡(jiǎn)單總結(jié)一下。先在這里說(shuō)明一下,MSP430是小端對(duì)齊的,還有FAT32文件系統(tǒng)中存放字段的順序也是小端模式,所以用MSP430來(lái)實(shí)現(xiàn)FAT32文件系統(tǒng)的話,讀取數(shù)據(jù)的時(shí)候不需要做特殊處理~

 

      下面簡(jiǎn)單講一下大端對(duì)齊和小端對(duì)齊。

       我們知道,我們定義變量的時(shí)候,在內(nèi)存中會(huì)給該變量分配一個(gè)位置,如果該變量是一個(gè)char型的變量,那么只會(huì)分配給它一個(gè)字節(jié)的位置,但是如果該變量int型或者long int型呢?這里以16位的C編譯器編譯結(jié)果來(lái)看的話,int型占2個(gè)字節(jié),long int型占4個(gè)字節(jié),那具體是如何分配呢?我們以0x12345678這個(gè)4字節(jié)數(shù)據(jù)為例。

       如果在內(nèi)存中,按地址從低往高,存儲(chǔ)是4個(gè)字節(jié)的數(shù)據(jù)依次是0x78,0x56,0x34,0x12的話,則為小端存儲(chǔ),如下圖所示;

       如果在內(nèi)存中,按地址從低往高,存儲(chǔ)的4個(gè)字節(jié)的數(shù)據(jù)依次是0x12,0x34,0x56,0x78的話,則為大端存儲(chǔ)如下圖所示;

       不同的CPU,對(duì)齊方式不同,所以如果我們?cè)谝浦渤绦驎r(shí),涉及到這種多個(gè)字節(jié)拼湊成多個(gè)字節(jié)的數(shù)據(jù)出問(wèn)題時(shí),可以考慮是否是內(nèi)存對(duì)齊方式的問(wèn)題。

        FAT表一般有兩張,兩張表緊挨著,內(nèi)容完全一樣,第二張是起備份作用。

 

        FAT表中的編號(hào)是從0開(kāi)始,下面依次是第1簇,第2簇……

        其中第0簇和第1簇是存放的FAT表本身,文獻(xiàn)里沒(méi)有看到這種說(shuō)法,文獻(xiàn)里只所數(shù)據(jù)簇是從第2簇開(kāi)始,但是這樣理解應(yīng)該也可以;

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

        真正的數(shù)據(jù)簇是從第3簇開(kāi)始的。所以如果以SD卡及FAT32文件系統(tǒng)為例,將SD卡格式化之后,存入一個(gè)文件,會(huì)發(fā)現(xiàn)其FAT表的第一個(gè)扇區(qū)的數(shù)據(jù)如下圖所示。紅線處為第一個(gè)存放數(shù)據(jù)的簇,為第3簇,是緊跟在首目錄簇后面的那一簇。



        

關(guān)閉窗口

相關(guān)文章