C 語言嵌入式系統(tǒng)編程修煉之三:內存操作 一、 數(shù)據(jù)指針 在嵌入式系統(tǒng)的編程中,常常要求在特定的內存單元讀寫內容,匯編有對應的MOV指令,而除C/C++以外的其它編程語言基本沒有直接訪問絕對地址的能力。在嵌入式系統(tǒng)的實際調試中,多借助C 語言指針所具有的對絕對地址單元內容的讀寫能力。 以指針直接操作內存多發(fā)生在如下幾種情況: (1) 某I/O芯片被定位在CPU的存儲空間而非I/O 空間,而且寄存器對應于某特定地址; (2) 兩個CPU之間以雙端口RAM通信,CPU需要在雙端口RAM 的特定單元(稱為mail box)書寫內容以在對方CPU 產生中斷; (3) 讀取在ROM 或FLASH 的特定單元所燒錄的漢字和英文字模。 譬如: unsigned char *p = (unsigned char *) 0xF000FF00; *p=11; 以上程序的意義為在絕對地址0xF0000+0xFF00(80186 使用16 位段地址和16 位偏移地址)寫入11。 在使用絕對地址指針時,要注意指針自增自減操作的結果取決于指針指向的數(shù)據(jù)類別。上例中p++后的結果是p=0xF000FF01,若p 指向int,即: int *p = (int *)0xF000FF00; p++(或++p)的結果等同于:p = p + sizeof(int),而p--(或--p)的結果是p = p-sizeof(int)。 同理,若執(zhí)行: long int *p = (long int *)0xF000FF00; 則p++(或++p)的結果等同于:p = p+sizeof(long int) ,而p-(或-p)的結果是p = p-sizeof(long int)。 記。CPU 以字節(jié)為單位編址,而C語言指針以指向的數(shù)據(jù)類型長度作自增和自減。理解這一點對于以指針直接操作內存是相當重要的。
[hide]
C 語言編程修煉之三內存操作.doc
(43.5 KB, 下載次數(shù): 0)
2020-8-19 17:53 上傳
點擊文件名下載附件
下載積分: 聯(lián)盟幣 -5
[\hide]
|