• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Помогите понять uart.c

van_de_luxe

New member
После запуска hello_world и gpio16 начал свой проект. Появились вопросы, связанные с самим принципом разработки для ESP. Попробую задать их на примере разборки исходников uart.c из drivers.
Код:
// UartDev is defined and initialized in rom code.
extern UartDevice UartDev;
Не понятен комментарий. Где все-таки объявляется и создается эта переменная? поиском по проекту не нашел, в доках тоже.
Также непонятно где эта структура инициализируется, т.к. в функции настройки UART из этой структуры данные уже вычитываются, а как они туда попадают - не понятно.
В функции конфигурации UART есть такая строчка
Код:
ETS_UART_INTR_ATTACH(Uart0_IRQHandler,  &(UartDev.rcv_buff));
Не понятно где задается сам массив Rx буфера и где задается его размер.
Код:
#define RX_BUFF_SIZE    0x100  
#define TX_BUFF_SIZE    100
В проекте есть такие defin'ы и комментарии о размере rx буфера, но не видно, чтобы они действительно влияли на размер, скорее добавлены как максимальное значение для цикл. обработки.
Код:
PIN_PULLUP_DIS(PERIPHS_IO_MUX_U0TXD_U);
        PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_U0TXD);
Для UART0 конфигурируется только Tx pin. Почему для Rx пина не выполняется аналогичных действий? (UART фулл дуплекс)
Еще не понятно откуда взялись описания структур
Код:
typedef struct {
    uint32 RcvBuffSize;
    uint8 *pRcvMsgBuff;
    uint8 *pWritePos;
    uint8 *pReadPos;
    uint8 TrigLvl; //JLU: may need to pad
    RcvMsgBuffState BuffState;
}RcvMsgBuff;

typedef struct {
    UartBaudRate        baud_rate;
    UartBitsNum4Char    data_bits;
    UartExistParity        exist_parity;
    UartParityMode        parity;    // chip size in byte
    UartStopBitsNum        stop_bits;
    UartFlowCtrl        flow_ctrl;
    RcvMsgBuff            rcv_buff;
    TrxMsgBuff            trx_buff;
    RcvMsgState            rcv_state;
    int                    received;
    int                    buff_uart_no;  //indicate which uart use tx/rx buffer
}UartDevice;
В доках не описаны, только из примеров можно об этом догадаться?
Не нашел описания как включать прерывания, и вообще как ими правильно пользоваться. Опять же только в примере нашел.
Код:
//clear rx and tx fifo,not ready
    SET_PERI_REG_MASK(UART_CONF0(uart_no), UART_RXFIFO_RST | UART_TXFIFO_RST);
    CLEAR_PERI_REG_MASK(UART_CONF0(uart_no), UART_RXFIFO_RST | UART_TXFIFO_RST);
Почему коммент "not ready"? где описано что нужно именно установить-сбросить биты для сброса, а не просто установить? (например в stm для сброса флага просто пишем в регистр значение и все)
Код:
//set rx fifo trigger
    WRITE_PERI_REG(UART_CONF1(uart_no), (UartDev.rcv_buff.TrigLvl & UART_RXFIFO_FULL_THRHD) << UART_RXFIFO_FULL_THRHD_S);
Что произойдет при срабатывании этого триггера и какое значение находится в UartDev.rcv_buff.TrigLvl?
некоторые функции и файлы начинаются с префиксов "eagle" и "ets" откуда они взялись? ets похоже на какую-то аббревиатуру....

У меня модуль ESP-12E, если посмотреть на схему, то именование выводов намекает на существование не только UART0,1, но еще и UART2. В исходниках о нем ничего нет. Ошибка в схеме или исходники неполные?

еще не понятно где находится основной цикл аля while(1){ } или этот модуль работает только по событиям?
 
Последнее редактирование:

pvvx

Активный участник сообщества
Код:
// UartDev is defined and initialized in rom code.
extern UartDevice UartDev;
Не понятен комментарий. Где все-таки объявляется и создается эта переменная? поиском по проекту не нашел
В проeкте, в файлах линкеру: agle.app.v6.ld + eagle.rom.addr.v6.ld. В комментарии написано, что создается в ROM, как и всё остальное, что вам не понятно.
ESP8266 имеет закрытый SDK и описание на сам SoC. Никаких open-source и сравнение с STM некорректно.
Заключайте договор с Espressif (NDA) и, возможно, они вам вышлют документацию и/или доп. информацию.
Другой имеющийся метод подразумевает "обратный реверс" (дизассемблирование) кодов ROM и SDK для получения информации... Только в таком случае вы сможете обмениваться информацией открыто.
Максимум открытой информации, что была опубликована, набрана и выдернута путем "реверса" по ESP8266 за 3 года находиться у меня в голове :) Другие не публикуют и не описывают это на открытые форумы. Но я уже завязал с ESP8266, т.к. он имеет очень глючный закрытый SDK код и исправить все ошибки Espressif в нем одному не в состоянии... Проще взять другой SoC.
 
Последнее редактирование:

nikolz

Well-known member
После запуска hello_world и gpio16 начал свой проект. Появились вопросы, связанные с самим принципом разработки для ESP.
полагаю, что Вы читали документацию от разработчика по SDK по архитектуре модуля по режиу слип по организации сетей и т д?
Из своего опыта могу сказать, что использую исключительно документацию разработчика и англоязычные блоги и форумы.
На этом форуме один спец (pvvx) , но он сначала о Вас ноги вытрет, а потом снизойдет с олимпа и расскажет о своих уникальных ковыряниях в чужом софте ну и за одно обгадит всех остальных .
 
Сверху Снизу