27 juillet 2015:
Il s'avère (suite à la mise en pratique d'une cogitation...) que le double buffering n'est pas indispensable dans le cas qui nous occupe.
Il est en effet possible d'enregistrer le signal incident dans le buffer pendant que l'on enregistre ce dernier dans la SDcard.
Ceci est rendu possible du fait que la cadence d'acquisition des octets est inférieure à celle d'écriture sur la carte.
Voici mon propre commentaire tel qu'il figure dans le firmware pour l'ATmega32 :
================== PARAMETRES NUMERIQUES DE CE PROGRAMME ========
(Les tempo sont mesurées à l'oscillo et/ou fréquencemètre) et non pas calculées exactement au simulateur
OCR0 = 10; -> un octet est présenté toutes les 45us c.a.d avec une fréquence de 22kHz (pour test avec acquisition interne par Timer0))
-Un enregistrement de 1 block (=512 octets) se fait en 8ms en moyenne avec quelques rares "coups" à 16ms (? deux blocs à la fois ????)
-Le buffer de 512 octet se remplit en 512 x 45us = 23ms
-Le temps de repos pendant lequel il n'y a pas d'écriture sur la carte = 23ms-8ms= 15ms; On voit très bien ce temps de 15ms à l'oscillo
-Chaque octet est enregistré sur la carte en 8ms/512 = 15us soit moins que la période d'arrivée des octets qui est rappelons le de 45us soit 3x plus longue.
CE QUI SE PASSE:
A l'instant où le buffer est plein, on dispose de 45us avant qu'un octet ne se présente à l'enregistrement en début du buffer.
Lorsque cet octet incident arrive, on a déjà enregistré les trois premier octets du buffer sur la carte, lorsque le deuxième octet arrive on a enregistré 6 octets et ainsi de suite, de telle manière que l'adresse de stockage des octets entrants dans le buffer ne rattrape jamais celle des octets lus pour être expédiés dans la SDcard.
Ceci est important de façon à ce que les octets arrivant n'écrasent pas des octets pas encore enregistrés: Le serpent ne doit pas se mordre la queue !
Il n'y a donc aucune perte de signal, tout ce qui arrive est enregistré sur la carte.
==================================================================
Les acquisitions se font par interruption, mais l'enregistrement sur la carte se fait dans la boucle du programme principal, appelé par un flag positionné par les interruptions dès que le buffer est plein. Ce qui donne la priorité aux acquisitions sans gêner les enregistrements qui se font tranquillement en tache de fond.