Mike
как вариант - назвать иначе?
пока не понятно что есть Printable&, он на класс ссылается, он странный class Print; /** The Printable class provides a way for new classes to allow themselves to be printed. By deriving from Printable and implementing the printTo method, it will then be possible for users to print out instances of this class by passing them into the usual Print::print and Print::println methods. */ class Printable { public: virtual ~Printable() {} virtual size_t printTo(Print& p) const = 0; }; #endif
Mike
сорри за темноту, а зачем вообще нужны эти перегружаемые методы?
чтобы не парится типами входных параметров, удобство С++
Serjio
на какую именно строчку ругань идет?
Mike
на какую именно строчку ругань идет?
сейчас немного переделал, вот свежее: C:/avrprojects/GSM_alarm_garage_esp32/src/config.ino: In function 'void putLogln(int)': C:/avrprojects/GSM_alarm_garage_esp32/src/config.ino:502:22: error: call of overloaded 'putLogln(String)' is ambiguous putLogln(String("")); ^ In file included from C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:122:0: src\config.h:174:7: note: candidate: void putLogln(const String&) Archiving .pio\build\esp-wrover-kit\lib782\libAdafruit Unified Sensor.a void putLogln(const String &results); ^ C:/avrprojects/GSM_alarm_garage_esp32/src/config.ino:469:6: note: candidate: void putLogln(const String&, int) void putLogln(const String &results, int msg_level_debug=0){ Код: config.ino:502 это первый вызов в этой функции void putLogln(int msg_level_debug=0){ putLogln(String("")); return; } config.h:174 это первое объявление в Хидере: void putLogln(const String &results); void putLogln(); void putLogln(const Printable& x); void putLogln(unsigned char b, int base); void putLogln(const char *results); void putLog(const String &results); config.ino:469 это сама функция void putLogln(const String &results, int msg_level_debug=0){
Mike
такое ощущение, что компилятор путает фунцию в хидоре и в ino и не может между ними выбрать, хотя в хидере только объявление, а в ino сами функции.
Mike
в config.ino есть конечно подключение хидера: #include "Arduino.h" #include "config.h"
Serjio
вместо вызова с String("") попробовать сделать это чуть выше - объявить и проинициализировать переменную, вызвать с ней а потом вызвать с явно указанной строкой (""?)
Mike
вместо вызова с String("") попробовать сделать это чуть выше - объявить и проинициализировать переменную, вызвать с ней а потом вызвать с явно указанной строкой (""?)
интересное кино, дописал функцию так void putLogln(int msg_level_debug=0){ String str_tmp=""; putLogln(str_tmp, msg_level_debug); //putLogln(String("")); return; } и компилятор перестал на ее ругаться, начал уже к другим вызовам стринговой putLogln ошибки генерить.
Mike
это и делаю сейчас, но не понимаю пока что за тип такой Printable&
Mike
из-за него похоже и не определенность, лучше прям на конкретные классы переписать.
Mike
обстракция очередная =(
Mike
их будет много, а хотелось таки перейти на С++ от Си.
Mike
вообще странно и мне не понятно, почему компилятор не может определиться для такого вызова: putLogln("rele0 off"); предлагает два функции: src\config.h:174:7: note: candidate: void putLogln(const String&) void putLogln(const String &results); ^ src\config.h:178:7: note: candidate: void putLogln(const char*) void putLogln(const char *results); а передается же массив символов, какого хрена он хочет String?
Mike
сделать функцию void putLogln(const char *results); и он определиться?
Mike
стоп, она есть.
Mike
это по сути без перегруженных функций тогда работать.
Mike
при том, что выбрать не может компилятор нужную.
Mike
причем без необязателнього параметра работало без вопросов и ошибок
Mike
много где в проектах выводу данные в web интерфейс и uart, уже сделал перегруженные функции для этого, используется много где.
Mike
так я и спрашиваю, как сделать правильно, чтобы он не путался.
Mike
да, вот они разные по входу, но вызывается всегда где String void putLogln(const String &results, int msg_level_debug=0){ ... } void putLogln(const char *results, int msg_level_debug=0){ putLogln(String(results), msg_level_debug); return; }
Mike
в устройстве не было такой проблемы.
Mike
сделал прям так, но теперь ругается на вызов таким способом putLogln("rele0 on"); src\config.h:174:7: note: candidate: void putLogln(const String&) void putLogln(const String &results); ^ src\config.h:178:7: note: candidate: void putLogln(const char*) void putLogln(const char *results); ^ C:/avrprojects/GSM_alarm_garage_esp32/src/config.ino:469:6: note: candidate: void putLogln(const String&, int) void putLogln(const String &results, int msg_level_debug=0){ ^ C:/avrprojects/GSM_alarm_garage_esp32/src/config.ino:518:6: note: candidate: void putLogln(const char*, int) void putLogln(const char *results, int msg_level_debug=0){ хотя есть однозначная функция void putLogln(const char *results, int msg_level_debug=0){ putLogln((String)String(results), msg_level_debug); return; } массив символов "rele0 on" должен передаться в нее?
Mike
putLogln((String)String("rele0 on")); не предлагать, это жрет ресурсы
Mike
с ним есть данные, которые надо передавать в эту функцию. почему не выбирается однозначно с чаром ?
Mike
в моём случае что ему не нравиться то?
Mike
не понятно, почему компилятор тут пытается выбрать, хотя ему по типу параметра есть совершенно однозначное совпадения с одной из функций.
Алексей
Убрать у второй функции значение по умолчанию и будет счастье :)
Mike
Проблема в том, что есть PutLogin(string) и putLogin(string, int =0)
первое это с Хидере, это должно быть обхявление функции, а вторая это сама функция с .ino иначе ошибки лезут, без объявления в хидере.
Mike
Убрать у второй функции значение по умолчанию и будет счастье :)
оно как раз и нужно, без него все работает =)
Алексей
Так нельзя. Если есть функция с доп параметром, то он нужен. Если он нужен не всегда, то функция без него не нужна (он есть по умолчанию)
Алексей
Компилятор не знает что выбрать , либо функцию без параметра, либо с параметром по умолчанию.
Mike
это я так по началу и написал код, а потом оказалось надо где-то в одном месте, либо хилер, либо ino прописывать необязательные параметры.
Алексей
Тогда сигнатуры не должны пересекаться. В одном бллке компиляции одно описание
Mike
Тогда сигнатуры не должны пересекаться. В одном бллке компиляции одно описание
namespace разных у меня нету. сигнатуры отличаются типами данных. Изначально без необязательного параметра всё работало. как добавил его, начались ошибки "no matching function for call to"
Mike
уже начинаю сомневаться правильно ли добавил не обязательный параметр: void putLogln(const String &results, int msg_level_debug=0) тут msg_level_debug не обязателен и по умолчанию равен нулю
Mike
как нет, он в самой функции используется.
Mike
точнее не завел новые функции а в существующие добавил, новые функции не создавал конечно.
Алексей
Mike
Так это и приводит к ошибке. Есть две разных функции с одинаковым вызовом. Вот компилятор и не знает, что выбрать.
как пишут про перегруженные функции, должны выбраться по совпадению параметров входных (типов параметров), потом по результату преобразования. А тут функция есть с нужными типами входных параметров, а компилятор в отказ идет.
Алексей
Вот он и пытается выбрать. Или func(string) или func(string, int=0). Вызов func("abc") подходит для этих двух функций. Или func(string("abc")), или func(string("abc"), 0)
Алексей
И ругается, что не может понять, что выбрать.
Mike
Вот он и пытается выбрать. Или func(string) или func(string, int=0). Вызов func("abc") подходит для этих двух функций. Или func(string("abc")), или func(string("abc"), 0)
неее, сейчас есть только func(string, int=0). второй параметр я во все добавил функции и он по идее не обязательный должен быть, а компилятор хочет и второй параметр чтобы передали
Алексей
А в выводе в config.h, в строке 178 пишет, что есть. Похоже где-то осталось.
Mike
А в выводе в config.h, в строке 178 пишет, что есть. Похоже где-то осталось.
там объявление этой функции extern void putLogln(const char *results, int msg_level_debug=0);
Serjio
ну так убрать этот =0 в объявлении
Avazart
Кто знает есть ли какой типа асинхронный tone() генератор для ESP32 в Arduino IDE т.е. что генерить частоты для мелодий.
Avazart
и желательно что бы не мешало другим обработчикам в loop()
Avazart
Или только ручками городить?
Mike
категорично. объясните пжлст что я не понимаю, с примерами писал, не голословно
Mike
ну так убрать этот =0 в объявлении
делал и так. в объявлении в Хидере убрила эту необязательную переменную, в самомо коде функции оставлял и опять получал ошибки при компиляции
Mike
в Хидере объявил функции без необязательной переменной extern void putLogln(const String &results); extern void putLogln(); extern void putLogln(const Printable& x); extern void putLogln(unsigned char b, int base); extern void putLogln(const char *results); extern void putLog(const String &results); в .ino в самих функциях оставил void putLogln(const String &results, int msg_level_debug = 0){ ... } void putLogln(){ String str_tmp=""; putLogln(str_tmp); //putLogln(String("")); return; } void putLogln(const Printable& x, int msg_level_debug = 0) { putLogln((x)); //putLogln((String)String(x), msg_level_debug); return; } void putLogln(unsigned char b, int base, int msg_level_debug = 0){ // !!! отбрасываем систему счисления, потом нужно переделать с конвертацией putLogln(String(b) + String("/n")); return; } void putLogln(const char *results, int msg_level_debug = 0){ putLogln((String)String(results)); return; } void putLogln(const char * results, int msg_level_debug = 0){ putLogln((String)String(results)); return; } void putLog(const String &results, int msg_level_debug = 0){ ... } получаю ошибку при компиляции C:/avrprojects/GSM_alarm_garage_esp32/src/config.ino:508:19: error: call of overloaded 'putLogln(String&)' is ambiguous putLogln(str_tmp); ^ In file included from C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:122:0: src\config.h:174:14: note: candidate: void putLogln(const String&) extern void putLogln(const String &results); ^ C:/avrprojects/GSM_alarm_garage_esp32/src/config.ino:471:6: note: candidate: void putLogln(const String&, int) void putLogln(const String &results, int msg_level_debug = 0){ ^
Mike
str_tmp объявлена как String, имхо должен был выбрать однозначно функцию void putLogln(const String &results, int msg_level_debug = 0)
Andy
в Хидере объявил функции без необязательной переменной extern void putLogln(const String &results); extern void putLogln(); extern void putLogln(const Printable& x); extern void putLogln(unsigned char b, int base); extern void putLogln(const char *results); extern void putLog(const String &results); в .ino в самих функциях оставил void putLogln(const String &results, int msg_level_debug = 0){ ... } void putLogln(){ String str_tmp=""; putLogln(str_tmp); //putLogln(String("")); return; } void putLogln(const Printable& x, int msg_level_debug = 0) { putLogln((x)); //putLogln((String)String(x), msg_level_debug); return; } void putLogln(unsigned char b, int base, int msg_level_debug = 0){ // !!! отбрасываем систему счисления, потом нужно переделать с конвертацией putLogln(String(b) + String("/n")); return; } void putLogln(const char *results, int msg_level_debug = 0){ putLogln((String)String(results)); return; } void putLogln(const char * results, int msg_level_debug = 0){ putLogln((String)String(results)); return; } void putLog(const String &results, int msg_level_debug = 0){ ... } получаю ошибку при компиляции C:/avrprojects/GSM_alarm_garage_esp32/src/config.ino:508:19: error: call of overloaded 'putLogln(String&)' is ambiguous putLogln(str_tmp); ^ In file included from C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:122:0: src\config.h:174:14: note: candidate: void putLogln(const String&) extern void putLogln(const String &results); ^ C:/avrprojects/GSM_alarm_garage_esp32/src/config.ino:471:6: note: candidate: void putLogln(const String&, int) void putLogln(const String &results, int msg_level_debug = 0){ ^
Mike
это разные функции, имена разные
Serjio
так и в коде убрать
Avazart
Ок, спасибо.
Mike Fpv
Подскажите мощную библиотеку captive portal на esp32
Mike Fpv
Autoconnect даже встроенные примеры зависают
kDn
в Хидере объявил функции без необязательной переменной extern void putLogln(const String &results); extern void putLogln(); extern void putLogln(const Printable& x); extern void putLogln(unsigned char b, int base); extern void putLogln(const char *results); extern void putLog(const String &results); в .ino в самих функциях оставил void putLogln(const String &results, int msg_level_debug = 0){ ... } void putLogln(){ String str_tmp=""; putLogln(str_tmp); //putLogln(String("")); return; } void putLogln(const Printable& x, int msg_level_debug = 0) { putLogln((x)); //putLogln((String)String(x), msg_level_debug); return; } void putLogln(unsigned char b, int base, int msg_level_debug = 0){ // !!! отбрасываем систему счисления, потом нужно переделать с конвертацией putLogln(String(b) + String("/n")); return; } void putLogln(const char *results, int msg_level_debug = 0){ putLogln((String)String(results)); return; } void putLogln(const char * results, int msg_level_debug = 0){ putLogln((String)String(results)); return; } void putLog(const String &results, int msg_level_debug = 0){ ... } получаю ошибку при компиляции C:/avrprojects/GSM_alarm_garage_esp32/src/config.ino:508:19: error: call of overloaded 'putLogln(String&)' is ambiguous putLogln(str_tmp); ^ In file included from C:/avrprojects/GSM_alarm_garage_esp32/src/gsm_alarm_garage_esp32.ino:122:0: src\config.h:174:14: note: candidate: void putLogln(const String&) extern void putLogln(const String &results); ^ C:/avrprojects/GSM_alarm_garage_esp32/src/config.ino:471:6: note: candidate: void putLogln(const String&, int) void putLogln(const String &results, int msg_level_debug = 0){ ^
Дефолтные параметры должны быть справа и только в декларации. В реализации параметры должны быть, но без дефолта. Нужны примеры - смотрите у нас в фреймворке, там много перегрузок. Можно ещё темплейты при желании использовать.
Dr Zlo
usb-uart и встроенный в чип usb
Denisio
о вот анонсировали оказывается https://www.businesswire.com/news/home/20220126006104/en/Altium-and-MacroFab-Partner-to-Launch-Industry-First-Integrated-PCB-%E2%80%9CDesign-WITH-Manufacturing%E2%80%9D-Application
Dmitriy
Шоб был
Denisio
есть оборудование которое умеет только 232
Dr Zlo
Он работает быстрее
Dr Zlo
По крайней мере для прошивки
Dr Zlo
Плюс я не нашел возможности ребутнуть чип через встроенный usb
Dr Zlo
Да
Dr Zlo
Это не удивительно
Dr Zlo
Ровно по той же причине какая-нибудь эмуляция процессора требует большей мощности чем имеет оригинальный процессор
Dr Zlo
Процессору приходится как минимум перекладывать байтики из одного места в другое (например в память, или в очередь uart), и это просто физически не может быть быстрее тактовой частоты процессора
Dr Zlo
А оверхед пакета? А аквайринг шины?
Dr Zlo
Просто возьмите чип и проверьте
Dr Zlo
Сча проверю. 1 500 000 точно быстрее.
Dr Zlo
1500000 бод usb-uart: Wrote 861792 bytes (534548 compressed) at 0x00010000 in 10.3 seconds (effective 670.7 kbit/s) usb: Wrote 861792 bytes (534548 compressed) at 0x00010000 in 34.7 seconds (effective 198.6 kbit/s)