close

俄語口譯職缺

char mem_1[2];

char * const array[] = { // 6bytes in rom

其實和const很像。

};

8052 為 16bit address ,照事理 array[] 應當只佔 2*2=4bytes ,怎麼會變成 6bytes 呢?因為 8052 內部記憶體分成好幾塊,每塊都是自力,必然要透過指令才能進行搬移,可是 c 說話並沒有針對這類佈局做設計,所以只好再用 1byte 來做標籤,所以可以想像,一個 [*ptr=5] 會翻出多少指令,這是寫 PC 或 ARM 的程式設計師沒法想像的處所。

char *array[] = { // 6bytes ????

char code mem_1[2]; // 2bytes in rom

char const * array[] = { // 6bytes in ram????

其餘關鍵字就對照辦理,謹慎keil c的const不是flash,此時假如不會看 map 檔,拼命在搜檢程式碼,那真會看死人的,所以用 Keil C 就要利用 code 等的樞紐字來節制才行,所以此時就要適時的利用 #define 來使程式碼具有可攜性,未來有一天搬到 ARM 乃至是 pc 編成 DLL 檔時時還可以用。

char mem_2[2];

char const * const array[] = { // 4bytes in rom

前面提到,一個 pointer 需要靠此中的標籤來判定到底該用那些指令來存取,而這個判斷還是由指令構成,假如我們肯定 pointer 的指向必然是 " 某種 " 記憶體,這個標籤就可以免卻了,不僅少了空間,更削減多餘的指令履行,這對於某些需要在 1~2us 運作完畢的程式,長短常主要的手法,此時 c 說話的關鍵字就不夠用了,要搬出 8051 compiler 獨有的要害字: code翻譯社xdata翻譯社idata,data,bdata 等 ...

};

char const mem_2[2]; // 2bytes in rom

char *array[] = {

1. 32bit CPU 的 "32bit"

2. 64bit ADDRESS BUS 的 "64bit"

3. CISC

4. RISC

熟習 pointer 的程式師會知道,上面的 array[] 寫法是沒用的,因為阿誰 const 是形容 (char *) ,所以 array[] 仍是會擺在 ram 裡面,要改成下面才行。

改成下面,多加一個 const ,才是正確的型別

第一個 code 告知 compiler array[] 的內容是 " 指向 rom" 的 pointer翻譯

上述手法可以合用在很多cpu,特別是很多內建flash的cpu,紛歧定只有8051才合用,同時也能夠避免掉利用pragma所造成的可攜性問題。

char const mem_1[2]; // 2bytes in rom

第二個 code 告訴 compiler array[] 是放在 rom 內翻譯

mem_1翻譯社 mem_2

};

mem_1, mem_2

};

這裏順路提到一個很重要的問題,一定要想通,就是

上段程式在 PC 上是很正常的程式,可是當搬到 single chip ,如 8052 時,就不是這麼回事了,所以天成翻譯公司在前一篇文章就有提到,可以或許做 memory assignment ,在 embedded system 是很重要的事翻譯而 PC 真個程式, compiler 與 OS 都幫翻譯公司做完了。

};

若是這些陣列是不會變更的,照我之前寫的 " 搞什麼鬼 ?c語言的要害字:const" ,是可以放在 rom 裡面的

char code mem_2[2]; // 2bytes in rom

char mem_2[2]; // 2bytes

char code * code array[] = { // 4bytes in ram????

這些記憶體宣告會放在預設的記憶體位置 ( 文末會提到 ) ,以 8052 為例, internal ram=256bytes ,共佔了 10bytes

上述四點互有什麼關係?因為這四點是相通的,給個提醒,看一下 ARM7 的指令集,每一個 BIT 的意義,之前我看到有些人在吵 CISC/RISC ,其實都吵錯了還不知道,這些東西想通了,這一整篇就沒什麼問題了。

char mem_1[2]; // 2bytes

};

mem_1, mem_2

mem_1, mem_2

mem_1, mem_2

mem_1, mem_2



本篇文章引用自此: http://blog.udn.com/cchahacaptain/2184329有關各國語文翻譯公證的問題歡迎諮詢天成翻譯公司02-77260931
文章標籤
翻譯社
全站熱搜
創作者介紹
創作者 vickieg11m1 的頭像
vickieg11m1

waynepearlep

vickieg11m1 發表在 痞客邦 留言(0) 人氣()