Size: a a a

ESP8266 & ESP32 [RU]

2021 September 01

🤙Ꮶ

🤙🏻 ℙ𝔸𝕍𝔼𝕃 ᏦᎾᏢᏦᎾᏉ... in ESP8266 & ESP32 [RU]
при чем через set_gpio
источник

D

Daniil in ESP8266 & ESP32 [RU]
А мне надо 8к пикселей обойти)
источник

🤙Ꮶ

🤙🏻 ℙ𝔸𝕍𝔼𝕃 ᏦᎾᏢᏦᎾᏉ... in ESP8266 & ESP32 [RU]
сча
источник

🤙Ꮶ

🤙🏻 ℙ𝔸𝕍𝔼𝕃 ᏦᎾᏢᏦᎾᏉ... in ESP8266 & ESP32 [RU]
это решаемо
источник

D

Daniil in ESP8266 & ESP32 [RU]
Ну да пофиг. Она просто чуть тусклее горит, А так вроде норм
источник

🤙Ꮶ

🤙🏻 ℙ𝔸𝕍𝔼𝕃 ᏦᎾᏢᏦᎾᏉ... in ESP8266 & ESP32 [RU]
static void xRenderTask(void* args)
{
   int8_t current = 2;

   uint8_t min_number = 0;
    for (int min = 0; min < 2; min++) {
       if (display_chars[min] == 63) {
           min_number++;
       } else {
           break;
       }
    }

   for (;;) {
       for (current = 2; current >= min_number; current--) {
           flushNumbers();
           highlightNumber(current);
           renderNumber(display_chars[current]);
           for (int i = 0; i < 130000; i++) {}
       }

       current = 2;
       min_number = 0;

       for (int min = 0; min < 2; min++) {
           if (display_chars[min] == 63) {
               min_number++;
           } else {
               break;
           }
       }
       vTaskDelay(1);
   }
}
источник

🤙Ꮶ

🤙🏻 ℙ𝔸𝕍𝔼𝕃 ᏦᎾᏢᏦᎾᏉ... in ESP8266 & ESP32 [RU]
У меня вот такой цикл, т.е. я делаю еще даже задержки пустым циклом чтобы размазать эту МС равномерно на все 3 цифры
источник

🤙Ꮶ

🤙🏻 ℙ𝔸𝕍𝔼𝕃 ᏦᎾᏢᏦᎾᏉ... in ESP8266 & ESP32 [RU]
В твоем случае можно успеть обойти все 8к, потом 1мс подождать и еще раз обойти.
источник

🤙Ꮶ

🤙🏻 ℙ𝔸𝕍𝔼𝕃 ᏦᎾᏢᏦᎾᏉ... in ESP8266 & ESP32 [RU]
тут у меня еще логика с отключением ведущих нулей, но в общем смысл должен быть понятен
источник

D

Daniil in ESP8266 & ESP32 [RU]
Да, я понял, спасибо)
источник

🤙Ꮶ

🤙🏻 ℙ𝔸𝕍𝔼𝕃 ᏦᎾᏢᏦᎾᏉ... in ESP8266 & ESP32 [RU]
Всегда пожалуйста =)
источник

DS

Dmitriy Salko in ESP8266 & ESP32 [RU]
Вообще yield или любое обращение к функции freertos достаточно.
источник

DS

Dmitriy Salko in ESP8266 & ESP32 [RU]
Вообще странно что у вас ни одного мьютекса или очереди. У вас же таска не сама в себе, она берет какие-то данные с внешнего мира (renderNumber, к примеру, это же не константа?)
источник

В

Васька in ESP8266 & ESP32 [RU]
А внутрь делай залезть и посмотреть что он там дергает нельзя?
источник

🤙Ꮶ

🤙🏻 ℙ𝔸𝕍𝔼𝕃 ᏦᎾᏢᏦᎾᏉ... in ESP8266 & ESP32 [RU]
Да, это функция в рамках файла объявлена. Код не изначально не планировался как потокобезопасный, так что и мютексы не завезли)) А так при инициализации дисплея стартует таск рендера, и есть функция которая "торчит" из файла, кторая может устанавливать текущее значение в локальную переменную в рамках файла. Ну и собственно со следующей мс будет уже новое значение отображаться.
источник

🤙Ꮶ

🤙🏻 ℙ𝔸𝕍𝔼𝕃 ᏦᎾᏢᏦᎾᏉ... in ESP8266 & ESP32 [RU]
Но вообще мб руки дойдет переделаю на очередь на изменение отображаемого значения. В конкрено моем случае это избыточно)
источник

В

Васька in ESP8266 & ESP32 [RU]
А что будет если в одном треде читать во утром писать один и тот же массив, если это просто набор точек на картинке? Не вижу зачем тут мютексы и прочее
источник

DS

Dmitriy Salko in ESP8266 & ESP32 [RU]
Затем что может быть ситуация, когда запись остановилась где-то в середине, и уже в другом треде вы начали эти незаконченные данные читать
источник

DS

Dmitriy Salko in ESP8266 & ESP32 [RU]
Есть ещё ключевое слово atomic - как альтернатива единичным переменным, которое гарантирует что переменная в таком "полузаписанном" или "полупрочитанном" состоянии не будет
источник

В

Васька in ESP8266 & ESP32 [RU]
Ну будет пол картинки старое рисовать. Не особо проблема
источник