迪文科技论坛

 找回密码
 立即注册
搜索
查看: 1508|回复: 12

【提问】测试发现data,idata,xdata定义变量的问题

[复制链接]

44

主题

57

回帖

347

积分

中级会员

Rank: 3Rank: 3

积分
347
发表于 2023-10-26 16:54:44 | 显示全部楼层 |阅读模式
请问一下,我的c8051工程在已经配置好Memory Model:large:XDATA; code ROM size: large:64K program 情况下,

在使用延时函数 delay_ms();时发现,当使用data 定义的自加加变量时,在for循环里使用,测试出刚好延时1秒的时候,把data 定义的换成是idata定义,延时变为了1.5秒了,把data 定义的换成是xdata定义,延时变为了0.8秒了,这就与正常的认知有区别了,正常的速度是data定义的变量是最快的,idata 次之,xdata最慢,现在这种情况有哪位可以帮忙解释一下?
回复

使用道具 举报

0

主题

932

回帖

7783

积分

论坛元老

Rank: 8Rank: 8

积分
7783
发表于 2023-10-26 17:04:57 | 显示全部楼层
在使用延时函数 delay_ms() 时,使用不同类型的变量会影响延时时间的原因是因为不同类型的变量存储在不同的内存区域,而不同的内存区域的访问速度是不同的。data类型的变量存储在CPU的寄存器中,访问速度最快,所以延时时间最短;idata类型的变量存储在内部RAM中,访问速度比寄存器慢,所以延时时间比data类型的变量长;xdata类型的变量存储在外部RAM中,访问速度最慢,所以延时时间最长。因此,在使用延时函数时,应该根据实际情况选择合适的变量类型,以达到最优的延时效果。
回复

使用道具 举报

44

主题

57

回帖

347

积分

中级会员

Rank: 3Rank: 3

积分
347
 楼主| 发表于 2023-10-26 17:23:51 | 显示全部楼层
fay 发表于 2023-10-26 17:04
在使用延时函数 delay_ms() 时,使用不同类型的变量会影响延时时间的原因是因为不同类型的变量存储在不同的 ...

你好,你的描述也和我的认知是一样的啊,但是现在就是出现认知与实际测试结果不一样啊,不知道你有没有测试过呢?
回复

使用道具 举报

0

主题

932

回帖

7783

积分

论坛元老

Rank: 8Rank: 8

积分
7783
发表于 2023-10-26 17:36:00 | 显示全部楼层
kenny8508 发表于 2023-10-26 17:23
你好,你的描述也和我的认知是一样的啊,但是现在就是出现认知与实际测试结果不一样啊,不知道你有没有测 ...

同标准8051,只是T5L芯片的32k xdata封装在芯片里了;其他的不可拓展做Xdata;可以牺牲部分code空间给Xdata使用
【提问】data idata xdata pdata 等类型变量
http://inforum.dwin.com.cn:20080 ... =6844&fromuid=20891
(出处: 迪文科技论坛)
回复

使用道具 举报

44

主题

57

回帖

347

积分

中级会员

Rank: 3Rank: 3

积分
347
 楼主| 发表于 2023-10-26 18:40:31 | 显示全部楼层
fay 发表于 2023-10-26 17:36
同标准8051,只是T5L芯片的32k xdata封装在芯片里了;其他的不可拓展做Xdata;可以牺牲部分code空间给Xdata ...

现在测试出来的问题是xdata定义出来的变量自增加的速度要比data定义出来的变量还要快,不知道你有没有测试出这个问题呢?
回复

使用道具 举报

0

主题

1276

回帖

5624

积分

论坛元老

Rank: 8Rank: 8

积分
5624
发表于 2023-10-27 08:51:13 | 显示全部楼层
kenny8508 发表于 2023-10-26 18:40
现在测试出来的问题是xdata定义出来的变量自增加的速度要比data定义出来的变量还要快,不知道你有没有测 ...

您这边怎么测试的,测试的文件能发过来看下吗, 我们验证下 。
回复

使用道具 举报

44

主题

57

回帖

347

积分

中级会员

Rank: 3Rank: 3

积分
347
 楼主| 发表于 2023-10-27 09:51:49 | 显示全部楼层
void delay_ms(u16 n){
    int data mi,mj;    //使用data,idata,xdata 分别定义去测试
    for(mi=0;mi<n;mi++)
        for(mj=0;mj<8600;mj++);
}
回复

使用道具 举报

0

主题

932

回帖

7783

积分

论坛元老

Rank: 8Rank: 8

积分
7783
发表于 2023-10-28 20:43:34 | 显示全部楼层
kenny8508 发表于 2023-10-27 09:51
void delay_ms(u16 n){
    int data mi,mj;    //使用data,idata,xdata 分别定义去测试
    for(mi=0;mi ...

周一同事验证一下
回复

使用道具 举报

0

主题

1276

回帖

5624

积分

论坛元老

Rank: 8Rank: 8

积分
5624
发表于 2023-10-30 09:45:17 | 显示全部楼层
本帖最后由 integer_32 于 2023-10-30 10:05 编辑

我这边测试  data最快,xdata最慢。 你们换个C51模板再试试 ?
回复

使用道具 举报

44

主题

57

回帖

347

积分

中级会员

Rank: 3Rank: 3

积分
347
 楼主| 发表于 2023-10-30 15:30:08 | 显示全部楼层
integer_32 发表于 2023-10-30 09:45
我这边测试  data最快,xdata最慢。 你们换个C51模板再试试 ?

你好,我现在使用出厂的8283解析协议(T5L OS BASE)这个模版测试一样的,xdata定义的最快;
你能不能提供一下测试一秒延时这三个类型对应的延时时间呢?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2026-4-18 18:45 , Processed in 0.038411 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表