fixed IF482 timing bug when time was adjusted
This commit is contained in:
parent
3c8830695b
commit
859080232f
@ -20,7 +20,9 @@ HardwareSerial IF482(2); // use UART #2 (#1 may be in use for serial GPS)
|
|||||||
|
|
||||||
Ticker timesyncer;
|
Ticker timesyncer;
|
||||||
|
|
||||||
void timeSync() { xTaskNotifyFromISR(irqHandlerTask, TIMESYNC_IRQ, eSetBits, NULL); }
|
void timeSync() {
|
||||||
|
xTaskNotifyFromISR(irqHandlerTask, TIMESYNC_IRQ, eSetBits, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
time_t timeProvider(void) {
|
time_t timeProvider(void) {
|
||||||
|
|
||||||
@ -123,7 +125,7 @@ void IRAM_ATTR CLOCKIRQ(void) {
|
|||||||
|
|
||||||
SyncToPPS(); // calibrates UTC systime and advances it +1, see microTime.h
|
SyncToPPS(); // calibrates UTC systime and advances it +1, see microTime.h
|
||||||
|
|
||||||
if (ClockTask != NULL)
|
if (ClockTask)
|
||||||
xTaskNotifyFromISR(ClockTask, uint32_t(now()), eSetBits,
|
xTaskNotifyFromISR(ClockTask, uint32_t(now()), eSetBits,
|
||||||
&xHigherPriorityTaskWoken);
|
&xHigherPriorityTaskWoken);
|
||||||
|
|
||||||
@ -224,7 +226,6 @@ void clock_loop(void *taskparameter) { // ClockTask
|
|||||||
|
|
||||||
// output the next second's pulse after timepulse arrived
|
// output the next second's pulse after timepulse arrived
|
||||||
for (;;) {
|
for (;;) {
|
||||||
// ensure the notification state is not already pending
|
|
||||||
xTaskNotifyWait(0x00, ULONG_MAX, &printtime,
|
xTaskNotifyWait(0x00, ULONG_MAX, &printtime,
|
||||||
portMAX_DELAY); // wait for timepulse
|
portMAX_DELAY); // wait for timepulse
|
||||||
|
|
||||||
@ -248,8 +249,16 @@ void clock_loop(void *taskparameter) { // ClockTask
|
|||||||
|
|
||||||
#if defined HAS_IF482
|
#if defined HAS_IF482
|
||||||
|
|
||||||
vTaskDelay(txDelay); // wait until moment to fire
|
// wait until moment to fire. Normally we won't get notified during this
|
||||||
IF482.print(IF482_Frame(t + 1)); // note: if482 telegram for *next* second
|
// timespan, except when next pps pulse arrives while waiting, because pps
|
||||||
|
// was adjusted by recent time sync
|
||||||
|
if (xTaskNotifyWait(0x00, ULONG_MAX, &printtime, txDelay) == pdTRUE) {
|
||||||
|
t = time_t(printtime); // new adjusted UTC time seconds
|
||||||
|
last_printtime = t;
|
||||||
|
}
|
||||||
|
|
||||||
|
// send IF482 telegram
|
||||||
|
IF482.print(IF482_Frame(t + 1)); // note: telegram is for *next* second
|
||||||
|
|
||||||
#elif defined HAS_DCF77
|
#elif defined HAS_DCF77
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user