那是 1981 年(是的——將近 40 年前!),我們正在構(gòu)建一個系統(tǒng),其中包含一個 DEC PDP-11 小型計算機(jī),該小型計算機(jī)通過共享內(nèi)存與德克薩斯 TMS990 微處理器接口。這些都是 16 位處理器,所以我們將數(shù)據(jù)作為字傳遞。但是發(fā)生了一些奇怪的事情:一個 CPU 會將一個值寫入共享內(nèi)存的一個字中,但是當(dāng)另一個 CPU 讀出它時,字節(jié)被交換了。解決這個問題很簡單:只需在一側(cè)編寫一個簡單的訪問例程來交換字節(jié)并確保它始終用于訪問共享內(nèi)存。直到后來才知道為什么會出現(xiàn)這個問題。
在幾乎所有現(xiàn)代嵌入式系統(tǒng)中,內(nèi)存都是按字節(jié)組織的。但是,CPU 也可以將數(shù)據(jù)處理為 16 位或 32 位字。在這種情況下,需要決定如何將字中的字節(jié)存儲在內(nèi)存中。有兩個明顯的選項和許多其他變體。描述此字節(jié)順序的屬性稱為“字節(jié)順序”(或有時稱為“字節(jié)順序”)。
兩種常見的字節(jié)序形式是:最低有效字節(jié)存儲在最低地址(“l(fā)ittle-endian”)和最高有效字節(jié)存儲在最低地址(“big-endian”)。字節(jié)順序還有其他變化,甚至還有存儲位的可能性。
廣義上講,使用的字節(jié)序是由 CPU 決定的。由于有多種選擇,因此不同的半導(dǎo)體供應(yīng)商為其 CPU 選擇不同的字節(jié)序也就不足為奇了。英特爾 CPU 傳統(tǒng)上是小端的。飛思卡爾傾向于支持大端。大多數(shù)現(xiàn)代 CPU 的字節(jié)序可以在軟件中交換。
從嵌入式軟件工程師的角度來看,問題是“字節(jié)序重要嗎?” 并且,“如果有,多少錢?”
當(dāng)軟件開發(fā)人員需要考慮字節(jié)順序時,大致有兩種情況:
通過通信鏈路或網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)
在軟件中以多種表示形式處理的數(shù)據(jù)
前一種情況非常簡單——只需遵循或定義協(xié)議即可。后者更棘手,需要一些思考。
考慮這段代碼:
unsigned int n = 0x0a0b0c0d;
unsigned char c, d, *p;
c = (unsigned char) n;
p = (unsigned char *) &n;
d = *p;
c和d最后會包含什么值?無論字節(jié)順序如何,c 都應(yīng)該包含值 0x0 d。但是,d的值將取決于字節(jié)序。在小端系統(tǒng)上d 將包含 0x0 d;在 big-endian 上,它將具有值0x0a。如果要在n 和unsigned char a之間進(jìn)行聯(lián)合,則會觀察到同樣的效果。
那么,這有關(guān)系嗎?這么多年前,這對我很重要!但是,請注意,大多數(shù)代碼可能會獨(dú)立于字節(jié)順序而編寫,我認(rèn)為幾乎所有編寫良好的代碼都是這樣的。但是,如果您確實像我需要的那樣構(gòu)建了字節(jié)順序依賴項,那么良好的文檔和注釋是必不可少的。
審核編輯:郭婷
-
處理器
+關(guān)注
關(guān)注
68文章
20255瀏覽量
252306 -
cpu
+關(guān)注
關(guān)注
68文章
11279瀏覽量
225000
發(fā)布評論請先 登錄
看手冊,9600以下可以直接喚醒,是不丟字節(jié)嗎?
惠倫晶體助力字節(jié)豆包AI眼鏡新體驗
探索TL16C752D:具有64字節(jié)FIFO的雙路UART的卓越性能與應(yīng)用
為什么會有小端字節(jié)序
網(wǎng)絡(luò)通訊的結(jié)構(gòu)及地址
DBC解析:信號位置與物理值計算
TC334 uart dma發(fā)送數(shù)據(jù)時,只能發(fā)送17個字節(jié),怎么解決?
USB3014遇到寫入字節(jié)限制,當(dāng)寫入數(shù)據(jù)的長度為1024字節(jié)或其整數(shù)倍時,無法完成寫入操作怎么解決?
STM32407使用串口閑時中斷+DMA方式接收最大接收字節(jié)是多少?
LC87F0K08A 8位微控制器8K字節(jié)閃存ROM/384字節(jié)RAM規(guī)格書
usb3014不能寫入1024字節(jié)的原因?
開疆智能EtherCAT轉(zhuǎn)CANopen網(wǎng)關(guān)連接UV燈配置案例
機(jī)智云亮相字節(jié)豆包AIoT開源生態(tài)沙龍
賽思×字節(jié)跳動 高精度同步時鐘助力火山引擎打造“云上新宇宙”
什么是字節(jié)序?字節(jié)序重要嗎?
評論