Решено: Нужна помощь зала. Не объяснимая ошибка
Прошу очень помощи зала. Ситуация следующая: пишу прошивку «Бортовой компьютер» автомобиля
на основе Arduino Nano (хобби у меня такое, не работа).
Минимальный пример, для воспроизведения ошибки (удалил по максимуму всё, лишь бы ошибка воспроизводилась):
https://wokwi.com/projects/390348182761575425
Проблема в следующем, не обьяснимым образом, теряются данные в переменных при вызове функции translate.
1 2 3 |
String translate(String txt){ return txt; }; |
Например при использовании вот так (строки 141-146):
1 2 3 4 5 6 |
display.print(translate("Transmission:")); display.setCursor(0, 20); display.print(translate("Bridge:")); display.setCursor(0, 30); display.print(translate("GRM ribbon:")); display.display(); |
На экран выводится «Bridge». Однако стоит убрать строчку
1 |
display.print(translate("GRM ribbon:")); |
Как волшебным образом, на экран начинает выводится и Transmission: и Bridge:.
Дело не только в этой строчке. Закомментировав рандомно часть кода выше-ниже, вообще не относящегося к выводу на экран, можно добиться эффекта, что выводятся на экран все три строчки.
Подумал что памяти не хватает. Но вроде норм. Я уже начинаю сходить с ума, несколько дней бьюсь над проблемой. Проблема воспроизводится и на «реальном железе», не только в эмуляторе.
Update: си не умеет возвращать строки. Только массивы символов. Поэтому верный код что-то вроде:
1 2 3 |
const char * translate(char *txt){ return txt; }; |