OpenEdv-开源电子网

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

学习原子哥F4探索者RTC例程关于RTC_DateTypeDef结构体声明的疑问

[复制链接]

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2019-10-30
在线时间
25 小时
发表于 2020-3-25 12:56:43 | 显示全部楼层 |阅读模式
10金钱
学习原子哥F4探索者RTC例程关于RTC_DateTypeDef结构体声明的疑问结构体原型在stm32f4xx_rtc.c文件中
typedef struct
{
  uint8_t RTC_Hours;    /*!< Specifies the RTC Time Hour.
                        This parameter must be set to a value in the 0-12 range
                        if the RTC_HourFormat_12 is selected or 0-23 range if
                        the RTC_HourFormat_24 is selected. */

  uint8_t RTC_Minutes;  /*!< Specifies the RTC Time Minutes.
                        This parameter must be set to a value in the 0-59 range. */

  uint8_t RTC_Seconds;  /*!< Specifies the RTC Time Seconds.
                        This parameter must be set to a value in the 0-59 range. */

  uint8_t RTC_H12;      /*!< Specifies the RTC AM/PM Time.
                        This parameter can be a value of @Ref RTC_AM_PM_Definitions */
}RTC_TimeTypeDef;


main.c文件中 这样声明
int main

          RTC_DateTypeDef RTC_DateStruct;
             XXXXXXXXXXXX//省略部分代码
         sprintf((char*)tbuf,"Time:%02d:%02d:%02d",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds);

             XXXXXXXXXX//省略部分代码



rcc.c文件中 声明
ErrorStatus RTC_Set_Time(u8 hour,u8 min,u8 sec,u8 ampm)
{
        RTC_TimeTypeDef RTC_TimeTypeInitStructure;
       
        RTC_TimeTypeInitStructure.RTC_Hours=hour;
        RTC_TimeTypeInitStructure.RTC_Minutes=min;
        RTC_TimeTypeInitStructure.RTC_Seconds=sec;
        RTC_TimeTypeInitStructure.RTC_H12=ampm;
       
        return RTC_SetTime(RTC_Format_BIN,&RTC_TimeTypeInitStructure);
       
}


疑问1:为什么不用统一的变量名
疑问2:为什么替换成统一的变量名也没有出现编译错误

背景:C语言突击小白
麻烦从C语言角度帮忙解答一下




最佳答案

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

不统一命名是为了区分开来
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

15

主题

1061

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
3623
金钱
3623
注册时间
2019-8-14
在线时间
1054 小时
发表于 2020-3-25 12:56:44 | 显示全部楼层
不统一命名是为了区分开来
回复

使用道具 举报

6

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2019-5-24
在线时间
16 小时
发表于 2020-3-27 18:49:58 | 显示全部楼层
本帖最后由 liuhuayi 于 2020-3-27 18:59 编辑
hou18 发表于 2020-3-25 12:56
不统一命名是为了区分开来

请问主函数中重新定义的两个结构体变量并没有对他们进行初始化,是怎么打印出值的???RTC_GetTime(RTC_Format_BIN,&RTC_TimeStruct);这个函数是将当前的时间赋值给结构体吗???
回复

使用道具 举报

4

主题

82

帖子

0

精华

高级会员

Rank: 4

积分
747
金钱
747
注册时间
2018-9-1
在线时间
177 小时
发表于 2020-3-27 19:40:24 | 显示全部楼层


1.为什么不用统一的变量名?太奇葩的问题
-- 假设你叫张三,别人就都得起名叫张三吗?一个地方用int a;难道所有地方的int变量都得用a这个名字?
反过来说,如果“张三”这个名字对两个人都是有重要的实际意义的,那也可以都用一个名字,只要两人不在一个地方就不会出乱子。

2.为什么改成统一名字可以通过编译
-- 去看下C语言作用域和链接性相关文章吧,代码块内部的变量会屏蔽掉外部同名变量。就如我在屋里喊你张三,跟屋外其它张三没关系。  

3.没初始化就打印出值  
-- 即使定义时没初始化,后边其它代码处也可能给变量赋值。所以是否有赋值操作,你要仔细看代码。
-- 就算一个变量不初始化也没重新赋值,它也是实际存在于内存中的,只不过值是未知的,所以当然能打印了。只不过打印出来没意义,或许有人只想看看未初始化的变量值会是多少。
uevip#126.com
回复

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2019-10-30
在线时间
25 小时
 楼主| 发表于 2020-3-28 02:14:52 | 显示全部楼层
ultraelec 发表于 2020-3-27 19:40
1.为什么不用统一的变量名?太奇葩的问题
-- 假设你叫张三,别人就都得起名叫张三吗?一个地方用int a ...

十分感谢点拨小白,经过这两天恶补谭浩强C,已经明白了变量作用域这个知识点。
回想一下当时产生问题1、2时的思维,那时是认为同一个(RTC_TimeTypeDef)怎么会有两个名字,取一个名字编译了一下发现也没报错
现在看来是没深刻理解:变量就是内存中的一段存储空间。在函数内部可以任意定义名字,只要合语法并关联其地址即可,名字是给程序员看的,机器只认识地址。
回复

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2019-10-30
在线时间
25 小时
 楼主| 发表于 2020-3-28 02:18:24 | 显示全部楼层
liuhuayi 发表于 2020-3-27 18:49
请问主函数中重新定义的两个结构体变量并没有对他们进行初始化,是怎么打印出值的???RTC_GetTime(RTC_ ...

请问是问的下行这个语句吗?
RTC_DateTypeDef    RTC_DateStruct;
如果是,我可以给你解答一下
回复

使用道具 举报

6

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2019-5-24
在线时间
16 小时
发表于 2020-3-28 11:28:22 | 显示全部楼层
cclglek 发表于 2020-3-28 02:18
请问是问的下行这个语句吗?
RTC_DateTypeDef    RTC_DateStruct;
如果是,我可以给你解答一下

了解了,不麻烦了
回复

使用道具 举报

4

主题

82

帖子

0

精华

高级会员

Rank: 4

积分
747
金钱
747
注册时间
2018-9-1
在线时间
177 小时
发表于 2020-3-28 14:40:32 | 显示全部楼层
cclglek 发表于 2020-3-28 02:14
十分感谢点拨小白,经过这两天恶补谭浩强C,已经明白了变量作用域这个知识点。
回想一下当时产生问题1、 ...

感觉你没懂吧。
RTC_TimeTypeDef 是个变量类型,就如同int、char、double。只不过它是个结构体变量类型:是类型,不是变量。

变量要用类型定义出来

RTC_TimeTypeDef  a;
RTC_TimeTypeDef  b;
RTC_TimeTypeDef  c;

这是定义了三个变量。
uevip#126.com
回复

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2019-10-30
在线时间
25 小时
 楼主| 发表于 2020-3-29 05:19:55 | 显示全部楼层
ultraelec 发表于 2020-3-28 14:40
感觉你没懂吧。
RTC_TimeTypeDef 是个变量类型,就如同int、char、double。只不过它是个结构体变量类型 ...

收到,多谢指点,再继续学习和理解一下。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-3 06:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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