当前位置:首页 » 文件传输 » c语言访问固定地址变量
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言访问固定地址变量

发布时间: 2022-05-23 14:07:21

① 51单片机c语言怎样访问固定的内存空间

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;
这样就把变量存在指定的两个地址单元了