Hi Guy, I’m Italo. I’m just starting to learn about the Daisy Seed platform, I’m really excited to use Daisy Seed, but I still don’t really understand how to make things work. I have a development experience with the FV-1 and Arduino, but I’m still lost in trying to implement some functions in my code, because I’m trying to combine a reverb with a pitchshifter, but I get a RAM error.
I’ve already seen that the function to use external RAM memory is DSY_SDRAM_BSS, but I have no idea where to insert this function in the code. I already tried to insert as follows “ReverbSc DSY_SDRAM_BSS verb;” however the code generates a syntax error, I also tried “ReverbSc DSY_SDRAM_BSS, verb;” and I do not receive a syntax error, but the code does not compile, pointing to the following error:
c:/users/italo/documents/daisytoolchain-0.3.1/windows/bin/…/lib/gcc/arm-none-eabi/10.2.1/…/…/…/…/arm- none-eabi/bin/ld.exe: build/Verb.elf section .bss' will not fit in region
SRAM’
c:/users/italo/documents/daisytoolchain-0.3.1/windows/bin/…/lib/gcc/arm-none-eabi/10.2.1/…/…/…/…/arm- none-eabi/bin/ld.exe: region `SRAM’ overflowed by 143524 bytes.
Below is my code:
#include “daisy_petal.h”
#include “daisysp.h”
using namespace daisy;
using namespace daisysp;
// Declare the daisy_petal location for hardware access
static DaisyPetal hw;
static PitchShifter ps;
static ReverbSc DSY_SDRAM_BSS verb;
static Parameter vtime, vfreq, vsend;
bypass bool;
// This runs at a fixed rate, to prepare audio samples
void callback(AudioHandle::InterleavingInputBuffer in,
AudioHandle::InterleavingOutputBuffer out,
size_t size)
{
float dryl, dryr, wetl, wetr, sendl, sendr;
hw.ProcessDigitalControls();
verb.SetFeedback(vtime.Process());
verb.SetLpFreq(vfreq.Process());
vsend.Process(); // Process Send to use later
//bypass = hw.switches[DaisyPetal::SW_5].Pressed();
//if(hw.switches[DaisyPetal::SW_1].RisingEdge())
//bypass = !bypass;
bypass = false;
for(size_t i = 0; i < size; i += 2)
{
dryl = in[i];
dryr = in[i + 1];
sendl = ps.Process(dryl);//dryl * vsend.Value();
sendr = ps.Process(dryr);//dryr * vsend.Value();
verb.Process(sendl, sendr, &wetl, &wetr);
if(bypass)
{
out[i] = in[i]; // left
out[i + 1] = in[i + 1]; // right
}
else
{
out[i] = wetl;
out[i + 1] = dryr + wetr;
}
}
}
int main(void)
{
float samplerate;
hw.Init();
hw.SetAudioBlockSize(4);
samplerate = hw.AudioSampleRate();
ps.Init(samplerate);
ps.SetTransposition(12.0f);
vtime.Init(hw.knob[hw.KNOB_1], 0.6f, 0.999f, Parameter::LOGARITHMIC);
vfreq.Init(hw.knob[hw.KNOB_2], 1000.0f, 20000.0f, Parameter::LOGARITHMIC);
vsend.Init(hw.knob[hw.KNOB_3], 0.0f, 1.0f, Parameter::LINEAR);
verb.Init(samplerate);
hw.StartAdc();
hw.StartAudio(callback);
while(1)
{
// Do Stuff Infinitely Here
System::Delay(10);
hw.ClearLeds();
hw.SetFootswitchLed(hw.FOOTSWITCH_LED_1, bypass ? 0.0f : 1.0f);
hw.UpdateLeds();
}
}