Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Problema anno 2038 con libreria time.h

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Problema anno 2038 con libreria time.h

Messaggioda Foto Utenteivanpascolo » 23 feb 2015, 21:52

Salve,
sto lavorando ad un progetto con RTC e dovendo fare dei calcoli con le date mi sono imbattuto nella libreria standard time.h (sto utilizzando un pic1846k22). Il mio problema è che la funzione mktime che ha il compito di restituire i secondi a partire dal 1 gennaio 1970, ha il limite che non va oltre il 2038. Mi metterei volentieri a realizzare una libreria che fa al caso mio ma non ho grande esperienza con il C e non sono ancora in grado di fare grandi cose. Se qualcuno può darmi una mano .... grazie.
Avatar utente
Foto Utenteivanpascolo
20 3
New entry
New entry
 
Messaggi: 71
Iscritto il: 29 set 2014, 20:44

2
voti

[2] Re: Problema anno 2038 con libreria time.h

Messaggioda Foto UtenteeAlucarD » 23 feb 2015, 22:43

martedì 19 gennaio per la precisione :mrgreen: il problema riguarda tutti i sistemi con time_t di soli 32bit
in quelli a 64bit il problema si ripresenta tra 290 miliardi di anni

perché rappresenta un problema ? (per il tuo progetto intendo)

puoi sempre fare i "conti" spezzando le date
E l’uomo si addormentò e nel sogno creò il mondo
Avatar utente
Foto UtenteeAlucarD
1.210 3 5
Expert
Expert
 
Messaggi: 560
Iscritto il: 4 lug 2014, 11:01

0
voti

[3] Re: Problema anno 2038 con libreria time.h

Messaggioda Foto Utenteivanpascolo » 23 feb 2015, 22:55

Volevo fare tutto con un'unica libreria ma se mi viene difficile dovrò fare come mi suggerisci tu.
Avatar utente
Foto Utenteivanpascolo
20 3
New entry
New entry
 
Messaggi: 71
Iscritto il: 29 set 2014, 20:44

-1
voti

[4] Re: Problema anno 2038 con libreria time.h

Messaggioda Foto Utenteangel99 » 23 feb 2015, 23:17

Quando leggo queste cose me ne convinco sempre più:

assembler for life. :mrgreen:
Avatar utente
Foto Utenteangel99
3.516 1 5 11
Master
Master
 
Messaggi: 1148
Iscritto il: 23 gen 2015, 19:39

1
voti

[5] Re: Problema anno 2038 con libreria time.h

Messaggioda Foto UtenteTardoFreak » 24 feb 2015, 0:39

Il problema non è il linguaggio. Ad un certo livello un linguaggio vale l' altro.
Con tutto il rispetto, il problema è che lui non sa come fare, indipendentemente dal linguaggio.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[6] Re: Problema anno 2038 con libreria time.h

Messaggioda Foto Utenteangel99 » 24 feb 2015, 1:06

Era un piccolo OT, ma poi forse anche no. Nel senso che più che parlare di differenza tra un linguaggio e un altro, sarebbe da valutare la differenza tra librerie proprietarie e quelle standard che trovi con i compilatori.
Se scrivo la mia lib (che sia in asm, C, o... RPG) conosco i limiti di ciò che ho fatto, o almeno dovrei. Se invece prendo una libreria standard... chi lo sa?
Avatar utente
Foto Utenteangel99
3.516 1 5 11
Master
Master
 
Messaggi: 1148
Iscritto il: 23 gen 2015, 19:39

2
voti

[7] Re: Problema anno 2038 con libreria time.h

Messaggioda Foto UtenteGuidoB » 24 feb 2015, 20:26

angel99 ha scritto:Se scrivo la mia lib (che sia in asm, C, o... RPG) conosco i limiti di ciò che ho fatto, o almeno dovrei. Se invece prendo una libreria standard... chi lo sa?

In teoria dovrebbe essere documentato ciò che la libreria fa e quali sono i suoi limiti.
Poi, non è sempre così.

Certo che scriversi tutte le librerie per conoscerne i limiti è un lavoro immane, e non resta tempo per fare altro (ovvio che dipende da quante librerie ti servono).
E poi le devi debuggare #-o

Una soluzione è andarsi a vedere i sorgenti della libreria i cui limiti non sono documentati. Leggendo attentamente il codice sorgente dovrebbero esserne chiari i limiti.

E se il sorgente non è disponibile?
Io ho trovato utile leggere i sorgenti di altre librerie open source. Non c'è nessuna garanzia, ma a me è sempre andata bene. I limiti erano gli stessi delle librerie closed source.

In particolare posso suggerire la libreria di Sanos, un sistema operativo minimalista open source. Qui (link "Download" dopo il testo) si può scaricare un maneggevole file zip coi sorgenti (colonna "Download source"). Dentro lo zip, in src/lib, ci sono le librerie per il C, compreso time.c; in src/include/sys/types.h ci sono le definizioni di tipo (compreso time_t). Da qui Foto Utenteivanpascolo può ispirarsi per scrivere la sua libreria... buon lavoro!

Ho letto da qualche parte che, se non si può usare un tipo a 64 bit per time_t, invece di dichiararlo long (32 bit con segno) si può dichiararlo unsigned long (32 bit senza segno). Non si potranno più trattare date precedenti al 1970, ma il problema dell'anno 2038 viene spostato molto più avanti (al 2106 se non erro).

Ho visto che qui qualcuno si è già posto il problema e qui propone almeno un pezzo di libreria con la (sua) soluzione implementata.
Big fan of ƎlectroYou!       Ausili per disabili e anziani su ƎlectroYou
Caratteri utili: À È É Ì Ò Ó Ù α β γ δ ε η θ λ μ π ρ σ τ φ ω Ω º ª ² ³ √ ∛ ∜ ₀ ₁ ₂ ₃ ₄ ₅ ₆ ∃ ∄ ∆ ∈ ∉ ± ∓ ∾ ≃ ≈ ≠ ≤ ≥
Avatar utente
Foto UtenteGuidoB
17,8k 7 12 13
G.Master EY
G.Master EY
 
Messaggi: 2809
Iscritto il: 3 mar 2011, 16:48
Località: Madrid

0
voti

[8] Re: Problema anno 2038 con libreria time.h

Messaggioda Foto Utenteangel99 » 24 feb 2015, 22:52

E' una scelta.

Ovviamente nessuno si può scrivere Office per essere sicuro di avere un software infallibile per compilare una fattura, ma per ciò che riguarda i micro, sono oltre dieci anni che ho scelto la strada del fai da te.

Il vantaggio che mi ha convinto sia stata una strada vincente è stato al momento del porting da una famiglia ad un'altra. In questo periodo sto facendo il porting dal TI all'AVR ed è un lavoro tranquillissimo, che richiede pochissimo impegno (a dispetto della struttura molto differente delle due famiglie). Mi chiedo cosa sarebbe stato compilare un programma in C e trovare che metà delle funzioni hanno paradigmi diversi, diversi limiti di validità e chissà che altro.

Certo, ti puoi leggere tutto il codice fatto da qualcun altro, ma ci impieghi il triplo che a leggere il tuo e di sicuro non trovi tutto quello che dovresti trovare.
Avatar utente
Foto Utenteangel99
3.516 1 5 11
Master
Master
 
Messaggi: 1148
Iscritto il: 23 gen 2015, 19:39

0
voti

[9] Re: Problema anno 2038 con libreria time.h

Messaggioda Foto UtenteTardoFreak » 24 feb 2015, 22:54

Scusa la domanda, sono solo curioso: usi ancora micro ad 8 bit?
E se si, perché?
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[10] Re: Problema anno 2038 con libreria time.h

Messaggioda Foto Utenteangel99 » 24 feb 2015, 23:03

La maggior parte del lavoro è con gli 8 bit.

Lavoro come consulente per un'azienda che fa produzione di serie e quando devi progettare un terminale con tastiera, display, interfaccia seriale, link infrarosso, RTC con batteria, quattro condizionatori 4-20 mA in ingresso e quattro relè di uscita che deve costare 4 Euro e mezzo, non c'è posto per i 32 bit o per i 64 k di flash.

La famiglia TI che abbiamo adoperato per anni è a 16 bit, ma abbiamo dovuto tornare agli 8 bit per questioni economiche. E' un lavoro molto più complesso, ma è l'unico modo per poter competere a livello internazionale.
Avatar utente
Foto Utenteangel99
3.516 1 5 11
Master
Master
 
Messaggi: 1148
Iscritto il: 23 gen 2015, 19:39

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti