Aidez moi à comprendre ce programme

Bonjour à tous, J'ai acheté un shiel RTC + connecteur carte SD chez nuelectronics et j'ai beaucoup de mal à comprendre le programme de demo, il n'est pratiquement pas commenté.

http://www.nuelectronics.com/estore/index.php?main_page=product_info&cPath=1&products_id=20&zenid=f266e6431a26ef3607ce1da1629c839a.

Voici les points sur lequel je bloque, si quelq'un avait l'amabilité d'éclairer ma lanterne :D

1)

if ((c == '\b') && idx) {
                        idx--; 
                                Serial.print(c);
                  }

Il teste si "c" est egal à "\b" et si idx ???

2) static void get_line (char *buff, byte len)

A quoi sert "static" ? A quoi sert "*" devant le nom de la variable ?

3)

   sprintf_P(buff, PSTR("SD CARD mount error"));

A quoi sert PSTR ? Meme question pour sprintf_P.

PS : j'ai googliser mais je ne trouve rien de convaincant en français sur ces 3 points la.

Merci d'avance.

if ((c == '\b') && idx) { sa reviens à mettre if ((c == '\b') && idx == true) {

Pour les variables static : http://en.wikipedia.org/wiki/Static_variable Et pour "*" c'est un pointer : http://www.cplusplus.com/doc/tutorial/pointers/

sprintf_P je sais pas trop, c'est apparemment comment sprintf_c : http://www.rowleydownload.co.uk/documentation/avr_2_0/hcc_libc_sprintf_c.htm et PSTR je sais pas trop non plus désolé

if ((c == '\b') && idx) { sa reviens à mettre if ((c == '\b') && idx == true) {

pas tout à fait "idx non nul". Effectivement si idx est un booléen c'est TRUE parce que TRUE est défini comme valant 1 dans wiring.h. Mais si idx est un entier c'est toute valeur différente de 0.

Salut,

sprintf_P(buff, PSTR("SD CARD mount error"));

PSTR permet de créer une chaine de caractère dans l'espace PROGMEM et pas dans la RAM du microcontrolleur (et donc d'économiser cette précieuse RAM). Le problème est que sprintf ne sait afficher que des caractères en RAM, donc sprintf_P copie automatiquement la chaine de PROGMEM en RAM et la passe à sprintf (en gros, et sauf erreur). Plus d'infos sur avrfreaks (in english)

Churchill

Pour les variables static : http://en.wikipedia.org/wiki/Static_variable

Il ne s'agit pas d'une variable mais d'une fonction statique. Dans ce cas, c'est pour indiquer que la fonction ne peut être utilisée que dans le fichier source où elle est déclarée.

Merci à tous de vo réponses ;)