大小端模式,stm32採用小端模式

2021-08-21 14:27:43 字數 2003 閱讀 6262

儲存模式:

小端:較高的有效位元組儲存在較高的儲存器位址,較低的有效位元組儲存在較低的儲存器位址。

大端:較高的有效位元組儲存在較低的儲存器位址,較低的有效位元組儲存在較高的儲存器位址

那麼,在記憶體裡面,其儲存就變成了:

|       位址                           |    hex                       |

|0x4000 0000                    |    78 56 34 12           |

更為簡單一點:

低位址---------->高位址【大端模式】

資料高位------->資料低位

0x12|0x34|0x56|0x78|

低位址---------->高位址【小端模式】

資料低位-------->資料高位

0x78|0x56|0x34|0x12|

大端與小端的優勢

二者無所謂優勢,無所謂劣勢,各自優勢便是對方劣勢

大端模式:符號位的判定固定為第乙個位元組,容易判斷正負。

小端模式:強制轉換資料不需要調整位元組內容,1、2、4位元組的儲存方式一樣

陣列在大端小端情況下的儲存:

以unsigned int value = 0x12345678為例,

分別看看在兩種位元組序下其儲存情況,

我們可以用unsigned char buf[4]來表示value:

big-endian: 低位址存放高位

,如下:

高位址                    資料位

|   ---------------           |

|    buf[3] (0x78) -- 低位

|    buf[2] (0x56)        |

|     buf[1] (0x34)       | 

|    buf[0] (0x12) -- 高位

|     ---------------

低位址

little-endian: 低位址存放低位

,如下:

高位址---------------

buf[3] (0x12) -- 高位

buf[2] (0x34)

buf[1] (0x56)

buf[0] (0x78) -- 低位

--------------

低位址為何會出現大小端之分:

這是因為在計算機系統中,我們是以位元組為單位的,

每個位址單元都對應著乙個位元組,乙個位元組為8bit。

但是在c語言中除了8bit的char之外,還有16bit的short型,32bit的long型(要看具體的編譯器),

另外,對於位數大於8位的處理器,例如16位或者32位的處理器,

由於暫存器寬度大於乙個位元組,那麼必然存在著乙個如果將多個位元組安排的問題。

因此就導致了大端儲存模式和小端儲存模式。

例如乙個16bit的short型x,在記憶體中的位址為0x0010,x的值為0x1122,

那麼0x11為高位元組,0x22為低位元組。對於大端模式,就將0x11放在低位址中,即0x0010中,

0x22放在高位址中,即0x0011中。小端模式,剛好相反。

我們常用的x86結構是小端模式,而keil c51則為大端模式。

很多的arm,dsp都為小端模式。有些arm處理器還可以由硬體來選擇是大端模式還是小端模式。

位元組序:【一般作業系統都是小端,而通訊協議是大端的】

常見cpu位元組序

big endian : powerpc、ibm、sun

little endian : x86、dec

arm既可以工作在大端模式,也可以工作在小端模式

stm32中大小端轉換

相同位元組序的平台 你是大端平台 在進行網路通訊時可以不進行位元組序轉換,但是跨平台 你是小端平台 進行網路資料通訊時必須進行位元組序轉換。網路協議規定接收到得第乙個位元組是高位元組,存放到低位址,所以傳送時會首先去低位址取資料的高位元組。小端模式的多位元組資料在存放時,低位址存放的是低位元組,而被...

STM32 結構體的位元組對齊和大小端

1 測試平台 本次實驗的平台以32位cortexm0微控制器,不同的平台的實驗結果可能是不一樣的,但是思路都一樣。2 基礎概念 先介紹三個概念 自身對齊值 指定對齊值 有效對齊值。自身對齊值 資料型別本身的對齊值,例如char型別的自身對齊值是1,short型別是2,int型別是4 指定對齊值 編譯...

關於STM32資料的大小端問題以及可能的解決辦法

最近著手於開發rpimouse的通訊協議,第一次接觸crc校驗,發現有很多問題。32本身是帶有硬體crc校驗的,但是他的校驗結果和pc演算法計算出來的完全不同。在查詢解決方法的過程中得知32資料和pc資料的大小端不同,資料計算結果當然不同。什麼是大小端呢?比如 數字0x12 34 56 78 在記憶...