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
это и делаю сейчас, но не понимаю пока что за тип такой 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
Алексей
Так нельзя. Если есть функция с доп параметром, то он нужен. Если он нужен не всегда, то функция без него не нужна (он есть по умолчанию)
Алексей
Компилятор не знает что выбрать , либо функцию без параметра, либо с параметром по умолчанию.
Mike
это я так по началу и написал код, а потом оказалось надо где-то в одном месте, либо хилер, либо ino прописывать необязательные параметры.
Алексей
Тогда сигнатуры не должны пересекаться. В одном бллке компиляции одно описание
Mike
уже начинаю сомневаться правильно ли добавил не обязательный параметр:
void putLogln(const String &results, int msg_level_debug=0)
тут msg_level_debug не обязателен и по умолчанию равен нулю
Mike
как нет, он в самой функции используется.
Mike
точнее не завел новые функции а в существующие добавил, новые функции не создавал конечно.
Алексей
Алексей
Вот он и пытается выбрать.
Или func(string) или func(string, int=0).
Вызов func("abc") подходит для этих двух функций.
Или func(string("abc")), или func(string("abc"), 0)
Алексей
И ругается, что не может понять, что выбрать.
Mike
Алексей
А в выводе в config.h, в строке 178 пишет, что есть.
Похоже где-то осталось.
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
это разные функции, имена разные
Andy
Serjio
так и в коде убрать
Slava
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){
^
Дефолтные параметры должны быть справа и только в декларации. В реализации параметры должны быть, но без дефолта. Нужны примеры - смотрите у нас в фреймворке, там много перегрузок. Можно ещё темплейты при желании использовать.
Mike
Dr Zlo
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)