宁阳刘德华 发表于 2026-4-10 21:24:58

看看是否有数组越界,之前我也出现过这种情况,后来发现是数组越界了。

Rex_D8sA0 发表于 2026-4-11 08:19:09

宁阳刘德华 发表于 2026-4-10 21:24
看看是否有数组越界,之前我也出现过这种情况,后来发现是数组越界了。

只是初始化时候赋值,还没进入main函数。变量默认就是被分配在xdata区域,xdata区域的变量出现u32赋值就会出现问题。idata和data区域就是正常的

Rex_D8sA0 发表于 2026-4-11 08:20:15

_奶咖君_ 发表于 2026-4-10 09:27
所以你出现问题的测试工程呢?

请看最新的下面回复,谢谢。有截图,最最简单的赋值操作代码,截图说的明白些

宁阳刘德华 发表于 2026-4-11 22:52:41

Rex_D8sA0 发表于 2026-4-11 08:19
只是初始化时候赋值,还没进入main函数。变量默认就是被分配在xdata区域,xdata区域的变量出现u32赋值就 ...

看看汇编语言两个数据是否地址有重叠的地方

宁阳刘德华 发表于 2026-4-11 22:54:04

Rex_D8sA0 发表于 2026-4-11 08:19
只是初始化时候赋值,还没进入main函数。变量默认就是被分配在xdata区域,xdata区域的变量出现u32赋值就 ...

能把程序发出来一下吗,便于分析

Rex_D8sA0 发表于 2026-4-12 19:24:18

宁阳刘德华 发表于 2026-4-11 22:54
能把程序发出来一下吗,便于分析

xdata unsigned char a = 1;
xdata unsigned int b = 2;
xdata unsigned long x = 0; // 只要加这个

//========================================================================
// 函数: void        main(void)
// 描述: 主函数程序.
// 参数: None.
// 返回: None.
//========================================================================
void main(void)
{
        a = 0xf0;
    b = 0x0f0f;
    x = 0xffeeffee;    // 只要执行这句,前面两个变量就会变为随机值

        while(1);
}

Rex_D8sA0 发表于 2026-4-12 19:26:19

Rex_D8sA0 发表于 2026-4-12 19:24


1、程序初始化赋值a=1,b=2,x=0,debug显示不成功,都是随机数;
2、程序执行 a=0xf0,成功;程序执行b=0x0f0f,未赋值成功;程序执行x=0xffeeffee,a变成随机数,x未赋值成功,依然是随机数;

Rex_D8sA0 发表于 2026-4-12 19:39:47

Rex_D8sA0 发表于 2026-4-12 19:26
1、程序初始化赋值a=1,b=2,x=0,debug显示不成功,都是随机数;
2、程序执行 a=0xf0,成功;程序执行b= ...

将a,b,x定义到idata或data区域,而非xdata区域,debug显示:初始化值和赋值操作完全正确;

费解了,换了几个单片机,都是这种情况

ercircle 发表于 2026-4-12 21:57:43

Rex_D8sA0 发表于 2026-4-12 19:39
将a,b,x定义到idata或data区域,而非xdata区域,debug显示:初始化值和赋值操作完全正确;

费解了,换 ...


不要用b,b有特殊含义






shigeng 发表于 2026-4-13 00:23:22

ercircle 发表于 2026-4-12 21:57
不要用b,b有特殊含义

C语言不是应该区分大小写的吗
页: 1 [2] 3 4
查看完整版本: STC8G1K08A Keil5所有变量都成了随机数