char const * const array[] = { // 4bytes in rom
這裏順道提到一個很主要的問題,必然要想通,就是
char const mem_1[2]; // 2bytes in rom
};
char *array[] = { // 6bytes ????
若是這些陣列是不會更改 翻譯,照我之前寫的 " 搞什麼鬼 ?c說話的關頭字:const" ,是可以放在 rom 裡面 翻譯
上述四點互有什麼關係?因為這四點是相通的,給個提示,看一下 ARM7 的指令集,每一個 BIT 的意義,之前我看到有些人在吵 CISC/RISC ,其實都吵錯了還不知道,這些器材想通了,這一整篇就沒什麼問題了。
第二個 code 告知 compiler array[] 是放在 rom 內。
上述手法可以合用在許多cpu,特別是很多內建flash 翻譯cpu,紛歧定只有8051才合用,同時也能夠避免掉使用pragma所造成的可攜性問題。
char code mem_1[2]; // 2bytes in rom
char mem_2[2];
char mem_1[2]; // 2bytes
char mem_2[2]; // 2bytes
這些記憶體宣佈會放在預設的記憶體位置 ( 文末會提到 ) ,以 8052 為例, internal ram=256bytes ,共佔了 10bytes
};
熟習 pointer 的程式師會知道,上面的 array[] 寫法是沒用的,因為誰人 const 是形容 (char *) ,所以 array[] 仍是會擺在 ram 裡面,要改成下面才行。
};
mem_1, mem_2
char code mem_2[2]; // 2bytes in rom
};
第一個 code 告知 compiler array[] 的內容是 " 指向 rom" 的 pointer 翻譯社
其餘關頭字就對照打點,謹慎keil c的const不是flash,此時若是不會看 map 檔,拼命在搜檢程式碼,那真會看死人的,所以用 Keil C 就要使用 code 等 翻譯樞紐字來節制才行,所以此時就要適時的使用 #define 來使程式碼具有可攜性,將來有一天搬到 ARM 甚至是 pc 編成 DLL 檔時時還可以用。
};
char const * array[] = { // 6bytes in ram????
mem_1 翻譯公司 mem_2
。-> 翻譯社|,-> 翻譯公司|的-> 翻譯char *array[] = {
char mem_1[2];
改成下面,多加一個 const ,才是准確的型別
};
前面提到,一個 pointer 需要靠個中的標籤來判斷到底該用那些指令來存取,而這個判斷還是由指令構成,假如我們肯定 pointer 的指向必然是 " 某種 " 記憶體,這個標籤就能夠免卻了,不單少了空間,更削減多餘的指令履行,這對於某些需要在 1~2us 運作完畢 翻譯程式,是非常主要 翻譯手法,此時 c 說話的關鍵字就不夠用了,要搬出 8051 compiler 獨有的關頭字: code,xdata,idata,data 翻譯公司bdata 等 ...
1. 32bit CPU 翻譯 "32bit"
2. 64bit ADDRESS BUS 翻譯 "64bit"
3. CISC
4. RISC
上段程式在 PC 上是很正常 翻譯程式,可是當搬到 single chip ,如 8052 時,就不是這麼回事了,所以我在前一篇文章就有提到,能夠做 memory assignment ,在 embedded system 是很主要的事 翻譯社而 PC 端 翻譯程式, compiler 與 OS 都幫你做完了 翻譯社
mem_1, mem_2
mem_1, mem_2
mem_1, mem_2
其實和const很像。
char code * code array[] = { // 4bytes in ram????
char const mem_2[2]; // 2bytes in rom
8052 為 16bit address ,照事理 array[] 應該只佔 2*2=4bytes ,怎麼會釀成 6bytes 呢?因為 8052 內部記憶體分成好幾塊,每塊都是自力,必然要透過指令才能進行搬移,可是 c 說話並沒有針對這類佈局做設計,所以只好再用 1byte 來做標籤,所以可以想像,一個 [*ptr=5] 會翻出幾許指令,這是寫 PC 或 ARM 的程式設計師沒法想像的地方。
char * const array[] = { // 6bytes in rom
mem_1 翻譯公司 mem_2
文章出自: http://blog.udn.com/cchahacaptain/2184329有關翻譯的問題歡迎諮詢天成翻譯社