Непонятное поведение массива

Skeef

✩✩✩✩✩✩✩
16 Авг 2021
3
0
Добрый день!
Пишу отладочный код для 24С256.
Наткнулся на непонятное поведение записи чтения массива
C++:
void setup()
{
  Serial.begin(9600);
  Serial.println("Hello!");

  uint8_t dat[10];
  Serial.println(F("Writing random "));
  for (uint8_t i = 0; i < 10; i++) {
    dat[i] = random(0,254);
    Serial.print(dat[i]);
    Serial.print(' ');
  }
  Serial.println();
  Serial.println();

  Serial.println(F("Check: "));
  for (uint8_t i = 0; i < 10; i++) {
    Serial.print(dat[i]);
    Serial.print(' ');
  }
}
Получаю после прошивки (Nano, PlatformIO):
Код:
Hello!
Writing random
43 71 29 238 220 122 60 98 43 169

Check:
184 184 184 184 184 184 184 184 184 184
Что я делаю не так?

PS
Вынес объявление массива до setup() - все заработало верно. Но ведь при объявлении массива внутри setup() он же находится в зоне видимости.
Зато теперь в dat[] находятся одни и теже данные. т.е. код dat = random(0,254); не отрабатывает.
Почему не работает?
 
Изменено:

Геннадий П

★★★★★★✩
14 Апр 2021
1,799
579
44
Странно, но на симуляторе (лень ардуину в коробках искать) все нормально отрабатывает:
Код:
Hello!
Writing random 
43 71 29 238 220 122 60 98 43 169 

Check: 
43 71 29 238 220 122 60 98 43 169
 

poty

★★★★★★✩
19 Фев 2020
2,956
886
Скорее всего - оптимизатор. Использования массива в области видимости не обнаруживается, поэтому большинство действий "оптимизируется".
 

bort707

★★★★★★✩
21 Сен 2020
2,859
849
@Skeef, код правильный, должен работать, думаю при первом тесте вы где-то в другом месте накосячили
 

rGlory

★✩✩✩✩✩✩
11 Май 2021
200
20
Скорее всего - оптимизатор. Использования массива в области видимости не обнаруживается, поэтому большинство действий "оптимизируется".
Шутите? Оптимизатор никогда не должен приводит к неправильной работе корректной программы. Просто многие привыкли писать программы через одно место, отсюда вылазят байки, что оптимизатор может что-то сломать.
 

poty

★★★★★★✩
19 Фев 2020
2,956
886
@rGlory, нет, не шучу. Оптимизатор - тупая штука, он тонким мыслям не обучен.
 

rGlory

★✩✩✩✩✩✩
11 Май 2021
200
20
@poty, оптимизатор, он ни тупой или умный. Это просто часть компилятора. Проблема в том, что при использовании оптимизатора кривой код, которые основан на неправильных предствалениях, начинает проявлять ошибки (это не значит, что в неоптимизированном коде их нет, просто часто они себя не проявляют). К сожалению очень многие пишут этот кривой код, а потом грешат, что оптимизатор мол тупой, не понимает полет мысли.
 

poty

★★★★★★✩
19 Фев 2020
2,956
886
@rGlory, оптимизатор - не часть компилятора, по крайней мере - необязательная его часть. Более того, в некоммерческих продуктах часто работает "не до конца". Оптимизатор - это представление его разработчика по поводу того, как должен быть написан код. И это представление часто бывает ещё более уродлливым, чем написанный код.
 

rGlory

★✩✩✩✩✩✩
11 Май 2021
200
20
Оптимизатор - это представление его разработчика по поводу того, как должен быть написан код.
Нет, это использование оптимизаций в рамках спецификаций языка. То, что кривой код многих при этом ломается, это проблема кривого кода, а не оптимизатора.

Насчет, работает "не до конца" не понял, как это.
 

bort707

★★★★★★✩
21 Сен 2020
2,859
849
Господа, мне кажется вы спорите об одном и том же