请教:启用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。
xdata和data对应的汇编指令应该不一样,单片机执行指令是时钟周期应该也不同,可以进调试模式里看一下。 asxs 发表于 2024-10-12 09:46
xdata和data对应的汇编指令应该不一样,单片机执行指令是时钟周期应该也不同,可以进调试模式里看一下。 ...
对的 DebugLab 发表于 2024-10-12 10:04
对的
启用不启用,都是unsigned char data i, j;,没有变的 还会这样,把延时当成常量那放code里面应该不会差吧 asxs 发表于 2024-10-12 09:46
xdata和data对应的汇编指令应该不一样,单片机执行指令是时钟周期应该也不同,可以进调试模式里看一下。 ...
启用启用Large: varables in XDATA后, unsigned char data i, j;会被改变吗? 本帖最后由 xxkj2010 于 2024-10-12 14:17 编辑
soma 发表于 2024-10-12 10:30
还会这样,把延时当成常量那放code里面应该不会差吧
i j不能当常量的 xxkj2010 发表于 2024-10-12 10:30
启用启用Large: varables in XDATA后, unsigned char data i, j;会被改变吗?
进调试模式看一下汇编 DebugLab 发表于 2024-10-12 11:26
进调试模式看一下汇编
汇编的,看不懂 启用Large: varables in XDATA后,“unsigned char data i, j;” 会不会被强制成 “unsigned char xdata i, j;”了?
页:
[1]
2