хочу чтобы работал макрос:В SDK на ESP8266 нет Serial.print().
А в Arduino Serial.print не печатает long long (uint64_t). Не доделана.
Также ets_printf и os_printf имеют ошибки и не работают с половиной из стандартных спецификаций переменных:
List of all format specifiers in C programming - Codeforwin
Зачем вам эти бяки? Используйте стандартный printf() из стандартной либы СИ...
А что в нем не такого?хочу чтобы работал макрос:
#ifdef DEBUG_ESP_CORE
#define DEBUGV(...) ets_printf(__VA_ARGS__)
#endif
компилятор не ругается, все хорошоА что в нем не такого?
Компилятор ругается, что не найдено описание к ets_printf ? Добавьте.
А кто кроме вас знает, может вы отключили UART выход на пин, изменив его функцию.компилятор не ругается, все хорошо
потом уже в консоль порта ничего не выводится.
А как в SDK работает Serial.begin и Serial.print ? Таких функций в SDK нет.Пишу примерно так:
Serial.begin(11200);
Serial.print("xxx"); // выводит
ets_printf("yyy"); // не выводит
У меня вопрос не в том, почему Serial. ... работает.А как в SDK работает Serial.begin и Serial.print ? Таких функций в SDK нет.
Это функции из Arduino и там UART-ы переназначены. Обращайтесь в другую тему - в Arduino IDE.
А она не работает в Arduino IDE. Вам же сказано, что она вызовет протектед если вы её запустите и дадите ей вывод строк из Flash.У меня вопрос не в том, почему Serial. ... работает.
А в том, что надо сделать чтобы ets_printf работала
причем тут Arduino IDE? Я использую VisualMicro в качестве IDE.А она не работает в Arduino IDE. Вам же сказано, что она вызовет протектед если вы её запустите и дадите ей вывод строк из Flash.
Это у него паранойя. Ненавидит pvvx Ардуину, вот и мерещится она ему повсюду. Может из окна выпрыгнуть с воплем "Ардуино идет!".причем тут Arduino IDE?
VisualMicro - это оболочка для Arduino IDE и ничего общего с SDK не имеет.причем тут Arduino IDE? Я использую VisualMicro в качестве IDE.
Именно.причем тут "вывод строк из Flash" (я так понимаю это про F("zzz")?)
Может я не корректно задал вопрос.
Хотите дальше.я хочу чтобы функции ets_printf и os_printf выводили информацию в консоль COM порта.
Переписать всё изначально.что надо сделать чтобы они работали?
Вы опять ошиблись. vMicro - это плагин для Ardunio в VS.Это у него паранойя. Ненавидит pvvx Ардуину, вот и мерещится она ему повсюду. Может из окна выпрыгнуть с воплем "Ардуино идет!".
Уважаемый pvvx, Вы в других темах давали мне дельные комментарии и решения. Нет проблемы в том что ответа на этот мой вопрос вы не знаете.Вы опять ошиблись. vMicro - это плагин для Ardunio в VS.
А тут тема про "SDK и создание собственных прошивок". Базовые SDK от Espressif не имеют поддержки C++ и Arduino.
Ответ ТС дан - использовать стандартные функции, работающие и в СИ и в C++ = printf.
Если она не работает в среде, то это значит, что среда не поддерживает стандартные функции...
Пример приведен.
Ваша злость ко всему миру плодит ложь. В моих вариантах Arduino printf работает.
Так что выражайтесь корректнее, если вам нравятся недоделанная Arduino IDE для ESP8266.
Arduino IDE в данном случае следует понимать не как среду разработки, а как набор библиотек которые изначально предполагались использовать в этой среде.причем тут Arduino IDE? Я использую VisualMicro в качестве IDE.
void HardwareSerial::begin(unsigned long baud, SerialConfig config, SerialMode mode, uint8_t tx_pin)
{
if(uart_get_debug() == _uart_nr) {
uart_set_debug(UART_NO);
}
if (_uart) {
free(_uart);
}
_uart = uart_init(_uart_nr, baud, (int) config, (int) mode, tx_pin);
_peek_char = -1;
}
void uart_set_debug(int uart_nr)
{
s_uart_debug_nr = uart_nr;
switch(s_uart_debug_nr) {
case UART0:
system_set_os_print(1);
ets_install_putc1((void *) &uart0_write_char);
break;
case UART1:
system_set_os_print(1);
ets_install_putc1((void *) &uart1_write_char);
break;
case UART_NO:
default:
system_set_os_print(0);
ets_install_putc1((void *) &uart_ignore_char);
break;
}
}
Холивар заводит =AK=, а вы этому поддаетесь.Уважаемый pvvx, Вы в других темах давали мне дельные комментарии и решения. Нет проблемы в том что ответа на этот мой вопрос вы не знаете.
но может кто-то другой знает.
В этой теме вопрос такой:
Вопрос: что надо сделать чтобы работали функции ets_printf и os_printf
не не нужны никакие другие варианты вывода в порт. В данной задаче нужны именно эти. Потому что для вывода отладочных сообщений в библиотеках ардуино для ESP используются именно эти функции. Холивар за Ардуино и против - это холивар. Каждый имеет право на свое мнение.
Я могу переписать часть библиотек, заменив в них печать на Serial.print. Но может есть решение с имеющимися функциями?
#include <iostream>
using namespace std;
void setup() {
Serial.begin();
Serial.print("\r\nSerial: Hello, world!\r\n");
printf("Printf: Hello, world!\r\n");
cout << "std: Hello, world!" << endl;
cerr << "cerr: Hello, world!" << endl;
puts("puts: Hello, world!\r\n");
}
void loop() {
delay(1000);
}
Разве Вы еще не поняли? нужны ets_printf и os_printf вот так и никак иначе.что надо сделать чтобы работали функции ets_printf и os_printf
Тогда пусть пишет сам эти функции, а не выпрашивает решение как их написать.pvvx, TC не нужен printf
Разве Вы еще не поняли? нужны ets_printf и os_printf вот так и никак иначе.
Но это не спасает ets_printf от описанных ошибок и совершенно не оптимально, т.к. строки к ней размещаются в RAM (rodata) и динамическом включении/отключении через замену процедуры вывода приводит к падению производительности. Отключать надо саму процедуру, а не её вывод.для случая UART_NO выполняется system_set_os_print "Function: Turn on/off print logFunction" с параметром 0 "0x00 : print function off"
и как ни странно перенаправление вывода ets_install_putc1 в фейковую uart_ignore_char