看看是否有数组越界,之前我也出现过这种情况,后来发现是数组越界了。
宁阳刘德华 发表于 2026-4-10 21:24
看看是否有数组越界,之前我也出现过这种情况,后来发现是数组越界了。
只是初始化时候赋值,还没进入main函数。变量默认就是被分配在xdata区域,xdata区域的变量出现u32赋值就会出现问题。idata和data区域就是正常的
_奶咖君_ 发表于 2026-4-10 09:27
所以你出现问题的测试工程呢?
请看最新的下面回复,谢谢。有截图,最最简单的赋值操作代码,截图说的明白些
Rex_D8sA0 发表于 2026-4-11 08:19
只是初始化时候赋值,还没进入main函数。变量默认就是被分配在xdata区域,xdata区域的变量出现u32赋值就 ...
看看汇编语言两个数据是否地址有重叠的地方
Rex_D8sA0 发表于 2026-4-11 08:19
只是初始化时候赋值,还没进入main函数。变量默认就是被分配在xdata区域,xdata区域的变量出现u32赋值就 ...
能把程序发出来一下吗,便于分析
宁阳刘德华 发表于 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:24
1、程序初始化赋值a=1,b=2,x=0,debug显示不成功,都是随机数;
2、程序执行 a=0xf0,成功;程序执行b=0x0f0f,未赋值成功;程序执行x=0xffeeffee,a变成随机数,x未赋值成功,依然是随机数;
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显示:初始化值和赋值操作完全正确;
费解了,换了几个单片机,都是这种情况
Rex_D8sA0 发表于 2026-4-12 19:39
将a,b,x定义到idata或data区域,而非xdata区域,debug显示:初始化值和赋值操作完全正确;
费解了,换 ...
不要用b,b有特殊含义
ercircle 发表于 2026-4-12 21:57
不要用b,b有特殊含义
C语言不是应该区分大小写的吗