<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          例說MCU的端模式

          —— 基于STM8S105K4和STM32F072RB
          作者:veiko 時(shí)間:2015-05-11 來源:電子產(chǎn)品世界 收藏

            端模式,大端,小端是什么?沒有用到的話,相信你也不一定清楚。我第一次接觸是在UART發(fā)送結(jié)構(gòu)體數(shù)據(jù)的時(shí)候,說到這里你也許猜到了一些。

          本文引用地址:http://www.ex-cimer.com/article/273944.htm

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

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

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

            定義一個(gè)結(jié)構(gòu)體類型如下圖:

            在中編寫如下程序:

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

            仿真結(jié)果-端模式轉(zhuǎn)換前直接進(jìn)行結(jié)構(gòu)體到數(shù)組的內(nèi)存復(fù)制的結(jié)果:

            仿真結(jié)果-端模式轉(zhuǎn)換后進(jìn)行結(jié)構(gòu)體到數(shù)組的內(nèi)存復(fù)制的結(jié)果:

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

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

            仿真結(jié)果-端模式轉(zhuǎn)換前直接進(jìn)行結(jié)構(gòu)體到數(shù)組的內(nèi)存復(fù)制的結(jié)果:

            仿真結(jié)果-端模式轉(zhuǎn)換后進(jìn)行結(jié)構(gòu)體到數(shù)組的內(nèi)存復(fù)制的結(jié)果:

            由以上實(shí)驗(yàn)我們通過對比和STM32F072在未進(jìn)行端轉(zhuǎn)換前內(nèi)存復(fù)制的結(jié)果得出結(jié)論:

            1. 采用的是大端模式,即32位或16位數(shù)據(jù)按照從高字節(jié)到低字節(jié)的順序存儲在內(nèi)存當(dāng)中。

            2. STM32F072采用的是小端模式,即32位或16位數(shù)據(jù)按照從低字節(jié)到高字節(jié)的順序存儲在內(nèi)存當(dāng)中。

            由此也證明了前文中的說法,不同的處理器采用的端模式可能不一樣。也正因?yàn)榇?,我們在編寫某些外部設(shè)備驅(qū)動的時(shí)候或者有關(guān)通信協(xié)議的驅(qū)時(shí)應(yīng)該把端模式考慮進(jìn)去,要進(jìn)行轉(zhuǎn)換可以參考下面的代碼:

            當(dāng)然,你可以選擇不進(jìn)行端模式的轉(zhuǎn)換,而直接通過按字節(jié)的方式來存儲,但這樣的話很多時(shí)候會大大地降低您代碼的效率,這里就不多作解釋了。

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

            請?jiān)谖恼轮邢虏吭黾尤缦滦畔ⅲ?/p>

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

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

          逆變器相關(guān)文章:逆變器原理


          可控硅相關(guān)文章:可控硅工作原理


          逆變器相關(guān)文章:逆變器工作原理


          比較器相關(guān)文章:比較器工作原理




          關(guān)鍵詞: MCU STM8S105K4

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();