Rex_D8sA0 发表于 2026-4-8 17:48:50

STC8G1K08A Keil5所有变量都成了随机数


发现一个巨大的bug,现在软件设计没法进行了:
1、STC8G1K08A Keil5开发环境,不管是局部变量还是全局变量,初始化赋值之后,运行过程中都会变成随机数(即使没有再次赋值也会变成随机数);

2、将这些变量改为idata或data(也就是变成直取内存和间接内存变量),运行很稳定,变量不会变随机数;
3、改回xdata或编译器默认分配,依然是随机数;
4、其中一个现象是:前面多个非u32变量初始化赋值,后面跟个u32变量初始化赋值,执行u32变量赋值之后,前面非u32变量全部为随机数;(编译器默认分配这些变量为xdata);
5、调用某些初始化接口官方库函数,也会出现情况4;

现在软件没法设计了,STC8G1K08A 本来idata和data空间很小,空间不够,分配到xdata变量,运行中全部不知道什么时候就变成随机数了,软件完全失控了,现在软件没法进行了。
有没有大神帮看看这个是什么情况,感激不尽!

Rex_D8sA0 发表于 2026-4-8 17:50:47

情况4的变量,u32调整为2个u16,可以赋值通过。但是情况5执行之后,这些变量依然是随机数,程序运行中,也会在不知情情况下变成随机数,变量失效,程序完全无法运行

soma 发表于 2026-4-8 17:55:23

volatile 关键字了解一下

神农鼎 发表于 2026-4-8 18:55:21

unsigned char xdatak =0;

_奶咖君_ 发表于 2026-4-9 10:32:45

工程发上来瞅瞅{:4_200:}

狂热主宰 发表于 2026-4-9 10:33:53

Rex_D8sA0 发表于 2026-4-8 17:50
情况4的变量,u32调整为2个u16,可以赋值通过。但是情况5执行之后,这些变量依然是随机数,程序运行中,也 ...

数据可能会受多情况影响
写数据到内存要唯一
读数据要最新的值

Rex_D8sA0 发表于 2026-4-9 14:50:03

soma 发表于 2026-4-8 17:55
volatile 关键字了解一下

用过了,现象和没加volatile一样~~

Rex_D8sA0 发表于 2026-4-9 14:54:01

狂热主宰 发表于 2026-4-9 10:33
数据可能会受多情况影响
写数据到内存要唯一
读数据要最新的值

debug时候,看变量值:
4、其中一个现象是:前面多个非u32变量初始化赋值,后面跟个u32变量初始化赋值,执行u32变量赋值之后,前面非u32变量全部为随机数;(编译器默认分配这些变量为xdata);

这种情况如果变量定义在idata或data区域,初始化过的变量就不会变。不知道为什么

Rex_D8sA0 发表于 2026-4-9 14:54:59

_奶咖君_ 发表于 2026-4-9 10:32
工程发上来瞅瞅

测试代码也这样,就是上面:情况4,换成变量定义在idata或data区域就是正常的,想不明白了~

_奶咖君_ 发表于 2026-4-10 09:27:19

Rex_D8sA0 发表于 2026-4-9 14:54
测试代码也这样,就是上面:情况4,换成变量定义在idata或data区域就是正常的,想不明白了~ ...

所以你出现问题的测试工程呢?
页: [1] 2 3 4
查看完整版本: STC8G1K08A Keil5所有变量都成了随机数