找回密码
 立即注册
查看: 503|回复: 18

请教:启用Large: varables in XDATA后,104us延时被改变了,不知道是什么原因|已解决

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-05-03 13:32:44

109

主题

1900

回帖

5218

积分

论坛元老

积分
5218
发表于 2024-10-12 09:33:19 | 显示全部楼层 |阅读模式
本帖最后由 xxkj2010 于 2024-10-12 14:12 编辑
  1. void delay104us()   //104us延时
  2. {
  3.     unsigned char data i, j;
  4. //        nop_();nop_();
  5.     i = 3;
  6.     j = 57;
  7.     do
  8.     {
  9.         while (--j);
  10.     } while (--i);
  11. }
复制代码
这是从下载工具中生成的软件延时代码,在实际应用中发现一个问题,就是当keil启用Large: varables in XDATA后,延时的时间被改变,如果把延时代码中的data去掉或改成xdata就又恢复正常,不知道是什么原因,请各位大佬给指导一下。keil C51版本为9.54,芯片用STC15W408AS。
001.jpg


回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:368
  • 最近打卡:2025-05-02 11:49:14

0

主题

5

回帖

1196

积分

金牌会员

积分
1196
发表于 2024-10-12 09:46:31 | 显示全部楼层
xdata和data对应的汇编指令应该不一样,单片机执行指令是时钟周期应该也不同,可以进调试模式里看一下。

点评

对的  详情 回复 发表于 2024-10-12 10:04
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4850

回帖

8388

积分

超级版主

DebugLab

积分
8388
发表于 2024-10-12 10:04:04 | 显示全部楼层
as*** 发表于 2024-10-12 09:46
xdata和data对应的汇编指令应该不一样,单片机执行指令是时钟周期应该也不同,可以进调试模式里看一下。 ...

对的
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-05-03 13:32:44

109

主题

1900

回帖

5218

积分

论坛元老

积分
5218
发表于 2024-10-12 10:29:40 | 显示全部楼层

启用不启用,都是unsigned char data i, j;,没有变的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:424
  • 最近打卡:2025-05-03 00:02:01
已绑定手机

19

主题

3191

回帖

4876

积分

论坛元老

积分
4876
发表于 2024-10-12 10:30:01 | 显示全部楼层
还会这样,把延时当成常量那放code里面应该不会差吧
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-05-03 13:32:44

109

主题

1900

回帖

5218

积分

论坛元老

积分
5218
发表于 2024-10-12 10:30:44 | 显示全部楼层
as*** 发表于 2024-10-12 09:46
xdata和data对应的汇编指令应该不一样,单片机执行指令是时钟周期应该也不同,可以进调试模式里看一下。 ...

启用启用Large: varables in XDATA后, unsigned char data i, j;  会被改变吗?

点评

进调试模式看一下汇编  详情 回复 发表于 2024-10-12 11:26
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-05-03 13:32:44

109

主题

1900

回帖

5218

积分

论坛元老

积分
5218
发表于 2024-10-12 10:31:41 | 显示全部楼层
本帖最后由 xxkj2010 于 2024-10-12 14:17 编辑
so*** 发表于 2024-10-12 10:30
还会这样,把延时当成常量那放code里面应该不会差吧

i j不能当常量的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4850

回帖

8388

积分

超级版主

DebugLab

积分
8388
发表于 2024-10-12 11:26:49 | 显示全部楼层
xxkj*** 发表于 2024-10-12 10:30
启用启用Large: varables in XDATA后, unsigned char data i, j;  会被改变吗?

进调试模式看一下汇编
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-05-03 13:32:44

109

主题

1900

回帖

5218

积分

论坛元老

积分
5218
发表于 2024-10-12 13:10:24 | 显示全部楼层
Debu*** 发表于 2024-10-12 11:26
进调试模式看一下汇编

汇编的,看不懂
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-05-03 13:32:44

109

主题

1900

回帖

5218

积分

论坛元老

积分
5218
发表于 2024-10-12 13:41:47 | 显示全部楼层
启用Large: varables in XDATA后,“unsigned char data i, j;” 会不会被强制成 “unsigned char xdata i, j;  ”了?

点评

有可能的  发表于 2024-10-12 13:46
一般设置为data,大数组手动指定xdata  详情 回复 发表于 2024-10-12 13:45
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 15:04 , Processed in 0.171458 second(s), 109 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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