打印
[STM8]

用局部int型静态变量运行过程中会乱变?

[复制链接]
855|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
songqian17|  楼主 | 2018-9-7 12:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用的是IAR FOR STM编译器,一个涵数中定义了int型静态变量
static unsigned int T20min,T1hour;//20,60分钟
T20min,T1hour都是加1的,在运行过程中可以看到会从几十突然变到几千或几万的,但换成两个static unsigned char静态变量就正常了,或者换成数组形变量也没事。为什么会这样?这个静态变量只是局部的,只有这个涵数才用到的。
沙发
huwr| | 2018-9-7 12:32 | 只看该作者

检查下 T20min,T1hour到达60 和24后的判断条件是否正常

使用特权

评论回复
板凳
happy_10| | 2018-9-7 12:35 | 只看该作者
有可能存在越界其他数据把他们破坏了

使用特权

评论回复
地板
bqyj| | 2018-9-7 12:39 | 只看该作者
静态局部变量固定占用了一个内存坑。

使用特权

评论回复
5
songqian17|  楼主 | 2018-9-7 12:42 | 只看该作者

T20min++;
if(T20min>1999)
{
   T20min=0;
}
都是正常的,有时候记时也正常,有时候就乱变。

使用特权

评论回复
6
wenfen| | 2018-9-7 12:45 | 只看该作者
那很有可能别的数据把他破坏了,可以这样去验证,你将这2个静态局部变量定义成一个长度为6的数组,数组前2个和后面2个初始化为0,中间2个给T20min和T1hour用,运行一段时间后,检查下数组的前面2个和后面2是个是不是还是为0

使用特权

评论回复
7
zhuhuis| | 2018-9-7 12:50 | 只看该作者
嗯,如果不为0,那很可能就是哪里把他改变了。

使用特权

评论回复
8
songqian17|  楼主 | 2018-9-7 12:53 | 只看该作者
换成两个static unsigned char静态变量就正常了,或者换成数组形变量也没事,这个涵数用的都是静态变量

使用特权

评论回复
9
chenho| | 2018-9-7 12:57 | 只看该作者
if(T20min>1999)  你变成uchar后 那么这个条件永远不可能满足了,0~255

使用特权

评论回复
10
zwll| | 2018-9-7 13:01 | 只看该作者
建议从根本上找原因,而不是稀里糊涂的把它避开

使用特权

评论回复
11
chuxh| | 2018-9-7 13:04 | 只看该作者

正常不会的;
好像好查下程序看看

使用特权

评论回复
12
songqian17|  楼主 | 2018-9-7 13:06 | 只看该作者
两个uchar后,就不是这个if(T20min>1999) 判断了

使用特权

评论回复
13
juventus9554| | 2018-9-7 13:10 | 只看该作者
嗯,好好好排查下这个原因,肯定能学到不少知识

使用特权

评论回复
14
songqian17|  楼主 | 2018-9-7 13:13 | 只看该作者

唉,还是没有什么结果,算了,先结贴吧,多谢大家啦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

463

主题

5749

帖子

1

粉丝