Char arr[] в String пустая строка

я выше уже высказывался, но повторю прямо кодом, компилятор конечно умён но по сравнению с писавшими на ассемблере - дурак дураком!

#include <avr\io.h>

//String received[1000];
uint8_t received[1000];

void setup() {
  DDRB = (1 << PB1);          //Setting direction of PB1
  USICR = (1 << USIWM0);      //Choosing SPI aka three wire mode
}

void loop() {
  uint8_t i = 0;
  while (1)
  {
    if ((USISR & (1 << USIOIF)) == 1)    //Checking USI data counter overflow flag to detect the end of transmission every byte
    {
      received[i] = USIBR; //Reading received byte from USIBR buffer register
      if (i < 1000) 
        i = i + 9;
     else 
        i = 0;
        USISR |= (1 << USIOIF); //Clearing counter overflow flag
      }
    }
  }
Скетч использует 258 байт (3%) памяти устройства. Всего доступно 8192 байт.
Глобальные переменные используют 9 байт (1%) динамической памяти, оставляя 503 байт для локальных переменных. Максимум: 512 байт.