OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4733|回复: 7

有关局部静态变量或全局定量,定义为非0初始值时异常如何解决?

[复制链接]

4

主题

26

帖子

0

精华

高级会员

Rank: 4

积分
742
金钱
742
注册时间
2019-11-13
在线时间
288 小时
发表于 2021-10-8 11:40:01 | 显示全部楼层 |阅读模式
1金钱
如下图所示,如果变量改为=0时,则运行正常。
如下改为=1时,无论是放在局部静态区,还是全局变量,程序都不能运行,有清bss段。直接替换start.s与链接文件,结果一样。
求助。

3.png
1.png
2.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

38

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2021-7-25
在线时间
6 小时
发表于 2021-10-9 09:50:57 | 显示全部楼层
那,你代码是咋样的,怎么改的代码哩?
回复

使用道具 举报

4

主题

26

帖子

0

精华

高级会员

Rank: 4

积分
742
金钱
742
注册时间
2019-11-13
在线时间
288 小时
 楼主| 发表于 2021-10-9 10:10:25 | 显示全部楼层
本帖最后由 ucmic 于 2021-10-9 10:11 编辑
瓦达 发表于 2021-10-9 09:50
那,你代码是咋样的,怎么改的代码哩?

我用的是裸机例程里的,9_int,把中断里的state=0,改成state=1,就不行了,运行时在主函数死掉了。
  1. void gpio1_io18_irqhandler(void)
  2. {
  3.         static unsigned char state = 1;//改成1就死机。

  4.         /*
  5.          *采用延时消抖,中断服务函数中禁止使用延时函数!因为中断服务需要
  6.          *快进快出!!这里为了演示所以采用了延时函数进行消抖,后面我们会讲解
  7.          *定时器中断消抖法!!!
  8.           */

  9.         delay(10);
  10.         if(gpio_pinread(GPIO1, 18) == 0)        /* 按键按下了  */
  11.         {
  12.                 state = !state;
  13.                 beep_switch(state);
  14.         }
  15.         
  16.         gpio_clearintflags(GPIO1, 18); /* 清除中断标志位 */
  17. }
复制代码


OK.png
NG.png
回复

使用道具 举报

0

主题

134

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
301
金钱
301
注册时间
2020-5-8
在线时间
20 小时
发表于 2021-10-9 10:15:52 | 显示全部楼层
啊这,你改的时候,代码的逻辑检查了没,不是说想怎么改就怎么改的
回复

使用道具 举报

4

主题

26

帖子

0

精华

高级会员

Rank: 4

积分
742
金钱
742
注册时间
2019-11-13
在线时间
288 小时
 楼主| 发表于 2021-10-9 10:20:11 | 显示全部楼层
无忧花开 发表于 2021-10-9 10:15
啊这,你改的时候,代码的逻辑检查了没,不是说想怎么改就怎么改的

1.我本来是想写一个自己的,发现初始值用0不合适,需要改成非0的,结果找很久发现是非0的初始值问题。
2.为了确定问题,现在尝试,直接用例程里的,随便拿一个静态变或全局变量,只要改成非0的初始值,都直接就死机了,不像MKD的,初始值可以随便定。
回复

使用道具 举报

4

主题

26

帖子

0

精华

高级会员

Rank: 4

积分
742
金钱
742
注册时间
2019-11-13
在线时间
288 小时
 楼主| 发表于 2021-10-9 10:24:28 | 显示全部楼层
有谁可以帮忙试一下,用linux-imx6u的裸机例程,随便找一个,uart之前的例程,(uart后的还没有学到,没试),随便定义一个全局变量,或改一下静态局部变量,改为非0的,下到开发板上帮忙试一下,是否会死机。
回复

使用道具 举报

9

主题

890

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2390
金钱
2390
注册时间
2019-9-25
在线时间
397 小时
发表于 2021-10-12 10:25:26 | 显示全部楼层
全局变量与静态变量没有初始化或初始化值为0时,都会放在.bss段。初始化为非0值,则放在.data段。
可以不要所有的变量都设置为非0值,可试试设置一两个看看,可能是空间没给够,导致异常。
回复

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2021-2-19
在线时间
5 小时
发表于 2021-10-12 13:11:50 | 显示全部楼层
有的编译器不支持这种static unsigned char state = 1;
你写成下面这样试试
static unsigned char state;
state = 1;
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 14:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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