Anton
я не мерял. но вполне можно было бы тогда сделать какойнить iprintf чтобы только с интежерами
Yuriy
при этом печатать он будет просто не R - а меньшее подмножество, вот экономия вполне существенная
Anton
ладно, фиг с ним, с принтфом, но вот своя реализация квадратного корня...
Yuriy
atof - тоже самое
Yuriy
char strbuf[24]; strlcpy(strbuf, str, sizeof(strbuf)); char *pt = strbuf; while ((*pt != '\0') && isblank(*pt)) { pt++; } // Trim leading spaces signed char sign = 1; if (*pt == '-') { sign = -1; } if (*pt == '-' || *pt == '+') { pt++; } // Skip any sign float left = 0; if (*pt != '.') { left = atoi(pt); // Get left part while (isdigit(*pt)) { pt++; } // Skip number } float right = 0; if (*pt == '.') { pt++; uint32_t max_decimals = 0; while ((max_decimals < 8) && isdigit(pt[max_decimals])) { max_decimals++; } pt[max_decimals] = '\0'; // Limit decimals to float max of 8 right = atoi(pt); // Decimal part while (isdigit(*pt)) { pt++; right /= 10.0f; } } float result = left + right; if (sign < 0) { return -result; // Add negative sign } return result; сравни с оригинальным - он полностью покрывает, а этот нет - но не нужны более 8 знаков допустим , можно сэкономить еще
Anton
while (isdigit(*pt)) { pt++; right /= 10.0f; }
Anton
я не уверен прямо сказать в этом коде...
Yuriy
while (isdigit(*pt)) { pt++; right /= 10.0f; }
не знаю как так вышло :) но б,лин, не проблема - не мой код в любом случае , не мой мопед, поправить не сложно - на работу его не влияет , думаю компилятор это и так поправил
Anton
pt[max_decimals] = '\0'; — модифицируем оригинал?
Yuriy
pt[max_decimals] = '\0'; — модифицируем оригинал?
strlcpy(strbuf, str, sizeof(strbuf)); char *pt = strbuf;
Anton
а, сорри, статический буф
Anton
как он шарится между ядрами?
Yuriy
как он шарится между ядрами?
а чего бы ему не быть трейдсейф?
Anton
а чего бы ему не быть трейдсейф?
ну для этого он должен быть локальным в каждом треде
Anton
я понимаю, что "будем считать, что два ядра одновременно в этот код не попадут", и они, как правило, и не будут попадать...
Yuriy
я понимаю, что "будем считать, что два ядра одновременно в этот код не попадут", и они, как правило, и не будут попадать...
нет будем читать о проблемах concurrency а не придумывать их какой код "одновременно" попадут это код просто пример выполнения ограниченной задачи - имеющий меньший футпринт чем полный . по кругу начну. понятно должно быть
Anton
лет этак 17 назад я был больно такими проблемами укушен. всё, что могло вылезти от конкуренции — всё вылезло. даже то, что я думал невозможно.
Anton
в те времена в с++ строки были с рефкаунтом и даже простая операция взятия символа могла приводить к де-шарингу, что в мультитредовой среде было жестью, хотя сами данные не менялись и были константными
Yuriy
есть с данными проблема - с кодом "попасть одновременно" нет
Anton
ладно. я тут просто мимо проходил
Yuriy
ладно. я тут просто мимо проходил
ну 17 лет точно даром не проходят,, просто "проблема" с доступом и шарой данных между потоками , а не кода - он разный может быть :) ядра могут разный код - то есть не связано с "одна точка входа" или нет у них была и они выполняют "один код" - не важно
MrSyabro
https://telegra.ph/Smart-datchik-dvizheniya-02-14
Anton
такой вопрос. SPI через DMA или без — как лучше?
Yuriy
Anton
оно "разгружает проц", но я не знаю насколько оно быстрее
Anton
и быстрее ли
Yuriy
https://jeelabs.org/article/1713c/
Yuriy
от частоты зависит надо оно или нет - если она сотни герц то и ладно , а если нет , но и да
Anton
ну, скажем, частота SPI 10MHz
Yuriy
ну, скажем, частота SPI 10MHz
размер какой у полезной нагрузки? у DMA больше времени на транзакцию (ее старт) 2мк :) зато проц далее свободен если она большая 64+ далее пройдет без него , а если там 8 байт - то хз - что перевесит надо считать
Anton
да хтобы его знал, это ж что рисоваться будет
Anton
если линия, то там на каждую точку 6 транзакций, из них три команды и три данных. две команды адреса и одна данных
Yuriy
условные величины - порядки такие типа
Anton
это по килобайту
Anton
мне интреснее по маленьким порциям
Anton
я вообще не хочу фреймбуффер пока что делать
Yuriy
мне интреснее по маленьким порциям
через регистры же все равно не 8 байт
Yuriy
я вообще не хочу фреймбуффер пока что делать
https://forums.mbed.com/t/how-much-faster-can-dma-make-spi-based-lcd-driver-ili9341/7649/6
Andy
я вообще не хочу фреймбуффер пока что делать
А как хотите так и будет: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/spi_master.html
Anton
это не связано с фреймбуффером
Anton
ппл, какой максимальный размер очереди для SPI?
Anton
размер FIFО буфера
я про параметр queue_size
Anton
в стандартном примере стоит = 7, но нигде не нахожу ограничения на него
Anton
Transaction queue size. This sets how many transactions can be 'in the air' (queued using spi_device_queue_trans but not yet finished using spi_device_get_trans_result) at the same time
Andy
ппл, какой максимальный размер очереди для SPI?
FreeRTOS же - сколько памяти хватит :)
Anton
ok
SetPf
https://github.com/espressif/esp-idf/blob/v4.0.2/examples/peripherals/uart/uart_events/main/uart_events_example_main.c
SetPf
Поясните по примеру. Суть - есть буффер сайз, (константа) - создается уарт с буфферами (константа*2) - в обработке ивентов используется промежуточный буффер = (константа) Почему и нафига буффера 2х? Просто китайцу захотелось?
Владимир
Добрый день. Подскажите, есть вот такой модуль
Владимир
Владимир
Ткните пальцем на статью или так подскажите, для коректной работы какие пины куда нужно подключить?
Владимир
я имею ввиду подтяжки и тд
Владимир
про GPIO0 для прошивки я знаю
Владимир
просто про ESP8266 я в курсе какие куда, а тут видимо по другому чуток, заранее бобльшое спасибо
Владимир
Два резистора на питание, rx0-tx0 к uart,
> два резистора на питание Куда их. UART не нужен, надо чтобы просто ESP32 запустилась и работала
Владимир
вот тут виже только подключение EN и резистор на GPIO0, видимо к +3,3 подтянут
Владимир
Еще чтонибуть нужно?
Владимир
:))) Значит все правильно понял. Больше никакие пины не нужно никуда подтягивать?
Andy
:))) Значит все правильно понял. Больше никакие пины не нужно никуда подтягивать?
нет. Но имейте в виду, модуль поставляется "пустой", там нет никакой прошивки. Поэтому сильно сомневаюсь что вам не нужен uart. Конечно можно сразу припаять флаш с прошивкой или загрузится с sd, но это не ваш случай скорее всего.
Владимир
4 мегабайта вроде как
Владимир
UART не нужен тк будет заливаться прошивка ESPHome, а далее все монипуляции с прошивкой по воздуху
Владимир
Значит все гуд. Задача проста, модуль на коленках прошиваеться через UART , а потом впаиваеться в плату
Владимир
вот и вся схема :)))
Юрий
Я бы все равно на плате пятаки предусмотрел🤔
Viter
А что в esp32 с таймерами, как с ними работать?
Slava
А что в esp32 с таймерами, как с ними работать?
когда я задавал аналогичный вопрос. Мне посоветовали посмотреть библиотеку Хронос. Дальше дело не продвинулось.
Viter
А я сам уже кроме библиотеки Ticker нечего не нашел
Slava
Viter
Та цикл надо и прерывание и разовые
Viter
Че то Хронос не нахожу ничего конкретного по этой библиотеке
Slava
Че то Хронос не нахожу ничего конкретного по этой библиотеке
см. в менеджере библиотек в ардуино ide Chronos
Slava
Viter
Та описания по ней не нахожу