打印
[STM32F0]

问一个私有变量位置的问题

[复制链接]
446|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 gaoyang9992006 于 2020-5-9 14:52 编辑

用STM32CubeMX配置了一个STM32F072的工程,发现GPIO的初始化变量结构体定义在初始化函数内的开头,而ADC初始化变量的结构体定义在了main函数之前,并且注释内容为:私有变量。
我有点拿不住,虽然放内和放外面都可以正常编译,而且没有任何毛病,但是对于初始化函数的变量不是应该放到函数内更好吗?这个就是一个局部变量,函数执行完就会被消灭。不用占用太多空间。
那么这里的这个
/* Private variables ---------------------------------------------------------*/
ADC_HandleTypeDef hadc;
是放在全局变量位置合适,还是放到
static void MX_ADC_Init(void);
函数内合适?
原来这么做是有原因了,为了方便统一ADC库函数的入口,后面要操作用到的HAL库函数,都是通过hadc这个结构体引用的其成员变量,所以放到了外面。
否则后面想再次使用HAL库函数操作的话,就要重新定义,否则访问不到私有成员变量,因此放到全局里面是一劳永逸的做法。



使用特权

评论回复
沙发
pattywu| | 2020-5-8 17:57 | 只看该作者
初始化结构的内容,以后会再次访问,放函数外面是可以的。
否则的话,还是放函数内部吧。

使用特权

评论回复
板凳
kingkits| | 2020-5-8 19:29 | 只看该作者
这个hadc结构在初始化完了之后还是需要访问的,所以定义为全局变量,static 说明这个结构只在文件中可见。其他文件的函数不能访问(只能通过指针来访问)

使用特权

评论回复
地板
gaoyang9992006|  楼主 | 2020-5-8 20:45 | 只看该作者
看来没有统一意见,其实GPIO的初始化结构体,如果需要后面再次访问配置内容,也可以放外面,如果不需要再次访问,那可以使用局部变量。。所以还是要看需要了。不过我觉得这个作为自动生成的项目配置,应该保持统一才好。

使用特权

评论回复
5
gaoyang9992006|  楼主 | 2020-5-9 14:43 | 只看该作者
你瞅啥 发表于 2020-5-9 12:54
统一个屁意见啊,你没写过代码???hadc初始化就完事了?以后你要用到ADC不用引用hadc??? ...

刚转入HAL。。。你说的对,后来又看了ADC的头文件,发现后面引用ADC基地址的时候,都是通过这个结构体引用的。

使用特权

评论回复
6
晓伍| | 2020-6-6 16:11 | 只看该作者
私有变量是不是就是临时变量

使用特权

评论回复
7
八层楼| | 2020-6-6 16:12 | 只看该作者
这样会不会导致值的不确定性

使用特权

评论回复
8
观海| | 2020-6-6 16:13 | 只看该作者
定义成静态的会不会好点

使用特权

评论回复
9
guanjiaer| | 2020-6-6 16:13 | 只看该作者
实际试一下 看是什么现象呢

使用特权

评论回复
10
heimaojingzhang| | 2020-6-6 16:13 | 只看该作者
水平太低了 跟不上楼主的思路

使用特权

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

本版积分规则

认证:西安公路研究院南京院
简介:主要工作从事监控网络与通信网络设计,以及从事基于嵌入式的通信与控制设备研发。擅长单片机嵌入式系统物联网设备开发,音频功放电路开发。

1939

主题

15842

帖子

204

粉丝