【stm32f103學(xué)習(xí)筆記】字、半字、字節(jié)和sizeof()
CPU按照其處理信息的字長(zhǎng)可以分為:八位微處理器、十六位微處理器、三十二位微處理器以及六十四位微處理器等。
CPU最大能查找多大范圍的地址叫做尋址能力 ,CPU的尋址能力以字節(jié)為單位 ,如32位尋址的CPU可以尋址2的32次方大小的地址也就是4G,這也是為什么32位的CPU最大能搭配4G內(nèi)存的原因 ,再多的話CPU就找不到了。
1)stm32是32bit處理器,所以它的字是32bit的(一次處理4字節(jié)長(zhǎng)度的數(shù)據(jù))。半字自然就是16bit(2字節(jié));字節(jié)是8bit
stm32和傳統(tǒng)的arm相比最大的好處就是不需要對(duì)齊,三種類型的數(shù)據(jù)可以在內(nèi)存中無(wú)縫的存放。而傳統(tǒng)的arm7或arm9等是照著地址對(duì)齊的,就是說(shuō)不管8bit或者16bit的數(shù)據(jù)都要占用4個(gè)字節(jié)的空間,這樣的結(jié)果就是造成內(nèi)存的浪費(fèi)。
寄存器的訪問
半字型的寄存器用u16類型的變量訪問,u8只能訪問低8位,u32讀的時(shí)候沒問題,寫的時(shí)候會(huì)因編譯器的不同而出現(xiàn)偏差。12
2)在MSP430上,由于它是16bit處理器,所以它的字是16bit的。半字=字節(jié)=8bit。
…….
sizeof()看兩個(gè)例子:
(1) int應(yīng)該是2還是4?
VC++默認(rèn)int是longint,長(zhǎng)度是4 TC默認(rèn)int是shortint,長(zhǎng)度是2123
int類型所占的字節(jié)數(shù)依賴于機(jī)器的字長(zhǎng), 有16位, 32位, 64位.我們現(xiàn)在買電腦時(shí)所說(shuō)的32位機(jī), 64位機(jī)就是指這個(gè), 在16位機(jī)上int長(zhǎng)度是2, 在32位機(jī)上長(zhǎng)度是4, 所以在編碼的時(shí)候需要寫int長(zhǎng)度時(shí), 我們不能想當(dāng)然的寫2或4, 而應(yīng)使用sizeof來(lái)計(jì)算, sizeof(int)這樣就不會(huì)錯(cuò)了, 而且提高了程序的兼容性。
(2) A機(jī)器int占用2個(gè)字節(jié),B機(jī)器占用4字節(jié),申請(qǐng)內(nèi)存存放一個(gè)int數(shù)據(jù)。
如寫入:
int*i=(int*)malloc(2);12
那么在A機(jī)器中能正常運(yùn)行,在B上則會(huì)報(bào)錯(cuò)
應(yīng)寫成:
int*i=(int*)malloc(sizeof());12
這樣A、B機(jī)器中都能兼容。





