0
votes

I've been working on an LED wall and came into a RAM issue. Basically I am using teensy 3.0 and trying to load the following script, however, the script errors out with .bss will not fit into region 'RAM' Please help! Any information would be greatly appreciated! Thanks!

/*  
Nike NFL draft LED wall program

OctoWS2811 BasicTest.ino - Basic RGB LED Test
http://www.pjrc.com/teensy/td_libs_OctoWS2811.html
Copyright (c) 2013 Paul Stoffregen, PJRC.COM, LLC

*/

#include <OctoWS2811.h>

const int ledsPerStrip = 290;

DMAMEM int displayMemory[ledsPerStrip*6];
int drawingMemory[ledsPerStrip*6];

const int config = WS2811_GRB | WS2811_800kHz;

OctoWS2811 leds(ledsPerStrip, displayMemory, drawingMemory, config);

#define ORANGE 0xE05800
#define WHITE  0xFFFFFF
#define BLACK 0x000000
#define BLACK2 0x1E1E1E

void setup() {
  leds.begin();
  leds.show();
}

static int widths[] = { 30, 30, 50, 90, 40, 60 };
static int speeds[] = { 5, 5, 10, 16, 11, 13 };
static int locations[] = { 0, 0, 0, 0, 0, 0 };
static int counter = 0;
//static int location = 0;
static boolean reverse = false;

int blend(int source      , float alpha) {
  int source_r = (source >> 16);
  int source_g = ((source >> 8) & 0x00FF);
  int source_b = (source & 0x0000FF);

  source_r = source_r * alpha;
  source_g = source_g * alpha;
  source_b = source_b * alpha;

  return source_b | (source_g << 8) | (source_r << 16);
}

void loop() {
  int microsec = 2000000 / leds.numPixels();  // change them all in 2 seconds

  int location;
  int offset;
  int width;
  int current;
  int min;
  int color;
  float alpha = 0.95; // Set brightness of head
  int head_width = 3; // Set width of head

  delay(20);

  int i;
  for(i = 0; i < 6; ++i) {
    location = locations[i];
    width = widths[i];
    color = 0xFFFFFF;
    offset = i*ledsPerStrip;

    location = location + speeds[i];

    if(location > ledsPerStrip + width) {
      location = 0;
    }

    locations[i] = location;

    if(location < width) {
      current = location;
      min = 0;
    } else if(location >= width) {
      current = location;
      min = location - width + 1;
    }

    for(current; current >= 0; --current) {
      if(current >= min) {
        if(current < ledsPerStrip) {
          if(!reverse) {
            leds.setPixel(current + offset, color);
          } else {
            leds.setPixel((ledsPerStrip - current) + offset, color);
          }
        }
        if(current < (location - head_width)) {
          color = blend(color, alpha);
        }
      } else {
        if(!reverse) {
          leds.setPixel(current + offset, BLACK);
        } else {
          leds.setPixel((ledsPerStrip - current) + offset, BLACK);
        }
      }
    }
  }

  leds.show();

  counter++;
}

And the returned error: This report would have more information with "Show verbose output during compilation" enabled in File > Preferences. Arduino: 1.0.5 (Windows 7), Board: "Teensy 3.0" c:/program files/arduino/hardware/tools/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/4.7.2/../../../../arm-none-eabi/bin/ld.exe: Nike_NFL_Program.cpp.elf section .bss' will not fit in regionRAM' c:/program files/arduino/hardware/tools/arm-none-eabi/bin/../lib/gcc/arm-none-eabi/4.7.2/../../../../arm-none-eabi/bin/ld.exe: region `RAM' overflowed by 1028 bytes collect2.exe: error: ld returned 1 exit status

Thanks!

1

1 Answers

0
votes

Your simply running out of memory. sizing it down from 6 to 5 compiles. Note that the 3.0 has 16384 of SRAM. Each multiple of consumes a large chunk of the limited 16384 of SRAM.