Mi sto preparando a lavorare su un prototipo di firmware incorporato che ha un chip GPS collegato (dritto su un braccio0, senza sistema operativo).
Sono distrutto su come modellare istanti e time delta UTC. Tradizionalmente in C, sceglievo solo una risoluzione e un'epoca offset e modellistica con numeri interi "abbastanza grandi", ma non mi preoccupavo di UTC, ma solo di un riferimento temporale interno.
Ultimamente, ho lavorato un po 'su Swift / Kotlin / Python3, e mi sono ritrovato a chiedermi se non sarei stato meglio servito costruendo una rappresentazione leggera di ordine superiore di istantaneo e delta in C. Qualcosa in cui avevo una struttura distinta per ogni entità, e ha scritto alcune funzioni per fare la matematica di cui ho bisogno tra loro.
Ciò richiederebbe un po 'più di tempo (da sviluppare), ma probabilmente mi darà un po' più di sicurezza (tipo).
Immagino di essere curioso di sapere come hanno fatto gli altri che hanno dovuto modellare le ore UTC in C incorporato. Dovrei andare con il classico modello intero offset / epoca? Oppure modello con le strutture effettive?
(Non sono molto preoccupato per le prestazioni per questo)
Chiarimento?
Un sacco di processi incorporati devono misurare il tempo o fare le cose in determinati momenti. Ho fatto un sacco di quelli. Una sorta di contatore di systick rolling è la tua base di tempo, e fai matematica contro di essa. L'unico vero inconveniente che ho trovato nel corso degli anni è che è possibile avere bug relativi alle differenze semantiche tra un marcatore temporale (un istante che si verifica sul contatore del tempo) e una durata o un delta, tra due di questi tempi . Poiché entrambi sono (u) inte, è facile mescolare i due senza avvisi.
La parte difficile qui è l'introduzione del GPS. I tempi GPS NMEA sono nei valori del campo UTC (ad esempio yymmdd, hhmmss). Mentre l'UTC elimina l'incubo TimeZone, non si sbarazza di cose come gli anni bisestili. Quindi, al minimo, devo implementare la matematica per nascondere i valori dei campi in un offset di secondi, e quindi correlarli / mapparli con il contatore del tempo locale. Questo ha portato alla domanda: se devo farlo comunque, perché non andare fino in fondo. Il mio obiettivo è pianificare che le cose accadano in determinati orari UTC.