Problème de Buffer sur arduino DUE pour projet audio

Bonjour à tous,

Je bosse actuellement sur un mini synthé en me basant sur le programme créé par Chris Ball GitHub - ChrisBall/Dub-Siren-Files: Code and laser cutter files for a Dub Siren I made, with basic Tape Echo simulator

J’en ai déjà fait une première version pour moi que j’ai déjà pas mal triturée pour l’adapter à mes besoins, et tout marche parfaitement.

Je bosse maintenant sur la grande sœur que je fait pour un pote et qui est sensiblement identique. Sauf que je double toutes les fonctions. Ce n’est probablement pas le plus judicieux, mais cela me permet, je pense, d’éviter des erreurs. Je fait sortir chaque oscillateur sur un sortie de DAC et je fais la sommation des deux en analogique.

Comme je dois quasiment doubler l’ensemble du code, je voudrais également doubler les Buffers, qui permettent entre autre de créer un écho.

#define MAXDELAYBUFFERSIZE 40000
short Buffer1[MAXDELAYBUFFERSIZE];
short Buffer2[MAXDELAYBUFFERSIZE];

Jusqu’ici pas de souci, mais dès que j’essaye d’utiliser le Buffer2 dans la suite du code, le compilateur me retourne une erreur. Le problème se pose dès la mise à zéro de Buffer2.

  for(int i=0;i<MAXDELAYBUFFERSIZE;i++){
    Buffer1[i]=BIAS; 
    Buffer2[i]=BIAS;
  }

si jamais cela peut aider, voici le message d’erreur du compilateur

c:/users/stagiaire/appdata/local/arduino15/packages/arduino/tools/arm-none-eabi-gcc/4.8.3-2014q1/bin/…/lib/gcc/arm-none-eabi/4.8.3/…/…/…/…/arm-none-eabi/bin/ld.exe: address 0x2009a76c of C:\Users\STAGIA~1\AppData\Local\Temp\arduino_build_95440/Cl_ment.ino.elf section .bss' is not within region ram’
collect2.exe: error: ld returned 1 exit status
exit status 1
Erreur de compilation pour la carte Arduino Due (Programming Port)

C’est lié à des limitations de la carte? peut on y remédier?

Merci à vous, bonne soirée

on dirait que tu dépasses la mémoire disponible ? (le segment BSS contient les données non initialisées, c'est le cas de tes buffets.)

La taille d'un short sur la DUE c'est 2 (égal à un int16_t), donc 2 X 40000 X 2 = 160000 octets.

La RAM de la DUE est de 96 KB, soit 96 X 1024 = 98304 octets.

Merci pour ces chiffres, ça me donne une idée de la place à gagner.

donc pour y arriver je peux soit

-Réduire la taille du buffer (mais ce qui reviendrait à réduire mon temps de délai maximal)

-Utiliser un type de variable moins gourmand que short

-Toutes les autres variables du programme sont elles aussi stockées dans la ram non? A votre avis, est-ce-que utiliser le plus de booléen ou de byte possible me permettrai de gagner beaucoup de place?

Merci en tout cas pour vos réponses, je sais de quel côté chercher maintenant

J'ai fini par diviser le Buffer par deux, et j'ai également dû baisser la fréquence d’échantillonnage, car trop de calculs, la carte ne suivait pas

matcad:
A votre avis, est-ce-que utiliser le plus de booléen ou de byte possible me permettrai de gagner beaucoup de place?

Non.
En plus ça risque de dégrader ton programme (valeurs tronquées)