Пришло время и мне задать нубский вопрос, и пусть те, кто уже прошел по граблям, похахают надо мной, но все же, желательно, помогут.
Итак, пытаюсь въехать в код. Если конкретно, то код из Sming. Хотя вроде это не имеет значения. SDK v 1.0.0
Ковыряю функцию:
Пытаюсь найти ее вызов, мне eclipse вроде бы показывает: class HardwareSerial который тут:
C:\Sming\Sming\SmingCore\HardwareSerial.h
(чтобы скопировать путь, пришлось открыть его в Notepad++ там так удобно, правой кнопкой по закладке и там все есть, в эклипсе такое не нашел)
Ок, значит реализация там же рядом в HardwareSerial.cpp Хорошо, нашли:
Но дальше-то затык... Что такое os_install_putc1?
Эклипс мне уже не смог ответить на этот вопрос (может я не так чего нажимаю?)...
Хорошо, воспользуемся поиском по файлам в Notepad++.
Ага, нашли единственное место:
C:\Espressif\ESP8266_SDK\include\osapi.h
Круто... Теперь ищем ets_install_putc1 и находим его вот тут:
C:\Sming\Sming\system\include\esp_systemapi.h
И еще вот тут:
C:\Espressif\ESP8266_SDK\ld\eagle.rom.addr.v6.ld
Могу ошибаться, но из этого я делаю вывод, что это некая функция, которая скрывается где-то в закомпиленных уже либах и исходников к ней нет.
Чтож, но вопрос не в этом, вопрос в том: как понять дальше, что эта хреновина делает?
Попытки найти в pdf'ках от Espressif описание этих функций - ничего не дают.
Не, я понимаю, что дальше умные люди вооружаются дизассемблерами, либо еще чем-то и...
Но мой вопрос стоит именно так: простые смертные могут где-то найти информацию, хотя бы общую, что делает и/или как работает та или иная функция, которая не описана в доках от Espressif?
То есть может где-то собран этот кладезь знаний уже? Может я не туда куда-то смотрю?
Пните меня в нужном направлении, и я как ежик, с удовольствием туда полечу! Спасибо!![Smile :) :)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
PS: и да, мне не нужно объяснять конкретно эту вот строчку:
os_install_putc1(enabled ? (void *)uart_tx_one_char : NULL);
Я логикой ее понимаю, что-то вроде: прописываем куда-то в системе указатель на колбек-функцию, которую система будет вызывать каждый раз, когда захочет вывести 1 символ дебажной информации, а в этой функции мы уже этот символ выводим туда, куда нам надо, например, в UART0. Либо прописываем NULL, и тогда система не вызывает никокой функции и дебаг не выводится.
Но мне, например, не понятно, почему эта функция называется os_install_putc1/ets_install_putc1, то есть не может ли быть так, что она не только дебажную информацию выводит, но и что-то еще?
Почему не os_install_debug_putc какой-нибудь?// В общем, беда-беда, огорчение![Smile :) :)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
Сейчас подумалось еще, что эта функция выставляет коллбек для другой функции, типа ets_putc.
Которая в свою очередь и вызывается для вывода каждого символа. Но как это все именно с дебагом связано, то есть именно с отладочной информацией?
Итак, пытаюсь въехать в код. Если конкретно, то код из Sming. Хотя вроде это не имеет значения. SDK v 1.0.0
Ковыряю функцию:
Код:
Serial.systemDebugOutput();
C:\Sming\Sming\SmingCore\HardwareSerial.h
(чтобы скопировать путь, пришлось открыть его в Notepad++ там так удобно, правой кнопкой по закладке и там все есть, в эклипсе такое не нашел)
Ок, значит реализация там же рядом в HardwareSerial.cpp Хорошо, нашли:
Код:
void HardwareSerial::systemDebugOutput(bool enabled)
{
if (uart == UART_ID_0)
os_install_putc1(enabled ? (void *)uart_tx_one_char : NULL);
//else
// os_install_putc1(enabled ? (void *)uart1_tx_one_char : NULL); //TODO: Debug serial
}
Эклипс мне уже не смог ответить на этот вопрос (может я не так чего нажимаю?)...
Хорошо, воспользуемся поиском по файлам в Notepad++.
Ага, нашли единственное место:
C:\Espressif\ESP8266_SDK\include\osapi.h
Код:
#define os_install_putc1 ets_install_putc1
C:\Sming\Sming\system\include\esp_systemapi.h
Код:
extern void ets_install_putc1(void *routine);
C:\Espressif\ESP8266_SDK\ld\eagle.rom.addr.v6.ld
Код:
PROVIDE ( ets_install_putc1 = 0x4000242c );
Чтож, но вопрос не в этом, вопрос в том: как понять дальше, что эта хреновина делает?
Попытки найти в pdf'ках от Espressif описание этих функций - ничего не дают.
Не, я понимаю, что дальше умные люди вооружаются дизассемблерами, либо еще чем-то и...
Но мой вопрос стоит именно так: простые смертные могут где-то найти информацию, хотя бы общую, что делает и/или как работает та или иная функция, которая не описана в доках от Espressif?
То есть может где-то собран этот кладезь знаний уже? Может я не туда куда-то смотрю?
Пните меня в нужном направлении, и я как ежик, с удовольствием туда полечу! Спасибо!
PS: и да, мне не нужно объяснять конкретно эту вот строчку:
os_install_putc1(enabled ? (void *)uart_tx_one_char : NULL);
Я логикой ее понимаю, что-то вроде: прописываем куда-то в системе указатель на колбек-функцию, которую система будет вызывать каждый раз, когда захочет вывести 1 символ дебажной информации, а в этой функции мы уже этот символ выводим туда, куда нам надо, например, в UART0. Либо прописываем NULL, и тогда система не вызывает никокой функции и дебаг не выводится.
Но мне, например, не понятно, почему эта функция называется os_install_putc1/ets_install_putc1, то есть не может ли быть так, что она не только дебажную информацию выводит, но и что-то еще?
Почему не os_install_debug_putc какой-нибудь?// В общем, беда-беда, огорчение
Сейчас подумалось еще, что эта функция выставляет коллбек для другой функции, типа ets_putc.
Которая в свою очередь и вызывается для вывода каждого символа. Но как это все именно с дебагом связано, то есть именно с отладочной информацией?