我对该行rtc_set_alarm(RTC_0, (RTC[RTC_0].rtc_ccvr + ALARM));
有疑问
在main()
下面。
在rtc_set_alarm()
的第二个参数中,我理解RTC
是struct
类型的指针,指向地址0xB0000400。然后,它使用.rtc_ccvr
。
我的问题是,为什么有必要使用RTC_0
的{{1}}。
我会认为这只是enum rtc_t
?
道歉,我是结构指针的新手。
RTC.rtc_ccvr
答案 0 :(得分:2)
它可以有多个RTC。要访问第二个,您将使用
rtc_set_alarm(RTC_1, (RTC[RTC_1].rtc_ccvr + ALARM));
它与struct中的字段无关,它使用哪个结构
答案 1 :(得分:0)
让我们稍微检查一下代码。您可能知道enum
只是为数字命名的一种方式,因此enum
中的每个值都转换为整数 - RTC_0
与0
完全相同在这段代码中。所以电话:
rtc_set_alarm(RTC_0, (RTC[RTC_0].rtc_ccvr + ALARM));
与
相同rtc_set_alarm(RTC_0, (RTC[0].rtc_ccvr + ALARM));
现在什么是RTC
?它是指向结构的指针,但没有关于有rtc_reg_t
类型的寄存器集的信息。因此,如果您有三个这样的寄存器集,那么同样有效:
rtc_set_alarm(RTC_0, (RTC[2].rtc_ccvr + ALARM));
因此,编写RTC[RTC_0]
的目的是显式访问第一个RTC控制器的寄存器,并以相同的方式访问其他寄存器(如果有的话)。在您的示例中只有一个,rtc_set_alarm
可能会检查您是否未访问索引RTC_NUM
或更高版本。