[STM8] 局部int型静态变量

[复制链接]
1332|21
 楼主| songqian17 发表于 2020-5-26 23:08 | 显示全部楼层 |阅读模式
用的是IAR FOR STM编译器,一个涵数中定义了int型静态变量
static unsigned int T20min,T1hour;//20,60分钟
T20min,T1hour都是加1的,在运行过程中可以看到会从几十突然变到几千或几万的,但换成两个static unsigned char静态变量就正常了,或者换成数组形变量也没事。为什么会这样?这个静态变量只是局部的,只有这个涵数才用到的。

评论

程序片段贴出来,会比较有针对性的分析吧?  发表于 2020-5-27 11:52
huwr 发表于 2020-5-26 23:12 | 显示全部楼层
检查下 T20min,T1hour到达60 和24后的判断条件是否正常
happy_10 发表于 2020-5-26 23:15 | 显示全部楼层
有可能存在越界其他数据把他们破坏了
bqyj 发表于 2020-5-26 23:18 | 显示全部楼层
静态局部变量固定占用了一个内存坑。
 楼主| songqian17 发表于 2020-5-26 23:20 | 显示全部楼层

T20min++;
if(T20min>1999)
{
   T20min=0;
}
都是正常的,有时候记时也正常,有时候就乱变。
wenfen 发表于 2020-5-26 23:24 | 显示全部楼层
那很有可能别的数据把他破坏了,可以这样去验证,你将这2个静态局部变量定义成一个长度为6的数组,数组前2个和后面2个初始化为0,中间2个给T20min和T1hour用,运行一段时间后,检查下数组的前面2个和后面2是个是不是还是为0
zhuhuis 发表于 2020-5-26 23:28 | 显示全部楼层
嗯,如果不为0,那很可能就是哪里把他改变了。
 楼主| songqian17 发表于 2020-5-26 23:31 | 显示全部楼层
换成两个static unsigned char静态变量就正常了,或者换成数组形变量也没事,这个涵数用的都是静态变量
chenho 发表于 2020-5-26 23:33 | 显示全部楼层
if(T20min>1999)  你变成uchar后 那么这个条件永远不可能满足了,0~255
chuxh 发表于 2020-5-26 23:37 | 显示全部楼层
建议从根本上找原因,而不是稀里糊涂的把它避开
chuxh 发表于 2020-5-26 23:41 | 显示全部楼层

正常不会的;
好像好查下程序看看
 楼主| songqian17 发表于 2020-5-26 23:44 | 显示全部楼层
两个uchar后,就不是这个if(T20min>1999) 判断了
juventus9554 发表于 2020-5-26 23:47 | 显示全部楼层
嗯,好好好排查下这个原因,肯定能学到不少知识
 楼主| songqian17 发表于 2020-5-26 23:51 | 显示全部楼层
唉,还是没有什么结果,算了,先结贴吧,多谢大家啦
banyai 发表于 2020-5-27 12:22 | 显示全部楼层
在仿真的时候设置一个变量写断点,跟踪一下,看看什么时候被修改的。
diweo 发表于 2020-5-27 15:32 | 显示全部楼层
本帖最后由 diweo 于 2020-5-27 15:33 编辑

查看map文件,看看紧挨着它们的变量有没有问题。
观海 发表于 2020-6-8 13:15 | 显示全部楼层
局部静态有什么必要吗
guanjiaer 发表于 2020-6-8 13:19 | 显示全部楼层
应该是哪里呗修改了
heimaojingzhang 发表于 2020-6-8 13:19 | 显示全部楼层
有没有可能是别的地方操作指针的时候不行小心修改的呢
keaibukelian 发表于 2020-6-8 13:20 | 显示全部楼层
可以单步运行监测一下h是在什么时候被修改的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

463

主题

5749

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部