解答:
int checkcpu( )
c; c.a = 1;
return(c.b ==1);
}}
剖析:
嵌入式系統開發者應該對little-endian和big-endian模式非常了解。採用little-endian模式的cpu對運算元的存放方式是從低位元組到高位元組,而big-endian模式對運算元的存放方式是從高位元組到低位元組。例如,16bit寬的數0x1234在little-endian模式cpu記憶體中的存放方式(假設從位址0x4000開始存放)為:
記憶體位址
0x4000
0x4001
存放內容
0x34
0x12
而在big-endian模式cpu記憶體中的存放方式則為:
記憶體位址
0x4000
0x4001
存放內容
0x12
0x34
記憶體位址
0x4000
0x4001
0x4002
0x4003
存放內容
0x78
0x56
0x34
0x12
而在big-endian模式cpu記憶體中的存放方式則為:
記憶體位址
0x4000
0x4001
0x4002
0x4003
存放內容
0x12
0x34
0x56
0x78
聯合體union的存放順序是所有成員都從低位址開始存放,面試者的解答利用該特性,輕鬆地獲得了cpu對記憶體採用little-endian還是big-endian模式讀寫。如果誰能當場給出這個解答,那簡直就是乙個天才的程式設計師。
補充:
所謂的大端模式,是指資料的低位(就是權值較小的後面那幾位)儲存在記憶體的高位址中,而資料的高位,儲存在記憶體的低位址中,這樣的儲存模式有點兒類似於把資料當作字串順序處理:位址由小向大增加,而資料從高位往低位放; 所謂的小端模式,是指資料的低位儲存在記憶體的低位址中,而數 據的高位儲存在記憶體的高位址中,這種儲存模式將位址的高低和資料位權有效地結合起來,高位址部分權值高,低位址部分權值低,和我們的邏輯方法一致。
為什麼會有大小端模式之分呢?這是因為在計算機系統中,我們是以位元組為單位的,每個位址單元都對應著乙個位元組,乙個位元組為 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處理器還可以由硬體來選擇是大端模式還是小端模式。
微控制器large模式 對微控制器儲存分配新的認識
51微控制器儲存器採用的是哈佛結構,即是程式儲存器空間和資料儲存器空間分開,程式儲存器和資料儲存器各自有自己的定址方式 定址空間和控制系統。51儲存器可以分為 內部資料儲存器ram 51子系列有128位元組ram,52子系列有256位元組ram 外部資料暫存器ram 片外的ram,最大定址空間2 1...
51微控制器 儲存
8051是傳統的8位微控制器,一般為256b 資料儲存器ram,4k程式儲存器rom 8052有384bytes的ram,8k的rom 在51系列中可定義的資料型別有data,idata,xdata,pdata,bdata data 指晶元核心中位址0x00 0x7f的128個位元組ram區域和4個...
微控制器中的各種儲存器
eeprom和flash的最主要的區別 1.eeprom可以按位擦寫,而flash只能一大片一大片的擦。2.eeprom一般容量都不大,如果大的話,相對與flash就沒有 上的優勢了。3.eeprom讀的速度不需要那麼快,一般用於低端產品,便宜,但是穩定性比flash好些。4.eeprom的儲存單元...