• Система автоматизации с открытым исходным кодом на базе 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) , но он сначала о Вас ноги вытрет, а потом снизойдет с олимпа и расскажет о своих уникальных ковыряниях в чужом софте ну и за одно обгадит всех остальных .
 
Сверху Снизу