C中定義的全局變數、數組就是固定的了,直接操作吧,比較方便。實際的地址是編譯器自動分配的,具體在哪裡要看匯編。
匯編里可以直接指定,這是匯編的好處。
以下轉自網路
在網上看到有人提到在keil中使用_at_進行絕對地址定位問題,我簡單介紹一下它的用法。
使用_at_關鍵字對存儲器進行絕對地址定位程序如下
#i nclude<reg51.h>
char xdata LED_Data[50] _at_ 0x8000;
main()
{
LED_Data[0] = 0x23;
}
在keil中運行以上程序可以在存儲器窗口中輸入 x:0x8000 可以看到0x8000地址中的值為0x23.
值得指出的幾點是
1.在給變數LED_Data[50]定位絕對地址空間時,不能對其賦初值。
2.char xdata LED_Data[50] _at_ 0x8000;這條語句不能主函數中。有些網友提到在按著keil說明中用_at_進行絕對地址定位時,編譯會出現錯誤274,就是將這條語句放在主函數中的原因。
3.keil中地址是自動分配的,所以除非特殊情況否則不提倡使用絕對地址定位。初學者因帖別注意。不要把c當作匯編使用。
② 單片機C語言怎樣申請固定地址的變數操作步驟解析
在Keil中有兩種方式申請固定地址的變數:
1、使用CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD
比如:dat=DBYTE[0x40];
dat=XBYTE[0x1000];
2、使用_at_
比如:
idata dat _at_ 0x40;
xdata dat _at_0xE000;
③ 關於C語言的 變數 地址 和 值
以下是個人理解:
變數具有類型,而類型是編譯器用來分配存儲空間的模板,比如int型分配4個位元組,也就是分配了32位。所以,定義一個變數並不代表分配了一個空間,只是定義了一個分配模板。
只有使用了已經定義的變數,才為其分配空間,如int i=0;
分配空間給所定義的變數和使用變數,兩個的本質是一樣的,並且分配了空間就是使用變數來存儲數值。而存儲了值的那個變數的空間是內存里的存儲單元,所以變數在內存中有一個地址,這個地址是隨機的,也只有使用變數時候才分配的。
其實,直接訪問變數就是直接訪問一個地址,等價於訪問一個指針,如果一個變數里存儲的值是另一地址,那麼就把這個變數當做指針!
本質上,指針和變數沒有任何區別,他們的區別在於:為指針分配的地址空間是固定的,如32位機器就分配32位,64位機器就分配64位;而為變數分配的地址空間是因不同約定的類型的不同而不同的,這里說的是約定的類型,如int分配4個位元組,long int分配8個位元組,float分配4個位元組。
(以上的一些變數類型所佔的位元組是因為編譯平台和編譯機器不同而會有所區別,但現在的機器和平台幾乎都是如此的。)
④ C語言中如何讀取一個已知地址中存儲的變數
直接用
(char*)(0x000)
補充一下,不同類型的變數占的存儲單元(位元組)是不同的,char*只是該位元組的值,而int*則是該位元組和後面3個位元組(總共4個位元組)的值,你要確定到底一次讀多少位元組,選擇合適類型的指針。
⑤ 單片機C語言怎樣申請固定地址的變數操作
void delay()
{
unsigned int i;
for(i=0;i<1500;i++)
}
void fun(void)
{
unsigned char i;
for (i=0;i<8;i++)
{
P0=1<<i;
delay();
}
while(--i)
{
P0=1<<i;
delay();
}
}
void main()
{
while(1)
{
fun();
}
}
⑥ c語言中可以定義固定變數的地址嗎
變數就有地址,但是常量不會有地址。
比如
const int * p=&a;
就定義了一個變數指針,指向const int型的變數a
⑦ 51單片機把數據存入指定的地址或在讀指定地址的數據用C語言怎麼寫
1. 絕對宏:
在程序中,用「#include<absacc.h>」即可使用其中定義的宏來訪問絕對地址,包括CBYTE、XBYTE、PWORD、DBYTE、CWORD、XWORD、PBYTE、DWORD
具體使用可看一看absacc.h便知,例如:
rval=CBYTE[0x0002];指向程序存貯器的0002h地址
rval=XWORD[0x0002];指向外RAM的0002h地址
2. _at_關鍵字
直接在數據定義後加上_at_ const即可,但是注意:
(1)絕對變數不能被初使化;
(2)bit型函數及變數不能用_at_指定。
例如:
idata struct link list _at_ 0x40;指定list結構從40h開始。
xdata char text[25b] _at_0xE000;指定text數組從0E000H開始
提示:如果外部絕對變數是I/O埠等可自行變化數據,需要使用volatile關鍵字進行描述,請參考absacc.h。
⑧ c語言中可以定義固定變數的地址嗎萬分感謝
不能,在一開始創建的時候計算機就會自動分配給它特定的地址,況且有些地址還是不能訪問的。
⑨ C語言中如何直接訪問一個指定地址
間接訪問是通過指針變數存放的地址訪問的,直接訪問就不用藉助指針變數,指針可以認為是地址,但不是變數,指針變數才是變數,只是國內書都把那兩個混在一起
⑩ 單片機c語言怎麼把一個變數放到固定的地址
int *P;
P = 28h;
*P = 0x1234;
這樣就把變數存在指定的兩個地址單元了