A naive implementation may set a RTC alarm in 30s by calling struct tm now; rtc_get_time(&now); now.tm_sec += 30; rtc_set_alarm(&now, _cb, NULL); This works for RTC implementations that use a RTT internally and call mktime() to convert the struct tm to a unix timestamp, as mktime() will normalize the struct in the process. Call rtc_tm_normalize() when the RTC uses separate registers for time / date components to ensure it is normalized. This also modifies tests/periph_rtc to exercise this case.
Expected result
When everything works as expected, after start-up, 4 alarm messages are displayed every 2 seconds.
Background
Test for the low-level RTC driver.