打印
[技术问答]

编程在不同内存空间(data xdata bdata)定义变量的注意事项

[复制链接]
1067|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
macpherson|  楼主 | 2024-7-21 23:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
2、data区内最好放局部变量。
3、确保你的程序中没有未调用的函数。
4、程序中遇到的逻辑标志变量可以定义到bdata中,可以大大降低内存占用空间。
5、其他不频繁用到和对运算速度要求不高的变量都放到xdata区。
7、当使用到指针时,要指定指针指向的内存类型。





下表是新型80C51单片机扩展空间的分配情况

空间名称
地址范围
说明
DATAD:00H~7FH片内RAM直接寻址区
BDATAD:20H~2FH片内RAM位寻址区
IDATAI:00H~FFH片内RAM间接寻址区
XDATAX:0000H~FFFFH64KB常规片外RAM数据区
HDATAX:0000H~FFFFFFH16MB扩展片外RAM数据区
CODEC:0000H~FFFFH64K常规片内外ROM代码区
HCONST(ECODE)C:0000H~FFFFFFH16MB扩展片外ROM常数区(对Dallas390可用作代码区)
BANK0~BANK31B0:0000H~FFFFH
:
:
B31:0000H~FFFFH
分组代码区,最大可扩展32X64KB ROM


单片机中关键字data,idata,xdata,pdata的区别data:
固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小。

idata:
固定指前面0x00-0xff的256个RAM,其中前128和data的128完全相同,只是因为访问的方式不同。idata是用类似C中的指针方式访问的。汇编中的语句为:mox ACC,@Rx.(不重要的补充:c中idata做指针式的访问效果很好)

xdata:
外 部扩展RAM,一般指外部0x0000-0xffff空间,用DPTR访问。 pdata:外部扩展RAM的低256个字节,地址出现在A0-A7的上时读写,用movx ACC,@Rx读写。这个比较特殊,而且C51好象有对此BUG, 建议少用。但也有他的优点,具体用法属于中级问题,这里不提。

startup.a51的作用
和 汇编一样,在C中定义的那些变量和数组的初始化就在startup.a51中进行,如果你在定义全局变量时带有数值,如unsigned char data xxx="100

使用特权

评论回复
沙发
vivilyly| | 2024-8-4 09:18 | 只看该作者
data空间对应于单片机的内部RAM,通常容量较小,速度较快。
在此空间定义的变量可以直接寻址,适合频繁访问的变量。
注意不要超过data空间的实际大小,否则会导致编译错误或运行时错误。

使用特权

评论回复
板凳
pixhw| | 2024-8-4 14:00 | 只看该作者
xdata区适用于不经常使用或对运算速度要求不高的变量。由于xdata区较大(通常为64KB),适合存放大型数组、查找表或其他不频繁访问的数据。这样既不会占用宝贵的data区空间,也能满足程序对大数据存储的需求。

使用特权

评论回复
地板
timfordlare| | 2024-8-4 15:15 | 只看该作者
data区是单片机中的内存区域,它拥有最快的访问速度,因此对于需要快速访问的变量,如循环计数器或频繁调用的函数中的局部变量,应优先考虑放在data区内。由于data区空间有限,通常只包含128字节(在某些单片机中可能有所不同),因此合理利用这一区域尤为重要。

使用特权

评论回复
5
i1mcu| | 2024-8-4 16:54 | 只看该作者
访问不同内存空间的速度不同,频繁访问较慢的内存空间可能会影响程序性能。

使用特权

评论回复
6
sesefadou| | 2024-8-5 10:09 | 只看该作者
频繁访问的变量应放在data空间以获得更快的访问速度;不常访问的大数据应放在xdata空间。

使用特权

评论回复
7
updownq| | 2024-8-5 14:40 | 只看该作者
在使用指针时,需要明确指针所指向的内存类型。例如,指向data空间的指针占用1个字节,指向xdata空间的指针占用2个字节,未指定内存类型的通用指针占用3个字节。

使用特权

评论回复
8
mnynt121| | 2024-8-5 21:07 | 只看该作者
静态局部变量的内存使用方式与全局变量相同,不会在函数退出时释放空间,因此应谨慎使用,以免占用过多内存。

使用特权

评论回复
9
belindagraham| | 2024-8-6 10:37 | 只看该作者
xdata空间对应于单片机的外部RAM,容量较大,但访问速度相对较慢。

使用特权

评论回复
10
houjiakai| | 2024-8-6 13:48 | 只看该作者
data:内部RAM的低128字节 (0x00~0x7F)。
bdata:内部RAM的特殊位寻址区 (0x20~0x2F)。
idata:内部RAM的全部256字节 (0x00~0xFF)。
xdata:外部RAM (0x0000~0xFFFF)。
pdata:外部RAM的页寻址模式 (0x00~0xFF)。

使用特权

评论回复
11
tifmill| | 2024-8-6 17:05 | 只看该作者
Data 空间
特点:data空间是单片机内部的RAM,访问速度最快,但容量最小。
使用场景:适合存放频繁访问且对速度要求高的变量,如循环计数器、临时变量等。
定义方法:在变量前加上data关键字。

使用特权

评论回复
12
mmbs| | 2024-8-6 19:01 | 只看该作者
在C51系列单片机编程中,特别是在使用Keil C51编译器时,程序员需要了解如何在不同的内存空间(如data、xdata、bdata)中定义变量

使用特权

评论回复
13
cemaj| | 2024-8-6 20:40 | 只看该作者
由于容量有限,应尽量减少在此区域分配大量数据。
考虑到访问速度,经常使用的变量应放在这里。

使用特权

评论回复
14
10299823| | 2024-8-8 09:38 | 只看该作者
了解目标单片机的内存布局,确保不会超出data或xdata空间的实际可用大小。

使用特权

评论回复
15
olivem55arlowe| | 2024-8-8 11:54 | 只看该作者
某些编译器允许通过编译器选项来控制默认的变量存储空间

使用特权

评论回复
16
lzmm| | 2024-8-8 13:32 | 只看该作者
data区内最好放置局部变量,因为这些变量在函数退出时会自动释放,从而提高内存利用率。相对地,静态局部变量和全局变量则占用更多的资源,因为它们在整个程序运行期间都存在,所以应谨慎使用。

使用特权

评论回复
17
loutin| | 2024-8-8 15:07 | 只看该作者
与xdata相比,访问速度更快但容量受限。
适合存放一些需要快速访问的小型数据结构。

使用特权

评论回复
18
mollylawrence| | 2024-8-8 16:49 | 只看该作者
xdata空间通常比data空间大得多。
访问xdata空间的速度比data空间慢。
对于大型数组或结构体,应使用xdata空间。
使用关键字xdata来定义存储在外部RAM中的变量。

使用特权

评论回复
19
juliestephen| | 2024-8-8 21:29 | 只看该作者
data段是用于存储初始化的全局变量和静态变量。
这个段通常位于低地址空间,大小有限(通常是256字节)。
如果定义的变量超出了data段的大小,编译器会报错。

使用特权

评论回复
20
jonas222| | 2024-8-9 00:33 | 只看该作者
在定义变量时,需要根据实际需求选择合适的内存空间。
如果变量需要较大的存储空间,应使用xdata段而不是data段。
如果变量只需要占用一个或几个二进制位,可以使用bdata段以节省内存。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

46

主题

1625

帖子

1

粉丝