c程序 - 结构指针

时间:2016-11-03 18:13:58

标签: c pointers struct

我对该行rtc_set_alarm(RTC_0, (RTC[RTC_0].rtc_ccvr + ALARM));有疑问 在main()下面。

rtc_set_alarm()的第二个参数中,我理解RTCstruct类型的指针,指向地址0xB0000400。然后,它使用.rtc_ccvr

访问结构的第一个成员

我的问题是,为什么有必要使用RTC_0的{​​{1}}。

我会认为这只是enum rtc_t

道歉,我是结构指针的新手。

RTC.rtc_ccvr

2 个答案:

答案 0 :(得分:2)

它可以有多个RTC。要访问第二个,您将使用

rtc_set_alarm(RTC_1, (RTC[RTC_1].rtc_ccvr + ALARM));

它与struct中的字段无关,它使用哪个结构

答案 1 :(得分:0)

让我们稍微检查一下代码。您可能知道enum只是为数字命名的一种方式,因此enum中的每个值都转换为整数 - RTC_00完全相同在这段代码中。所以电话:

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或更高版本。