Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

STM32 CalendarTime::Advance() fails on Feb 29, can cause sleep to hang forever #279

Closed
terrillmoore opened this issue Feb 3, 2021 · 2 comments
Assignees
Labels

Comments

@terrillmoore
Copy link
Member

Consider the following:

auto caltime = gCatena.GetCalendarTime();

caltime.Year = 0;
caltime.Month = 2;
caltime.Day = 29;
caltime.Hour = 23;
caltime.Minute = 59;
caltime.Second = 50;
caltime.Advance(600);

gCatena.SafePrintf("Advanced time (2/29): %02d-%02d-%02d %02d:%02d:%02d\n",
		caltime.Year, caltime.Month, caltime.Day,
		caltime.Hour, caltime.Minute, caltime.Second
		);

The result is

Advanced time (2/29): 00-02-30 00:09:50

If you try to set an alarm for this, it will never wake up (and not detect an error).

@terrillmoore terrillmoore self-assigned this Feb 3, 2021
@terrillmoore
Copy link
Member Author

A further test shows that it's just broken.

Advanced time (0-1): 00-02-01 00:09:50
Advanced time (0-2): 00-02-30 00:09:50
Advanced time (0-3): 00-03-32 00:09:50
Advanced time (0-4): 00-04-31 00:09:50
Advanced time (0-5): 00-05-32 00:09:50
Advanced time (0-6): 00-06-31 00:09:50
Advanced time (0-7): 00-07-32 00:09:50
Advanced time (0-8): 00-08-32 00:09:50
Advanced time (0-9): 00-10-01 00:09:50
Advanced time (0-10): 00-10-32 00:09:50
Advanced time (0-11): 00-11-31 00:09:50
Advanced time (0-12): 00-12-32 00:09:50
Advanced time (1-1): 01-02-01 00:09:50
Advanced time (1-2): 01-02-29 00:09:50
Advanced time (1-3): 01-03-32 00:09:50
Advanced time (1-4): 01-04-31 00:09:50
Advanced time (1-5): 01-05-32 00:09:50
Advanced time (1-6): 01-06-31 00:09:50
Advanced time (1-7): 01-07-32 00:09:50
Advanced time (1-8): 01-08-32 00:09:50
Advanced time (1-9): 01-10-01 00:09:50
Advanced time (1-10): 01-10-32 00:09:50
Advanced time (1-11): 01-11-31 00:09:50
Advanced time (1-12): 01-12-32 00:09:50
Advanced time (2-1): 02-02-01 00:09:50
Advanced time (2-2): 02-02-29 00:09:50
Advanced time (2-3): 02-03-32 00:09:50
Advanced time (2-4): 02-04-31 00:09:50
Advanced time (2-5): 02-05-32 00:09:50
Advanced time (2-6): 02-06-31 00:09:50
Advanced time (2-7): 02-07-32 00:09:50
Advanced time (2-8): 02-08-32 00:09:50
Advanced time (2-9): 02-10-01 00:09:50
Advanced time (2-10): 02-10-32 00:09:50
Advanced time (2-11): 02-11-31 00:09:50
Advanced time (2-12): 02-12-32 00:09:50
Advanced time (3-1): 03-02-01 00:09:50
Advanced time (3-2): 03-02-29 00:09:50
Advanced time (3-3): 03-03-32 00:09:50
Advanced time (3-4): 03-04-31 00:09:50
Advanced time (3-5): 03-05-32 00:09:50
Advanced time (3-6): 03-06-31 00:09:50
Advanced time (3-7): 03-07-32 00:09:50
Advanced time (3-8): 03-08-32 00:09:50
Advanced time (3-9): 03-10-01 00:09:50
Advanced time (3-10): 03-10-32 00:09:50
Advanced time (3-11): 03-11-31 00:09:50
Advanced time (3-12): 03-12-32 00:09:50
Advanced time (4-1): 04-02-01 00:09:50
Advanced time (4-2): 04-02-30 00:09:50
Advanced time (4-3): 04-03-32 00:09:50
Advanced time (4-4): 04-04-31 00:09:50
Advanced time (4-5): 04-05-32 00:09:50
Advanced time (4-6): 04-06-31 00:09:50
Advanced time (4-7): 04-07-32 00:09:50
Advanced time (4-8): 04-08-32 00:09:50
Advanced time (4-9): 04-10-01 00:09:50
Advanced time (4-10): 04-10-32 00:09:50
Advanced time (4-11): 04-11-31 00:09:50
Advanced time (4-12): 04-12-32 00:09:50
Advanced time (5-1): 05-02-01 00:09:50
Advanced time (5-2): 05-02-29 00:09:50
Advanced time (5-3): 05-03-32 00:09:50
Advanced time (5-4): 05-04-31 00:09:50
Advanced time (5-5): 05-05-32 00:09:50
Advanced time (5-6): 05-06-31 00:09:50
Advanced time (5-7): 05-07-32 00:09:50
Advanced time (5-8): 05-08-32 00:09:50
Advanced time (5-9): 05-10-01 00:09:50
Advanced time (5-10): 05-10-32 00:09:50
Advanced time (5-11): 05-11-31 00:09:50
Advanced time (5-12): 05-12-32 00:09:50
Advanced time (6-1): 06-02-01 00:09:50
Advanced time (6-2): 06-02-29 00:09:50
Advanced time (6-3): 06-03-32 00:09:50
Advanced time (6-4): 06-04-31 00:09:50
Advanced time (6-5): 06-05-32 00:09:50
Advanced time (6-6): 06-06-31 00:09:50
Advanced time (6-7): 06-07-32 00:09:50
Advanced time (6-8): 06-08-32 00:09:50
Advanced time (6-9): 06-10-01 00:09:50
Advanced time (6-10): 06-10-32 00:09:50
Advanced time (6-11): 06-11-31 00:09:50
Advanced time (6-12): 06-12-32 00:09:50

@terrillmoore
Copy link
Member Author

The SAMD variant has the same issue.

@terrillmoore terrillmoore changed the title STM32 CalendarTime::Advance() fails on Feb 29 STM32 CalendarTime::Advance() fails on Feb 29, can cause sleep to hang forever Feb 3, 2021
terrillmoore added a commit that referenced this issue Feb 3, 2021
Fix RTC handling error (#279) -- system could hang forever. Other minor fixes.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant