version avr-libc ? et time.h

Bonjour à toutes et tous,
Comment peut-on connaître la version de avr-libc installée dans la chaine de compilation arduino ?
@+

Je pense que tu es sous un dérivé de Debian.
Dans un terminal utilisateur
$ nom_du_programme -v
ou
$ nom_du_programme --verbose

Re,
Merci à tous les deux pour vos réponses.
Effectivement, je suis sous Ubuntu 16.04 LTS avec l'Ide 1.6.5-r5
J'avais fait la manipe de 68tjs qui me donnait la version du compilateur en l’occurrence 4.9.2 mais pas la version de la avr-libc.
A priori, le compilateur 4.9.2 est associé à la librairie avr-libc 1.8.1 (pas évident de trouver dans la doc).

La question complémentaire sous-jacente était comment faire une mise à jour pour avoir la avr-libc 2.0.0 associée au compilateur gcc 6.2.0.
La librairie intègre de nombreuses nouveautés. Par exemple, la lib time.h intègre les heures de lever et de coucher du soleil.
@+

Ubuntu je ne connais pas les dépots logiciels mais pour Debian je vais là :
https://packages.debian.org/search?suite=default&section=all&arch=any&searchon=names&keywords=avr

En SID on voit que l'avr-libc est toujours en 1:1.8.0+Atmel3.5.0-1: all
Comme Ubuntu est basée sur SID et Testing, si dans Debian SID l'avr-libc est toujours en 1.8.0 dans Ubuntu ce devrait "probablement" être identique.
Par contre si tu fais la recherche pour gcc tu pourra constater que GCC est bien en 6.2.1 en Testing et en Sid.

J'avais interrogé il y a quelque temps le mainteneur des paquets avr/arduino : il semblait assez écœuré par la guerre intestine, il ne doit pas avoir beaucoup d'entrain pour les mises à jour.

Bonjour,
Merci 68tjs

Bonjour,
Rien de facile. :frowning:
Si je souhaite utilisé une fonction d'une bibliothèque plus récente que celle installée dans l'environnement Ide Arduino, où peut-on trouver les fichiers .c correspondant aux fichiers .h
Pour mon cas, je souhaite utiliser des fonctions déclarées dans time.h (lib 2.0) mais j'ai du mal à trouver les .c correspondants.
Si un sachant pouvait me poser quelques petits cailloux pour trouver mon chemin (méthode du Petit Poucet) cela serait sympa.
@+

Si un sachant pouvait me poser quelques petits cailloux pour trouver mon chemin

Je sais rien mais je dirai tout :grin:

Tu peux télécharger le code ici :
http://www.nongnu.org/avr-libc/
et plus particulièrement là : Index of /releases/avr-libc/

Dans le répertoire qui contient l'IDE il y a un sous répertoire "tools/avr/avr/lib/" dans le lequel on trouve un fichier libc.a et aussi des sous répertoires (avr2, avr3, avr4 etc ) contenant aussi chacun un fichier libc.a.

J'ai comme l'impression qu'il faut compiler et faire une bibliothèque statique : mais je sais pas ce qu'il faut prendre, cela me parait bien compliqué.

Après quelques recherches complémentaires sur le site Atmel :

et un document :
http://www.atmel.com/Images/avr8-gnu-toolchain-3.5.4.1709-readme.pdf où, entre autre,on trouve qu'un Atmega328p est un avr5.

Peut devrait-tu voir du coté du forum avr-freaks ?
http://www.avrfreaks.net/

Bonsoir,
Merci 68tjs.

68tjs:
Je sais rien mais je dirai tout :grin:

Tu peux télécharger le code ici :
AVR Libc Home Page
et plus particulièrement là : Index of /releases/avr-libc/

J'étais passé par là mais trop d'information tue l'information et finalement, comme le petit Poucet, je me suis perdu

68tjs:
Dans le répertoire qui contient l'IDE il y a un sous répertoire "tools/avr/avr/lib/" dans le lequel on trouve un fichier libc.a et aussi des sous répertoires (avr2, avr3, avr4 etc ) contenant aussi chacun un fichier libc.a.

Je vais approfondir ma recherche. :astonished:

68tjs:
J'ai comme l'impression qu'il faut compiler et faire une bibliothèque statique : mais je sais pas ce qu'il faut prendre, cela me parait bien compliqué.

J'ai fait des essais de compilation avec GCC 6.2 + LIB 2.0, un vrai jeu de massacre. Ça mord de tous les côtés :sob:

68tjs:
Après quelques recherches complémentaires sur le site Atmel :
http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORLINUX.aspx
et un document :
http://www.atmel.com/Images/avr8-gnu-toolchain-3.5.4.1709-readme.pdf où, entre autre,on trouve qu'un Atmega328p est un avr5.

Effectivement beaucoup d'informations utiles. Pour le 328p en avr5, il me semble, de mémoire, que pépé l'avait signalé dans un topic.

68tjs:
Peut devrait-tu voir du coté du forum avr-freaks ?
http://www.avrfreaks.net/

Je vais voir sur ce forum si je peux avoir des directives qui vont dans le bon sens.
@+

Sinon on peut espérer qu'avec la fusion des ide LLC et SRL en 1.8.0 l'empaqueteur Debian va se remettre au travail.
Pour info la testing actuelle vient d'être gelée donc sortie en stable d'ici 3 mois.
Peut-être la lib 2.0 sur la nouvelle testing vers le printemps ?

Bonsoir,
J’avance avec la méthode des petit pas (je résous un problème et trois autres apparaissent).
En attendant, l'IDE arduino 1.8.0 utilise avr-libc 2.0.0
Pour savoir quelle est la version de lib, il suffit de faire :

Serial.print("L'IDE Arduino utilise la version AVR-Libc ");
Serial.print(__AVR_LIBC_VERSION_STRING__);

Existe-il une macro similaire pour la version du compilateur ?

Interessant, j'ai testé sur ce que j'avais sur mon disque :
1.0.5 --> 1.8 svn
LLC 1.6.5 --> 1.8 svn
LLC 1.6.12 --> 2.0
SRL 1.7.10 --> 1.8 svn

Avr-gcc :
J'obtiens cela sur la 1.8.0 (ne pas oublier le "./" devant le nom du programme sinon le chemin principal est sur /usr/

$./avr-gcc -v

Using built-in specs.
Reading specs from /hca/20-Arduinos/arduino-1.8.0/hardware/tools/avr/bin/../lib/gcc/avr/4.9.2/device-specs/specs-avr2
COLLECT_GCC=./avr-gcc
COLLECT_LTO_WRAPPER=/hca/20-Arduinos/arduino-1.8.0/hardware/tools/avr/bin/../libexec/gcc/avr/4.9.2/lto-wrapper
Target: avr
Configured with: ../gcc/configure --enable-fixed-point --enable-languages=c,c++ --prefix=/home/jenkins/workspace/avr-gcc/label/debian7-x86_64/objdir --enable-long-long --disable-nls --disable-checking --disable-libssp --disable-libada --disable-shared --enable-lto --with-avrlibc=yes --with-dwarf2 --disable-doc --target=avr
Thread model: single
gcc version 4.9.2 (GCC)

Re,

pepe:
Attention, la chaîne AVR_LIBC_VERSION_STRING est juste définie dans le fichier avr/version.h, indépendamment de la version effective du fichier libc.a utilisé.

Cette information n'est donc valable qu'à la condition que la génération, l'installation et l'utilisation du système de développement aient été exemptes d'erreur (pas de mélange de fichiers provenant de différentes versions, notamment).

Oui, oui. J'espère qu'il y a un minimum de sérieux.
En survolant la doc, on trouve que IDE Arduino 1.8.0 est associé à avr-libc 1.8.1.
Bien que dans ce cas précis, les différences entre 1.8.1 et 2.0.0 sont minimes.
Je continue mon exploration.

Bonsoir,
Pourquoi intéresser à la avr-libc 2.0.0 ?
Dans quelques applications nécessitants les heures de lever et de coucher du soleil, j'utilisais avec satisfaction la lib du colistier Bricoleau.
Mais pour une nouvelle application, mon soft plus celui de Bricoleau me provoquaient un sac de nœuds que je n'avais pas envie de démêler (fainéant inside ;)).
En cherchant un peu, il s'avère que la avr-libc > 1.8.1 contient un module time.h qui permet ce genre de calcul et bien plus.
Exemple de calcul :

/*
icare petibles
Il faut utiliser L'IDE Arduino 1.8.0
27/12/2017
*/
#include <time.h>
#include <util/usa_dst.h>
#include <util/eu_dst.h>

#define ANNEE 2017
#define MOIS 12
#define JOUR 21
#define HEURE 12                                //non nécessaire pour ce calcul
#define MINUTE 0                                //non nécessaire pour ce calcul
#define SECONDE 0                               //non nécessaire pour ce calcul

#define MY_LATITUDE 48.8334 * ONE_HOUR          //latitude Paris en sec d'arc
#define MY_LONGITUDE 2.3334 * ONE_HOUR          //longitude Paris en sec d'arc
#define MY_TIME_ZONE 1 * ONE_HOUR               //fuseau horaire en sec d'arc
//#define MY_DST usa_dst
#define MY_DST eu_dst                           //heure été europe

void setup(){
    time_t now, d;
    struct tm lt, noon, rise, set;
    struct tm tmptr;
    char buff[12];

    Serial.begin(115200);
    Serial.println(F("Calcul Heures Lever, Coucher et au Meridien du Soleil"));
    set_dst(MY_DST);                            //fixe heure été/hiver
    set_zone(MY_TIME_ZONE);                     //fuseau horaire France
    set_position(MY_LATITUDE, MY_LONGITUDE);    //Paris
                                                //référence temporelle
    tmptr.tm_year = ANNEE - 1900;               //voir time.h
    tmptr.tm_mon = MOIS - 1;
    tmptr.tm_mday = JOUR;
    tmptr.tm_hour = HEURE;
    tmptr.tm_min = MINUTE;
    tmptr.tm_sec = SECONDE;
    tmptr.tm_isdst = -1;
    now = mktime(&tmptr);                       //transforme représentation 
                                                //humaide en secondes
    d = solar_noon(&now);                       //calcul au méridien
    localtime_r(&d, &noon);                     //conversion pour humain
    d = sun_set(&now);                          //calcul lever
    localtime_r(&d, &set);                      //conversion pour humain
    d = sun_rise(&now);                         //calcul coucher
    localtime_r(&d, &rise);                     //conversion pour humain
    
    localtime_r(&now, &lt);                     //heure locale
    Serial.print("Pour le : ");
    Serial.println(isotime(&lt));               //affiche jour calcul
    Serial.println();
    
    isotime_r(&noon, buff);                     //transforme en ascii
    Serial.print("Soleil au meridien : ");
    Serial.print(&buff[11]);
    Serial.println(" (Heure locale)");
    Serial.println();
    
    Serial.print("Lever Soleil       : ");
    isotime_r(&rise, buff);                     //transforme en ascii
    Serial.print(&buff[11]);
    Serial.println(" (Heure locale)");
    Serial.println();
    
    Serial.print("Coucher Soleil     : ");
    isotime_r(&set, buff);                      //transforme en ascii
    Serial.print(&buff[11]);
    Serial.println(" (Heure locale)");
    Serial.println();
}

void loop(){
}

Si l'on compare les résultats avec ceux de l'IMCCE, on constate que les calculs sont dans la précision de la référence.

IMCCE: Lever Méridien Coucher time.h: Lever Méridien Coucher
27/12/2016 : 08:52 12:52 16:59 08:48 12:52 16:56
21/06/2017 : 05:49 13:52 21:56 05:49 13:52 21:56
31/12/2017 : 08:46 12:54 17:02 08:48 12:53 16:59

time.h contient d'autres fonctions de calcul astronomiques qui donnent accès à la position soleil, la position lune, ou autres astres, les phases de la lune, etc..
Si je trouve quelques poignées de minutes, je mettrais quelques exemples.
Je dois reconnaître, que le calcul des heures de lever et de coucher du soleil n'a jamais été aussi simple.
@+