Platformio vs Arduino IDE

deestylov
Offline
Зарегистрирован: 10.12.2020

Приветствую всех! 

 

Для работы с ESP32 использую: 

 

Visual Studio Code Версия: 1.53.0

Platformio 5.1.0 

 

Имеется не большой код, который выводит на дисплей число и увеличивает его:

////////////////////

#include <Arduino.h>

#include <SPI.h>

#include <TFT_eSPI.h>   

#include <lvgl.h>



TFT_eSPI tft = TFT_eSPI(); // Invoke custom library



static lv_disp_buf_t disp_buf;

static lv_color_t buf[LV_HOR_RES_MAX * 10];



lv_obj_t * my_label;

int num = 1;



int screenWidth = 320;

int screenHeight = 240;

  

  /* Display flushing */

void my_disp_flush(lv_disp_drv_t *disp, const lv_area_t *area, lv_color_t *color_p)

{

  uint16_t c;



  tft.startWrite(); /* Start new TFT transaction */

  tft.setAddrWindow(area->x1, area->y1, (area->x2 - area->x1 + 1), (area->y2 - area->y1 + 1)); /* set the working window */

  for (int y = area->y1; y <= area->y2; y++) {

    for (int x = area->x1; x <= area->x2; x++) {

      c = color_p->full;

      tft.writeColor(c, 1);

      color_p++;

    }

  }

  tft.endWrite(); /* terminate TFT transaction */

  lv_disp_flush_ready(disp); /* tell lvgl that flushing is done */

}



bool my_touchpad_read(lv_indev_drv_t * indev_driver, lv_indev_data_t * data)

{

    uint16_t touchX, touchY;

    bool touched = tft.getTouch(&touchX, &touchY, 600);

    if(!touched)  {

     return false;

    }

    if(touchX>screenWidth || touchY > screenHeight)

    {

    }

    else

    {

      data->state = touched ? LV_INDEV_STATE_PR : LV_INDEV_STATE_REL;

    }

    return false; /*Return `false` because we are not buffering and no more data to read*/

}





void setup() {



Serial.begin (115200);

  tft.init();

    tft.setRotation(3);

      lv_init();

          

      uint16_t calData[5] = { 275, 3620, 264, 3532, 1 };

  tft.setTouch(calData);

  lv_disp_buf_init(&disp_buf, buf, NULL, LV_HOR_RES_MAX );



  /*Initialize the display*/

  lv_disp_drv_t disp_drv;

  lv_disp_drv_init(&disp_drv);

  disp_drv.hor_res = screenWidth;

  disp_drv.ver_res = screenHeight;

  disp_drv.flush_cb = my_disp_flush;

  disp_drv.buffer = &disp_buf;

  lv_disp_drv_register(&disp_drv);



  /*Initialize the input device driver*/

  lv_indev_drv_t indev_drv;

  lv_indev_drv_init(&indev_drv);             /*Descriptor of a input device driver*/

  indev_drv.type = LV_INDEV_TYPE_POINTER;    /*Touch pad is a pointer-like device*/

  indev_drv.read_cb = my_touchpad_read;      /*Set your driver function*/

  lv_indev_drv_register(&indev_drv);         /*Finally register the driver*/



  my_label = lv_label_create(lv_scr_act(), NULL);



}



void loop() {

    char buf[60];

sprintf(buf, "num: %d\n", num);

num++;

lv_label_set_text(my_label, buf);

        lv_task_handler(); /* let the GUI do its work */

     delay(5);

     

}

/////////////////// 

 

Platformio.ini:

 

[env:esp32doit-devkit-v1]

platform = espressif32

board = esp-wrover-kit

framework = arduino

monitor_speed = 115200

upload_port = /dev/cu.SLAB_USBtoUART

 

//////////////////////////

 

В Адуино IDE  все работает,  в платформио значение int num = 1 не увеличивается, выводит на дисплей просто единицу. В чем может быть дело?
 

 

 

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

По названию темы подумал, что намечается срач на тему тотального превосходства одного над другим 

deestylov
Offline
Зарегистрирован: 10.12.2020

На самом деле, все больше убеждаюсь, что и то и другое - так себе варианты... С Ардуино итак все понятно, если у пользователей Windows она стабильно (более или менее) работает, то на Mac вылеты через раз, а Платформио - каждое обновление как сюрприз. Обновитесь и не факт уже, что Ваш код будет исправно работать. 

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

deestylov пишет:

На самом деле, все больше убеждаюсь, что и то и другое - так себе варианты... С Ардуино итак все понятно, если у пользователей Windows она стабильно (более или менее) работает, то на Mac вылеты через раз, а Платформио - каждое обновление как сюрприз. Обновитесь и не факт уже, что Ваш код будет исправно работать. 

Два мака, на каждом по 2 Arduino IDE (версий 1.8.8 и 1.8.13). За 2 года ни одного вылета. Энергоэффективность ни к черту, это да, но на стабильность не клевещите. Была единственная проблема с SDK ESP32 при обновлении до BIGSUR, но это частный случай

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Очевидно программы используют разные версии компилятора, а где то в коде есть кусок, который каждый из них трактует по своему.
Возможно в случае где инкремент не работает, он работает, но программа тупо дохает и начинается заново.
Проверить можно просто в сетапе выводя в порт сообщение, точно так же можно проверит не зависла ли программа выводя в порт, что то в конце loop
Искать лениво.

deestylov
Offline
Зарегистрирован: 10.12.2020

Kakmyc пишет:
Очевидно программы используют разные версии компилятора, а где то в коде есть кусок, который каждый из них трактует по своему. Возможно в случае где инкремент не работает, он работает, но программа тупо дохает и начинается заново. Проверить можно просто в сетапе выводя в порт сообщение, точно так же можно проверит не зависла ли программа выводя в порт, что то в конце loop Искать лениво.

Интересно, как еще можно понимать "++" у переменной в функции))) Скорее всего косяк в новой версии Платформио, ОПЯТЬ... В буфер она тоже ничего не пишет, как я понял..

 

 

deestylov
Offline
Зарегистрирован: 10.12.2020

Rumata пишет:

Два мака, на каждом по 2 Arduino IDE (версий 1.8.8 и 1.8.13). За 2 года ни одного вылета. Энергоэффективность ни к черту, это да, но на стабильность не клевещите. Была единственная проблема с SDK ESP32 при обновлении до BIGSUR, но это частный случай

[/quote]

А еще такое бывает - делаешь копи паст, в Ардуино IDE вставляется дважды))) Перезагружаешь, норм) Mac OS X Mojave

Kakmyc
Offline
Зарегистрирован: 15.01.2018

deestylov пишет:

Интересно, как еще можно понимать "++" у переменной в функции))) Скорее всего косяк в новой версии Платформио, ОПЯТЬ... В буфер она тоже ничего не пишет, как я понял..

 

 

На днях сталкивался с подобным, так и не понял, что было, но инкремента не было по коду val++;
А вот в такой форме записи появился:
val=val+1;

sadman41
Offline
Зарегистрирован: 19.10.2016

Что же это за компиляторы такие, что ++  не понимают? С пиратских торрента, поди, нуленные.

deestylov
Offline
Зарегистрирован: 10.12.2020

sadman41 пишет:

Что же это за компиляторы такие, что ++  не понимают? С пиратских торрента, поди, нуленные.

Это PlatformIO + VS Code последней версии, ничего дополнительно не ставил. При желании, Вы всегда можете протестировать)) 

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

deestylov пишет:

А еще такое бывает - делаешь копи паст, в Ардуино IDE вставляется дважды))) Перезагружаешь, норм) Mac OS X Mojave

Это старый баг. ТОЛЬКО в кириллической раскладке проявляется. Перезагружаться не приходится, просто вернуть раскладку в латиницу и все. Кстати, если после "двойного паста" нажать анДу (cmd + Z), лишний "паст" удаляется. 

sadman41
Offline
Зарегистрирован: 19.10.2016

Мне IDE хватает, не знаю зачем мне этих монстров ставить для странных проб.

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

sadman41 пишет:

Мне IDE хватает, не знаю зачем мне этих монстров ставить для странных проб.

+1 Тут еще какой момент, если возникает какой-то глюк, в Ардуино ИДЕ точно знаешь виноватого. Это всегда ты сам. 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

deestylov пишет:

на Mac вылеты через раз, а Платформио - каждое обновление как сюрприз. Обновитесь и не факт уже, что Ваш код будет исправно работать. 

Поэтому на Маке есть time machine, как бы они смотрят в будущее (но дорого, сцуко...)

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

BOOM пишет:

Поэтому на Маке есть time machine, как бы они смотрят в будущее (но дорого, сцуко...)

TM в такой ситуации не поможет. ТМ полезен исключительно в ситуации полного пиздеца)) Нужно быть оооочень способным, чтобы довести юникс-ситему до такого состояния

b707
Offline
Зарегистрирован: 26.05.2017

deestylov пишет:

 Платформио - каждое обновление как сюрприз. Обновитесь и не факт уже, что Ваш код будет исправно работать. 

а зачем обновлять? У меня абсолютно везде, где есть такая опция - обновления выключены. Выключил обновления на Винде, у всех программ, в софте на телефоне, никогда не позволяю обновлятся прошивкам на роутере и телевизоре. Обновляю только тогда, когда текущее ПО глючит и я точно знаю, что новая версия исправляет проблему.

Что касается темы ветки - у меня стоит Вижуал Студия и она мне очень нравится, работает чрезвычайно стабильно и уж точно не хуже Ардуино ИДЕ. Обновления VS выключены.

Ардуино ИДЕ пользуюсь для простых проектов. На разных компах стоят разные версии - от 1.6.12 до 1.8.13 - какие были актуальными в момент установки. Ни ИДЕ, ни библиотеки никогда не обновляю.

Зато и проблем нет.

deestylov
Offline
Зарегистрирован: 10.12.2020

b707 пишет:

deestylov пишет:

 Платформио - каждое обновление как сюрприз. Обновитесь и не факт уже, что Ваш код будет исправно работать. 

а зачем обновлять? У меня абсолютно везде, где есть такая опция - обновления выключены. Выключил обновления на Винде, у всех программ, в софте на телефоне, никогда не позволяю обновлятся прошивкам на роутере и телевизоре. Обновляю только тогда, когда текущее ПО глючит и я точно знаю, что новая версия исправляет проблему.

Что касается темы ветки - у меня стоит Вижуал Студия и она мне очень нравится, работает чрезвычайно стабильно и уж точно не хуже Ардуино ИДЕ. Обновления VS выключены.

Ардуино ИДЕ пользуюсь для простых проектов. На разных компах стоят разные версии - от 1.6.12 до 1.8.13 - какие были актуальными в момент установки. Ни ИДЕ, ни библиотеки никогда не обновляю.

Зато и проблем нет.

Согласен. Только пересел просто, еще не успел отключить. А вообще, но мой взгляд, проще сразу с Платформио начинать, даже если пишешь простой проект. Невероятно-удобная работа с кодом и синтаксисом + компиляция быстрее (ИМХО). Все прекрасно, если бы не периодические багги, не обновляться тоже такое себе...