新聞中心

        EEPW首頁 > 嵌入式系統 > 牛人業話 > 例說MCU的端模式

        例說MCU的端模式

        —— 基于STM8S105K4和STM32F072RB
        作者:veiko 時間:2015-05-11 來源:電子產品世界 收藏

          端模式,大端,小端是什么?沒有用到的話,相信你也不一定清楚。我第一次接觸是在UART發送結構體數據的時候,說到這里你也許猜到了一些。

        本文引用地址:http://www.104case.com/article/273944.htm

          端模式(Endian)的這個詞出自Jonathan Swift書寫的《格列佛游記》。這本書根據將雞蛋敲開的方法不同將所有的人分為兩類,從圓頭開始將雞蛋敲開的人被歸為Big Endian,從尖頭開始將雞蛋敲開的人被歸為Littile Endian。小人國的內戰就源于吃雞蛋時是究竟從大頭(Big-Endian)敲開還是從小頭(Little-Endian)敲開。在計算機業Big Endian和Little Endian也幾乎引起一場戰爭。在計算機業界,Endian表示數據在存儲器中的存放順序。下文舉例說明在計算機中大小端模式的區別。

          下表說明了一個32位的數據在大端模式及小端模式下按字節存儲的先后順序(HH表示32位數據的最高字節,LL則為最低字節):

          由上表可以看出,在大端模式中,一個多字節數據按從高字節到低字節的順序存儲,而在小端模式中則相反。在實際應用當中,不同的處理器采用的端模式也不一樣,為了讓大家更簡單地理解以及引起大家足夠的重視,下面我分別以STM32F103和STM8S103K4來做一個簡單的實驗。

          定義一個結構體類型如下圖:

          在中編寫如下程序:

          [說明]: 以上只是工程中截取的部分代碼,完成的工程在附件當中,附件地址在審核后將會在文章回貼中提供給大家。

          仿真結果-端模式轉換前直接進行結構體到數組的內存復制的結果:

          仿真結果-端模式轉換后進行結構體到數組的內存復制的結果:

          在STM32F072中編寫如下程序(結構體定義與前文所述一致):

          [說明]: 以上只是工程中截取的部分代碼,完成的工程在附件當中,附件地址在審核后將會在文章回貼中提供給大家。

          仿真結果-端模式轉換前直接進行結構體到數組的內存復制的結果:

          仿真結果-端模式轉換后進行結構體到數組的內存復制的結果:

          由以上實驗我們通過對比和STM32F072在未進行端轉換前內存復制的結果得出結論:

          1. 采用的是大端模式,即32位或16位數據按照從高字節到低字節的順序存儲在內存當中。

          2. STM32F072采用的是小端模式,即32位或16位數據按照從低字節到高字節的順序存儲在內存當中。

          由此也證明了前文中的說法,不同的處理器采用的端模式可能不一樣。也正因為此,我們在編寫某些外部設備驅動的時候或者有關通信協議的驅時應該把端模式考慮進去,要進行轉換可以參考下面的代碼:

          當然,你可以選擇不進行端模式的轉換,而直接通過按字節的方式來存儲,但這樣的話很多時候會大大地降低您代碼的效率,這里就不多作解釋了。

          [特別說明]: 在上文及上文的圖中有些地方注釋說的是端模式的轉換,并不是指把的端模式進行轉換。

          請在文章中下部增加如下信息:

          基于STM32F072的端模式例子:http://share.eepw.com.cn/share/download/id/372958

          STM8大小端例程:http://share.eepw.com.cn/share/download/id/372957

        逆變器相關文章:逆變器原理


        可控硅相關文章:可控硅工作原理


        逆變器相關文章:逆變器工作原理


        比較器相關文章:比較器工作原理




        關鍵詞: MCU STM8S105K4

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 元朗区| 梨树县| 方山县| 阿图什市| 镇沅| 永福县| 治多县| 行唐县| 武陟县| 纳雍县| 同心县| 台安县| 樟树市| 江津市| 那坡县| 吴旗县| 定结县| 应用必备| 铁力市| 察哈| 垫江县| 洪湖市| 香河县| 杭锦旗| 奎屯市| 巧家县| 西平县| 屏东县| 田阳县| 顺平县| 临湘市| 健康| 浦江县| 广河县| 南岸区| 察雅县| 昌黎县| 黎城县| 漠河县| 长春市| 鹤岗市|