OpenEdv-开源电子网

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

请教关于全局变量使用时注意事项

[复制链接]

2

主题

8

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2021-5-3
在线时间
3 小时
发表于 2021-5-20 22:24:00 | 显示全部楼层 |阅读模式
5金钱
之前发了一个贴,贴了一个奇怪的bug,最终确定是全局变量使用上出了问题。希望可以帮我这个小白解答一下怎么使用全局变量

如图所示程序(在跑马灯hal库版本的基础上改的),最终实验结果为两个灯全亮。按下复位后只有一个灯亮。
另外,这个500ms延时是必须加的,因为a的值不是立刻被修改的,是在2ms左右被修改为其他值。debug和复位都会导致a不再被修改,只有用st下载完运行的那一次a会被修改
为什么变量a和b的值会被修改,(b在程序上未体现)
2.jpg
1.png

最佳答案

查看完整内容[请看2#楼]

在 if(a!=0)之前有没有让PB0拉高呢? 楼主的问题在于烧写程序后自动运行会出错,而复位后就没问题? 那就不用担心了,做成产品使用时由于没有烧写过程自然就不会出现问题了。 原因嘛我也不清楚,猜测是单片机内部负责烧写程序的代码在运行时改变了某些变量。 我用的是串口烧写,习惯在烧写后复位。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

3344

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
8465
金钱
8465
注册时间
2020-5-11
在线时间
3904 小时
发表于 2021-5-20 22:24:01 | 显示全部楼层
本帖最后由 LcwSwust 于 2021-5-21 10:27 编辑

在 if(a!=0)之前有没有让PB0拉高呢?
楼主的问题在于烧写程序后自动运行会出错,而复位后就没问题?
那就不用担心了,做成产品使用时由于没有烧写过程自然就不会出现问题了。
原因嘛我也不清楚,猜测是单片机内部负责烧写程序的代码在运行时改变了某些变量。
我用的是串口烧写,习惯在烧写后复位。

专治疑难杂症
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2021-5-3
在线时间
3 小时
 楼主| 发表于 2021-5-20 22:26:50 | 显示全部楼层
int main(void)
{
    HAL_Init();                     //初始化HAL库   
    Stm32_Clock_Init(360,25,2,8);   //设置时钟,180Mhz
    delay_init(180);                //初始化延时函数
    LED_Init();                     //初始化LED  
    while(1)
    {   delay_ms(500);

                                                //if(a==0)
                                                HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET); //LED0对应引脚PB1拉低,亮,等同于LED0(0)
                                                if(a!=0)
                                                {
                                                        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET); //LED0对应引脚PB1拉低,亮,等同于LED0(0)                            //延时500ms
                                                }
                                                while(1);
    }
}
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2021-5-3
在线时间
3 小时
 楼主| 发表于 2021-5-21 11:03:58 | 显示全部楼层
LcwSwust 发表于 2021-5-21 10:26
在 if(a!=0)之前有没有让PB0拉高呢?
楼主的问题在于烧写程序后自动运行会出错,而复位后就没问题?
那就 ...

谢谢回答,我试过开始将两个引脚拉高了,现象一致。
但是我也不纠结这个原因了,实际用起来不会造成什么影响
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 20:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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