打印
[STM8]

局部int型静态变量

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

使用特权

评论回复
沙发
zwll| | 2022-6-12 11:57 | 只看该作者
程序片段贴出来,会比较有针对性的分析吧?

使用特权

评论回复
板凳
pengf| | 2022-6-12 12:02 | 只看该作者
检查下 T20min,T1hour到达60 和24后的判断条件是否正常

使用特权

评论回复
地板
jiajs| | 2022-6-12 12:04 | 只看该作者
有可能存在越界其他数据把他们破坏了

使用特权

评论回复
5
juventus9554| | 2022-6-12 12:06 | 只看该作者
静态局部变量固定占用了一个内存坑。

使用特权

评论回复
6
songqian17|  楼主 | 2022-6-12 12:08 | 只看该作者

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

使用特权

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

使用特权

评论回复
8
zwll| | 2022-6-12 12:14 | 只看该作者
嗯,如果不为0,那很可能就是哪里把他改变了。

使用特权

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

使用特权

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

使用特权

评论回复
11
heweibig| | 2022-6-12 12:23 | 只看该作者
建议从根本上找原因,而不是稀里糊涂的把它避开

使用特权

评论回复
12
wyjie| | 2022-6-12 12:26 | 只看该作者

正常不会的;
好像好查下程序看看
更多操作

使用特权

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

使用特权

评论回复
14
dingy| | 2022-6-12 12:32 | 只看该作者
嗯,好好好排查下这个原因,肯定能学到不少知识

使用特权

评论回复
15
zwll| | 2022-6-12 12:49 | 只看该作者
在仿真的时候设置一个变量写断点,跟踪一下,看看什么时候被修改的。

使用特权

评论回复
16
dingy| | 2022-6-12 12:53 | 只看该作者
查看map文件,看看紧挨着它们的变量有没有问题。

使用特权

评论回复
17
heweibig| | 2022-6-12 12:57 | 只看该作者
局部静态有什么必要吗

使用特权

评论回复
18
zwll| | 2022-6-12 12:59 | 只看该作者
应该是哪里呗修改了

使用特权

评论回复
19
heweibig| | 2022-6-12 13:01 | 只看该作者
有没有可能是别的地方操作指针的时候不行小心修改的呢

使用特权

评论回复
20
stly| | 2022-6-12 13:06 | 只看该作者
可以单步运行监测一下h是在什么时候被修改的

使用特权

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

本版积分规则

463

主题

5749

帖子

1

粉丝