Из Ардуино в другие IDE






   
    При попытке компиляции проекта написанного в Arduino IDE, можно не мало удивиться количеству ошибок и предупреждений которые выдаст компилятор при попытки сборки проекта. Хотя в Ардуино все компилировалось и работало без проблем. Ошибки не слишком серьезные, и я бы не стал их считать минусом Arduino IDE. Список будет пополнятся по мере их обнаружения.


       

    сomparison between signed and unsigned integer

    Сравнение знаковой и без знаковой переменной. Например будут равны при сравнении int -1 и unsigned int 65535, -2 и 65534, и так далее. Обе переменные должны быть одного типа.


       

    suggest parentheses around '&&' with in '||'

    Не проставлены скобки однозначно указывающие на порядок сравнения значений. Например: if ((AC) || (A>D) && (B>D)) должно быть ( ((AC)) || ((A>D) && (B>D)))


       

    control reaches end of non-void function

    Оператор return отсутствует либо находится не в основном блоке функции. То есть если return есть, но находится в блоках if или case, то в конце основного блока так же необходимо поставить return.


       

    This decimail constant is unsigned only in ISO C90

    К константе типа unsigned long необходимо добавить суффикс UL. Например const unsigned long value = 2587856UL;


       

    non-static data member initializer only aviable with -std=c++11 or -std=gnu++11

    Инициализацию полей класса необходимо проводить в конструкторе. В Arduino IDE есть возможность проинициализировать переменные прям в описании класса, что довольно удобно, когда пишется пробный класс и пока не понятно, переменные будут инициализированы в конструкторе или Set методом.


       

    Variable -sized object 'name' may not be initialized

    Компилятор опасается, что массив вида int name[value]; окажется с нулевым количеством ячеек. Можно принудительно увеличить количество ячеек int name[value+1]; Можно создать указатель и ему присвоить созданный массив. На эту ошибка ругался Code::Block, Studio ее пропускал.


       

    invalid conversion from 'void*' to ' Window_Rectangle'

    Когда указатель на объект был сохранен в указателе с типом void, или в массиве указателей с таким же типом, при присвоении новому указателю из массива void (pointer_obj[n]) необходимо выполнить явное приведение указателя. Синтаксис аналогичен приведению переменных.
    Window_Rectangle *rectangle = pointer_obj[n]; // Допустимо в Ардуино.
    Window_Rectangle *rectangle = ((Window_Rectangle*)pointer_obj[n]); // Приведение указателя


   Но стоит отметить, в пользу Arduino IDE, настройки компилятора подобраны таким образом, что у начинающего не возникает проблем при работе с портами, и регистрами контроллера, обращаясь к ним как угодно, сдвигая их или маскируя биты, в цикле или с большим количеством case. Для компилятора, обращение к порту, как к глобальной переменной, только переменную можно указать volatile и спокойно ехать дальше, а к макро-определению PORTn такого не применить, когда обращений к порту не много, все норм, когда идет пачка в более 50 case, компилятор начинает оптимизацию и начинаются нюансы...
  Так же стоит отметить в Ардуино всегда корректную работу с глобальными переменными, нет нужды беспокоится что что-то не отмечено как volatile. Вероятно все настроено под небольшой проект. Скетч и несколько подключенных библиотек.








      Статьи


  
    









   Изготовление рекламы Изготовление мебели  Общестроительные работы 3D моделирование       Статьи
  Благоустройство тер.
   Общее портфолио    Мебель для мастерской   Установка бордюров   Портфолио   Контакты
   Наружняя реклама       Фасадные работы   Модели   Образец договора
   Внутреняя реклама       Утепление гаража   Инфо
   Таблички, наклейки       Косметический ремонт   Фото г.Надым
  Бетонные работы   Фото пригороды г.Надым