Страница 1 из 1

Ошибка при компилировании скетча

Добавлено: 28.04.2017{, 19:09}
Texxx
Доброго всем дня.
Вопрос знатокам программирования.При компиляции скетча выход вот такое предупреждение:
C:\Temp\flprog\pr48\pr48.ino: In function '_nextionLissenStruct nextionListen(byte)':

C:\Temp\flprog\pr48\pr48.ino:935:27: warning: left shift count >= width of type

  temp.number = (cmd[4] << 24) | (cmd[3] << 16) | (cmd[2] << 8) | (cmd[1]);

                           ^

C:\Temp\flprog\pr48\pr48.ino:935:44: warning: left shift count >= width of type

  temp.number = (cmd[4] << 24) | (cmd[3] << 16) | (cmd[2] << 8) | (cmd[1]);

                                            ^
Что сиё может значить?
Компиляция завершается и программа записывается в ардуино. Но работать не хочет.

Ошибка при компилировании скетча

Добавлено: 28.04.2017{, 20:52}
Boroda
Если cmd типа byte, то при сдвижке на 8, 16 или 24 оно будет равно нулю. Как это делает компилятор:

Создается временная переменная TMP типа byte (тип этой переменной такой же как и тип cmd[x]).

temp.number = 0;
TMP = cmd[4] << 24; // это равно нулю, потому как байт задвигается влево на 24 бита.
temp.number |= TMP;
TMP = cmd[3] << 16; // это равно нулю, потому как байт задвигается влево на 16 бит.
temp.number |= TMP;
TMP = cmd[2] << 8; // это равно нулю, потому как байт задвигается влево на 8 бит.
temp.number |= TMP;
TMP = cmd[1];
temp.number |= TMP; // итоговый результат temp.number = cmd[1];

Чтобы заработало, надо сделать так:
temp.number = 0;
temp.number = cmd[4]; // записали в младший байт
temp.number = temp.number << 8; // сдвинули на 8
temp.number |= cmd[3]; // OR в младший байт
temp.number = temp.number << 8; // сдвинули на 8
temp.number |= cmd[2];
temp.number = temp.number << 8;
temp.number |= cmd[1];

Добавлено (28.04.2017, 20:52)
---------------------------------------------
Тоже несколько раз наступал на эти грабли. Чтоб заработала данная строка, переменная CMD должна быть типа UnsignedLong, тогда она может двигаться на 24 бита влево.

Ошибка при компилировании скетча

Добавлено: 26.02.2018{, 23:25}
Rom4ell0
Boroda, не могли бы вы подробнее описать что это за ошибка и откуда она лезет для человека далекого от программирования? Использую Flprog 3.0.3 и при компиляции скетча выползает такая же ошибка.. Где нужно объявить переменные - в setup? Может есть шанс вообще обойти эту ошибку без исправлениЙ в среде IDE?

Ошибка при компилировании скетча

Добавлено: 26.02.2018{, 23:40}
pan
Rom4ell0 писал(а):
26.02.2018{, 23:25}
Может есть шанс вообще обойти эту ошибку
нужно найти блок в проекте который вызывает эту ошибку. судя по первому посту это относится к блокам панели nextion