日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > strongerHuang
[導(dǎo)讀]關(guān)注、 星標(biāo)公眾號,不錯過精彩內(nèi)容 素材來源:網(wǎng)絡(luò) 編輯整理:strongerHuang 之前給大家分享過大小端的一些內(nèi)容,閱讀本文之前可以再次回顧一下: 你真的懂CPU大小端模式嗎? 大小端格式由編譯器還是CPU決定的? 一、回顧字節(jié)序 拿數(shù)據(jù) 0x01020304為例: 在


關(guān)注、 星標(biāo)公眾,不錯過精彩內(nèi)容

素材來源:網(wǎng)絡(luò)

編輯整理:strongerHuang


之前給大家分享過大小端的一些內(nèi)容,閱讀本文之前可以再次回顧一下:

CPU大小端模式嗎?" tab="innerlink" data-linktype="2" rel="nofollow">你真的懂CPU大小端模式嗎?

大小端格式由編譯器還是CPU決定的?


一、回顧字節(jié)序

拿數(shù)據(jù) 0x01020304為例:


在大端CPU中:數(shù)據(jù)將存儲為0x01(address + 0),0x02(address + 1),0x03(address + 2),0x04(address + 3)。


在小端CPU中:數(shù)據(jù)將存儲為0x04(address + 0),0x03(address + 1),0x02(address + 2),0x01(address + 3)。


如果你的程序使用簡單的數(shù)據(jù)結(jié)構(gòu)(例如“ int”和“ short”),則沒有什么麻煩。但是,如果數(shù)據(jù)結(jié)構(gòu)類似于以下示例,則可能會遇到問題。

union { unsigned int dat; unsigned char c[4]; }X;
void foo( ) { int t0; X.dat = 0x01020304; t0 = X.c[0]; ???}

在大端 CPU 中編譯并執(zhí)行此代碼時, t0”的值為0x01。在小端CPU中, t0”的值為0x04。


那么問題來了:要想使存儲順序從大端,變?yōu)樾《?,怎么辦呢?


方法其實有很多種,這里講講針對IAR的兩種方法:

  • 使用__big_endian關(guān)鍵字。

  • 使用__REV, __REV16, __REVSH, RBIT函數(shù)。


二、使用__big_endian關(guān)鍵字

IAR中__big_endian關(guān)鍵字提供了一種方便的方式來將應(yīng)用程序從big-endian移植到little-endian。


__big_endian關(guān)鍵字用于訪問以big-endian字節(jié)順序存儲的變量,而與應(yīng)用程序其余部分使用的字節(jié)順序無關(guān)。在ARMv6或更高版本進(jìn)行編譯時,可以使用__big_endian關(guān)鍵字。


只需添加__big_endian關(guān)鍵字即可,如:

____big_endian union { unsigned int dat; unsigned char c[4]; }X;
void foo( ) {int t0;X.dat = 0x01020304;t0 = X.c[0];???}

修改后的代碼在低位字節(jié)CPU中編譯和執(zhí)行,變量“ t0”為0x01。


注意:此關(guān)鍵字不能用于指針。同樣,此屬性不能在數(shù)組上使用。

同時,關(guān)鍵字__big_endian插入REV指令以交換字節(jié)數(shù)據(jù),REV指令的插入會影響代碼大小和執(zhí)行時間。


關(guān)鍵字具有限制,不能應(yīng)用于復(fù)雜的數(shù)據(jù)結(jié)構(gòu),比如以下代碼會生成錯誤

__big_endianunion { unsigned long dat; unsigned char c[4]; struct { unsigned long a0: 1; unsigned long a1: 1; unsigned long a2: 2; unsigned long a3: 4; unsigned long a4: 8; unsigned long a5: 16; }s;} f1_dat2;


三、使用__REV, __REV16, __REVSH, RBIT函數(shù)

大端和小端之間的字節(jié)順序差異只是順序,因此我們需要做的是更改字節(jié)順序,我們再次以變量0x01020304為例:


我們可以通過代碼實現(xiàn)交換功能,比如:

typedef unsigned long uint32_t;uint32_t bswap_32(uint32_t x) {  uint32_t t = x;  uint32_t s;  s = ( (((uint32_t)(t) & (uint32_t)0x000000ffUL) << 24) |    (((uint32_t)(t) & (uint32_t)0x0000ff00UL) << 8) |      (((uint32_t)(t) & (uint32_t)0x00ff0000UL) >> 8) |  (((uint32_t)(t) & (uint32_t)0xff000000UL) >> 24) ); return s; }

通過這種方式實現(xiàn),將導(dǎo)致消耗更多時間和代碼大小。

在C代碼中,我們通常編寫內(nèi)聯(lián)匯編代碼實現(xiàn)交換。IAR有種內(nèi)部函數(shù)可以實現(xiàn)該功能。

比如下面交換功能:


代碼如下:
#include <intrinsics.h>void x1( void ) {s2 = __REV(s1);s3 = __REV16(s1);s4 = __REVSH(s1);}

當(dāng)然,具體的使用以及細(xì)節(jié)內(nèi)容,需要看查看官方說明。


                              
免責(zé)聲明: 本文素材來源網(wǎng)絡(luò),版權(quán)歸原作者所有。如涉及作品版權(quán)問題,請與我聯(lián)系刪除。
推薦閱讀:
IAR進(jìn)軍Linux,支持在Linux搭建編譯環(huán)境
Linux 為何會流行?它和普通的RTOS有何區(qū)別?
Windows Terminal 1.0 和 Linux 版有啥區(qū)別

關(guān)注 微信公眾號『strongerHuang』,后臺回復(fù)“1024”查看更多內(nèi)容,回復(fù)“加群”按規(guī)則加入技術(shù)交流群。


長按前往圖中包含的公眾號關(guān)注

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀

由臺達(dá)集團(tuán)于2026年3月29日通過美通社發(fā)布新聞稿《集裝箱式SST直流移動智算中心發(fā)布》中,第3張有誤,已進(jìn)行替換。特此更正,更新后的全文及圖片如下: 集裝箱式SST直流移動智算中心發(fā)布 臺達(dá)、漢騰科技、龍芯中科攜...

關(guān)鍵字: 移動 ST 固態(tài)變壓器 CPU

面對AI Agent與Physical AI的浪潮,單純依靠增加GPU或NPU的補(bǔ)丁式方案已難以為繼,CPU架構(gòu)必須進(jìn)行面向AI的底層重塑。 阿里達(dá)摩院發(fā)布的玄鐵C950旗艦處理器,不僅刷新了單核性能紀(jì)錄,更通過原生A...

關(guān)鍵字: 玄鐵C950 CPU AI 物理AI RISC-V

北京2026年3月27日 /美通社/ -- 當(dāng)?shù)谑鍖萌珖\動會辦公系統(tǒng)全程穩(wěn)定運行時,當(dāng)銀行柜員輕點鼠標(biāo)實現(xiàn)業(yè)務(wù)秒級響應(yīng)時,當(dāng)大學(xué)生刷一卡通順暢進(jìn)出宿舍、食堂、圖書館時,當(dāng)新能源汽車充電樁智能調(diào)度、巨災(zāi)預(yù)警系統(tǒng)精準(zhǔn)響應(yīng)...

關(guān)鍵字: CPU 指令集 芯片 操作系統(tǒng)

成立三十余年來,Arm一直是芯片行業(yè)特殊的“幕后推手”——不生產(chǎn)一顆芯片,卻定義了全球99%智能手機(jī)的底層架構(gòu)。然而,這家長期保持中立的IP授權(quán)巨頭,如今正打破自己一手建立的商業(yè)規(guī)則。

關(guān)鍵字: ARM CPU 芯片

Arm 首次將其平臺矩陣拓展至量產(chǎn)芯片產(chǎn)品,為業(yè)界提供覆蓋 IP、Arm計算子系統(tǒng) (CSS)及芯片的最廣泛的計算產(chǎn)品選擇。 發(fā)布首款由 Arm 設(shè)計的數(shù)據(jù)中心 CPU——Arm AGI CPU,專為代理式AI 基...

關(guān)鍵字: ARM CPU 數(shù)據(jù)中心 代理式AI

2026年3月24日,美國加州圣何塞訊——Super Micro Computer, Inc.(NASDAQ:SMCI)作為云端計算、AI/機(jī)器學(xué)習(xí)、存儲和5G/邊緣領(lǐng)域的全方位IT解決方案供應(yīng)商,宣布推出基于NVIDI...

關(guān)鍵字: DCBBS液冷架構(gòu) CPU 存儲

3月24日,由阿里巴巴達(dá)摩院主辦的2026玄鐵RISC-V生態(tài)大會在上海舉行。高通、Arteris、Canonical、SHD Group、海爾、中興通訊、全志科技、北京智芯微、南芯科技等全球數(shù)百家產(chǎn)學(xué)研機(jī)構(gòu)齊聚一堂,分...

關(guān)鍵字: RISC-V CPU 算力

Supermicro的NVIDIA Vera Rubin NVL72與HGX Rubin NVL8系統(tǒng)是基于DCBBS液冷架構(gòu)所設(shè)計,與NVIDIA Blackwell...

關(guān)鍵字: CPU MICRO NVIDIA SUPER

3月24日消息,今日,在上海舉行的2026玄鐵RISC-V生態(tài)大會上,阿里巴巴達(dá)摩院發(fā)布新一代旗艦CPU產(chǎn)品玄鐵C950。

關(guān)鍵字: RISC-V CPU

March 18, 2026 ---- 根據(jù)TrendForce集邦咨詢最新AI Server研究,在大型云端服務(wù)供應(yīng)商(CSP)加大自研芯片力道的情況下,NVIDIA(英偉達(dá))在GTC 2026大會改為著重各領(lǐng)域的AI...

關(guān)鍵字: ASIC GPU CPU
關(guān)閉