找回密码
 立即注册
查看: 199|回复: 42

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2026-04-13 09:43:31

1

主题

19

回帖

51

积分

注册会员

积分
51
发表于 2026-4-8 17:48:50 | 显示全部楼层 |阅读模式

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

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

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2026-04-13 09:43:31

1

主题

19

回帖

51

积分

注册会员

积分
51
发表于 2026-4-8 17:50:47 | 显示全部楼层
情况4的变量,u32调整为2个u16,可以赋值通过。但是情况5执行之后,这些变量依然是随机数,程序运行中,也会在不知情情况下变成随机数,变量失效,程序完全无法运行
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:784
  • 最近打卡:2026-05-01 00:00:40
已绑定手机

19

主题

3383

回帖

7207

积分

论坛元老

积分
7207
发表于 2026-4-8 17:55:23 来自手机 | 显示全部楼层
volatile 关键字了解一下
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:393
  • 最近打卡:2026-04-30 08:56:47

849

主题

1万

回帖

2万

积分

管理员

积分
23131
发表于 2026-4-8 18:55:21 | 显示全部楼层
unsigned char xdata  k =0;
回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:667
  • 最近打卡:2026-04-30 09:07:31

33

主题

2963

回帖

6704

积分

论坛元老

积分
6704
发表于 2026-4-9 10:32:45 | 显示全部楼层
工程发上来瞅瞅
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:234
  • 最近打卡:2026-04-30 01:26:24
已绑定手机

22

主题

401

回帖

1816

积分

金牌会员

DIY玩家

积分
1816
发表于 2026-4-9 10:33:53 | 显示全部楼层
Rex_D*** 发表于 2026-4-8 17:50
情况4的变量,u32调整为2个u16,可以赋值通过。但是情况5执行之后,这些变量依然是随机数,程序运行中,也 ...

数据可能会受多情况影响
写数据到内存要唯一
读数据要最新的值
真正的学徒往往怀着大师的心
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2026-04-13 09:43:31

1

主题

19

回帖

51

积分

注册会员

积分
51
发表于 2026-4-9 14:50:03 | 显示全部楼层
so*** 发表于 2026-4-8 17:55
volatile 关键字了解一下

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2026-04-13 09:43:31

1

主题

19

回帖

51

积分

注册会员

积分
51
发表于 2026-4-9 14:54:01 | 显示全部楼层
狂热*** 发表于 2026-4-9 10:33
数据可能会受多情况影响
写数据到内存要唯一
读数据要最新的值

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

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2026-04-13 09:43:31

1

主题

19

回帖

51

积分

注册会员

积分
51
发表于 2026-4-9 14:54:59 | 显示全部楼层
_奶*** 发表于 2026-4-9 10:32
工程发上来瞅瞅

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

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:667
  • 最近打卡:2026-04-30 09:07:31

33

主题

2963

回帖

6704

积分

论坛元老

积分
6704
发表于 2026-4-10 09:27:19 | 显示全部楼层
Rex_D*** 发表于 2026-4-9 14:54
测试代码也这样,就是上面:情况4,换成变量定义在idata或data区域就是正常的,想不明白了~ ...

所以你出现问题的测试工程呢?
参考例程并不是对技术参 考手册的补充,而是对技术参 考手册的解释。
技术参 考手册不应该需要参考例程作为补充,而是解释成了参考例程的样子
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2026-5-1 10:19 , Processed in 0.124159 second(s), 100 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表