xxkj2010 发表于 2024-10-12 09:33:19

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

本帖最后由 xxkj2010 于 2024-10-12 14:12 编辑

void delay104us()   //104us延时
{
    unsigned char data i, j;
//      nop_();nop_();
    i = 3;
    j = 57;
    do
    {
      while (--j);
    } while (--i);
}这是从下载工具中生成的软件延时代码,在实际应用中发现一个问题,就是当keil启用Large: varables in XDATA后,延时的时间被改变,如果把延时代码中的data去掉或改成xdata就又恢复正常,不知道是什么原因,请各位大佬给指导一下。keil C51版本为9.54,芯片用STC15W408AS。



asxs 发表于 2024-10-12 09:46:31

xdata和data对应的汇编指令应该不一样,单片机执行指令是时钟周期应该也不同,可以进调试模式里看一下。

DebugLab 发表于 2024-10-12 10:04:04

asxs 发表于 2024-10-12 09:46
xdata和data对应的汇编指令应该不一样,单片机执行指令是时钟周期应该也不同,可以进调试模式里看一下。 ...

对的

xxkj2010 发表于 2024-10-12 10:29:40

DebugLab 发表于 2024-10-12 10:04
对的

启用不启用,都是unsigned char data i, j;,没有变的

soma 发表于 2024-10-12 10:30:01

还会这样,把延时当成常量那放code里面应该不会差吧

xxkj2010 发表于 2024-10-12 10:30:44

asxs 发表于 2024-10-12 09:46
xdata和data对应的汇编指令应该不一样,单片机执行指令是时钟周期应该也不同,可以进调试模式里看一下。 ...

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

xxkj2010 发表于 2024-10-12 10:31:41

本帖最后由 xxkj2010 于 2024-10-12 14:17 编辑

soma 发表于 2024-10-12 10:30
还会这样,把延时当成常量那放code里面应该不会差吧
i j不能当常量的

DebugLab 发表于 2024-10-12 11:26:49

xxkj2010 发表于 2024-10-12 10:30
启用启用Large: varables in XDATA后, unsigned char data i, j;会被改变吗?

进调试模式看一下汇编

xxkj2010 发表于 2024-10-12 13:10:24

DebugLab 发表于 2024-10-12 11:26
进调试模式看一下汇编

汇编的,看不懂

xxkj2010 发表于 2024-10-12 13:41:47

启用Large: varables in XDATA后,“unsigned char data i, j;” 会不会被强制成 “unsigned char xdata i, j;”了?
页: [1] 2
查看完整版本: 请教:启用Large: varables in XDATA后,104us延时被改变了,不知道是什么原因|已解决