• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Прием данных по UART

Br.Misha

New member
Надо сделать прием данных по UART. Открыл sdout.c, там уже, вроде как всё готово:
Код:
LOCAL void
uart0_rx_intr_handler(void *para)
{
    uint8 uart_no = UART0;

    if (UART_RXFIFO_FULL_INT_ST == (READ_PERI_REG(UART_INT_ST(uart_no)) & UART_RXFIFO_FULL_INT_ST))
    {
        WRITE_PERI_REG(UART_INT_CLR(uart_no), UART_RXFIFO_FULL_INT_CLR);
    }
}

void ICACHE_FLASH_ATTR stdoutInit() {

    /* rcv_buff size if 0x100 */
    ETS_UART_INTR_ATTACH(uart0_rx_intr_handler,  &(UartDev.rcv_buff));

    //Enable TxD pin
    PIN_PULLUP_DIS(PERIPHS_IO_MUX_U0TXD_U);
    PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_U0TXD);

    //Set baud rate and other serial parameters to 115200,n,8,1
    uart_div_modify(0, UART_CLK_FREQ/BIT_RATE_115200);
    WRITE_PERI_REG(UART_CONF0(0), (STICK_PARITY_DIS)|(ONE_STOP_BIT << UART_STOP_BIT_NUM_S)| \
            (EIGHT_BITS << UART_BIT_NUM_S));

    //Reset tx & rx fifo
    SET_PERI_REG_MASK(UART_CONF0(0), UART_RXFIFO_RST|UART_TXFIFO_RST);
    CLEAR_PERI_REG_MASK(UART_CONF0(0), UART_RXFIFO_RST|UART_TXFIFO_RST);

    //set rx fifo trigger
    WRITE_PERI_REG(UART_CONF1(0),
            ((0x01 & UART_RXFIFO_FULL_THRHD) << UART_RXFIFO_FULL_THRHD_S) |
            ((0x01 & UART_RX_FLOW_THRHD) << UART_RX_FLOW_THRHD_S) |
            UART_RX_FLOW_EN);

    //Install our own putchar handler
    os_install_putc1((void *)stdoutPutchar);

    //clear all interrupt
    WRITE_PERI_REG(UART_INT_CLR(0), 0xffff);

    //enable rx_interrupt
    SET_PERI_REG_MASK(UART_INT_ENA(0), UART_RXFIFO_FULL_INT_ENA);

    ETS_UART_INTR_ENABLE();
}
Затем я внутри uart0_rx_intr_handler сделал инкремент определенной переменной. Передаю с терминала данные на rx модуля - переменная не инкрементируется и esp виснет, черед несколько сек происходит перезагрузка.
Подскажите, пожалуйста, как организовать прием данных по юарту?
PS: так же включен второй юарт, по нем данные только передаются.
Спасибо!
 

de1m

New member
Вот так у меня работает.
Инициализация (uart0 и uart1)
Код:
uart_init(BIT_RATE_9600,BIT_RATE_9600);
Передача данных на uart0:
Код:
uart0_tx_buffer(cmd, sizeof(cmd));
Приём:
Сперва нужно приделать прерывание:
Код:
    system_os_task(loop, user_procTaskPrio,user_procTaskQueue, user_procTaskQueueLen);
    system_os_post(user_procTaskPrio, 0, 0 );
Потом так (по одному знаку), по другому я тоже не знаю
Код:
static void ICACHE_FLASH_ATTR loop(os_event_t *events) {

  int c = uart0_rx_one_char();
}
Так я делаю на uart1 (GPIO02)
Код:
os_printf("Test");
 
Попробовал прикрутить код , ругается на это: " uart0_rx_one_char();"
uart.h подключен . Но в нем я не нашел функции uart0_rx_one_char();
какой файл надо подключить чтобы заработал код?
 

de1m

New member
Да, это и правда оказалась не стандартная функция.
Вот она

Код:
int ICACHE_FLASH_ATTR uart0_rx_one_char() {
  if(UartDev.rcv_buff.pReadPos == UartDev.rcv_buff.pWritePos) return -1;
  int ret = *UartDev.rcv_buff.pReadPos;
  UartDev.rcv_buff.pReadPos++;
  if(UartDev.rcv_buff.pReadPos == (UartDev.rcv_buff.pRcvMsgBuff + RX_BUFF_SIZE)) {
    UartDev.rcv_buff.pReadPos = UartDev.rcv_buff.pRcvMsgBuff;
  }

  return ret;
}
Вопрос к знаю знающим, как правильно сделать приём данных стандартными средствами?
 
Я уже решил задачу , я расковырял uart.c дописал немного его и теперь получаю строку.
 

slavikb

New member
Надо сделать прием данных по UART. Открыл sdout.c, там уже, вроде как всё готово:
Код:
LOCAL void
uart0_rx_intr_handler(void *para)
Все функции, которые могут вызываться в обработчиках прерываний, должны кэшироваться в оперативной памяти, для этого их нужно помечать атрибутом ICACHE_RAM_ATTR:
Код:
void ICACHE_RAM_ATTR uart0_rx_intr_handler(void *para)
 
Последнее редактирование:

slavikb

New member
Вот пример рабочего кода

Код:
#include "esp8266_peri.h"
#include "uart_register.h"


// Инициализация:
void init_uart()
{
  Serial.begin(2400);
  // Установка порога - прерывание по приёму 1 байта
 const uint32 conf1 = (1 << UART_RXFIFO_FULL_THRHD_S);
  WRITE_PERI_REG(UART_CONF1(UART0), conf1);
  //  Регистрация обработчика прерывания
  ETS_UART_INTR_ATTACH(uart_int_handler, 0);
  // Установка маски на прерывания от UART0 по приёму данных
  WRITE_PERI_REG(UART_INT_ENA(UART0), UART_RXFIFO_FULL_INT_ENA);
  // Разрешение прерываний от UART
  ETS_UART_INTR_ENABLE();
}

// Обработчик прерываний

void ICACHE_RAM_ATTR uart_int_handler(void *va)
{
  for (;;)
  {
    const uint32 uartIntStatus = READ_PERI_REG(UART_INT_ST(UART0));
    if (uartIntStatus == 0)
      break;

    if (CHECK_INT_STATUS(uartIntStatus, UART_RXFIFO_FULL_INT_ST))
    {
      // обработка прерывания по приёму данных
      const uint32 fifoLen = (READ_PERI_REG(UART_STATUS(UART0)) >> UART_RXFIFO_CNT_S) & UART_RXFIFO_CNT;
      for (uint32 i = 0; i < fifoLen; ++i)
      {
        const uint8 ch = READ_PERI_REG(UART_FIFO(UART0));
        ProcessReceive(ch);
      }
      // очистка прерывания
      WRITE_PERI_REG(UART_INT_CLR(UART0), UART_RXFIFO_FULL_INT_CLR);
    }
  }
}

// Функция ProcessReceive делает полезную работу.
// Все функции, используемые в обработчиках прерываний должны иметь атрибут ICACHE_RAM_ATTR

void ICACHE_RAM_ATTR ProcessReceive(uint8 ch)
{
}
 
Да, это и правда оказалась не стандартная функция.
Вот она

Код:
int ICACHE_FLASH_ATTR uart0_rx_one_char() {
  if(UartDev.rcv_buff.pReadPos == UartDev.rcv_buff.pWritePos) return -1;
  int ret = *UartDev.rcv_buff.pReadPos;
  UartDev.rcv_buff.pReadPos++;
  if(UartDev.rcv_buff.pReadPos == (UartDev.rcv_buff.pRcvMsgBuff + RX_BUFF_SIZE)) {
    UartDev.rcv_buff.pReadPos = UartDev.rcv_buff.pRcvMsgBuff;
  }

  return ret;
}
Вопрос к знаю знающим, как правильно сделать приём данных стандартными средствами?
а что вы дописали и куда? вот ту функцию я добавил во все uart.c которые шли у меня с SDK. и не заработало.
linux ubuntu. код правлю в атоме, компилирую make.
 
что я вообще сделал:
я взял проект из примеров blinky
убрал всё что моргает.
сделал
Код:
void ICACHE_FLASH_ATTR user_init()
void ICACHE_FLASH_ATTR user_init()
{
#include "ets_sys.h"
#include "osapi.h"
#include "gpio.h"
#include "os_type.h"
#include "user_interface.h"
#include "espconn.h"
#include "key.h"
#include "c_types.h"
#include "time.h"
#include "mem.h"
#include "uart.h"

#define user_procTaskPrio        0
#define user_procTaskQueueLen    1
os_event_t    user_procTaskQueue[user_procTaskQueueLen];
static void loop(os_event_t *events);
LOCAL os_timer_t network_timer;


static void ICACHE_FLASH_ATTR loop(os_event_t *events) {

    int c = uart0_rx_one_char();
}

void ICACHE_FLASH_ATTR user_init()
{
  // init gpio subsytem
  gpio_init();

  //uart_init
  uart_init(74400, 74400);
  os_printf("\r\n ESP8266 started!\r\n");
  wifi_set_opmode(0x00);
  os_printf("\r\n Wi-Fi off!\r\n");

  system_os_task(loop, user_procTaskPrio,user_procTaskQueue, user_procTaskQueueLen);
  system_os_post(user_procTaskPrio, 0, 0 );


}
спотыкается на int c = uart0_rx_one_char(); когда делаю make

Код:
$ make
xtensa-lx106-elf-gcc -I/d/T_projects/sechub_esp_modem -I/home/sam/esp-open-sdk/sdk/driver_lib/include/driver -I/home/sam/esp-open-sdk/sdk/include -mlongcalls -Os -ffunction-sections -fdata-sections -DICACHE_FLASH   -c -o blinky.o blinky.c
xtensa-lx106-elf-gcc -Teagle.app.v6.move2rom.ld  blinky.o  -nostdlib -Wl,--start-group -lcirom -lhal -lmain -lnet80211 -lwpa -llwip -lpp -lphy -lmgcc -lwps -lcrypto -ldriver -Wl,--end-group -Wl,-Map,Project.map -Wl,--gc-sections -o blinky
blinky.o:(.irom0.literal+0x0): undefined reference to `uart0_rx_one_char'
blinky.o: In function `loop':
blinky.c:(.irom0.text+0x6): undefined reference to `uart0_rx_one_char'
collect2: error: ld returned 1 exit status
<встроенное>: ошибка выполнения рецепта для цели «blinky»
make: *** [blinky] Ошибка 1
вот сам make


Код:
CC = xtensa-lx106-elf-gcc
#CFLAGS = -I. -mlongcalls
CFLAGS = -I/d/Teko_projects/sechub_esp_modem -I/d/Teko_projects/sechub_esp_modem/driver -I/home/sam/esp-open-sdk/sdk/driver_lib/include/driver -I/home/sam/esp-open-sdk/sdk/include -mlongcalls -Os -ffunction-sections -fdata-sections -DICACHE_FLASH

#LDLIBS = -nostdlib -Wl,--start-group -lmain -lnet80211 -lwpa -llwip -lpp -lphy -lc -Wl,--end-group -lgcc
LDLIBS = -nostdlib -Wl,--start-group -lcirom -lhal -lmain -lnet80211 -lwpa -llwip -lpp -lphy -lmgcc -lwps -lcrypto -ldriver -Wl,--end-group -Wl,-Map,Project.map -Wl,--gc-sections

#LDFLAGS = -Teagle.app.v6.ld
LDFLAGS = -Teagle.app.v6.move2rom.ld

blinky-0x00000.bin: blinky
    esptool.py elf2image $^

blinky: blinky.o

blinky.o: blinky.c

flash: blinky-0x00000.bin
    esptool.py write_flash 0 blinky-0x00000.bin 0x10000 blinky-0x10000.bin

clean:
    rm -f blinky blinky.o blinky-0x00000.bin blinky-0x10000.bin
я решил пойти другим путём - поискать тот самый uart.с и uart.h которые надо изменить. пошёл по пути /home/sam/esp-open-sdk/sdk/driver_lib/include/driver и /home/sam/esp-open-sdk/sdk/include в первом было искомое. но добавление туда

Код:
int ICACHE_FLASH_ATTR uart0_rx_one_char() {
  if(UartDev.rcv_buff.pReadPos == UartDev.rcv_buff.pWritePos) return -1;
  int ret = *UartDev.rcv_buff.pReadPos;
  UartDev.rcv_buff.pReadPos++;
  if(UartDev.rcv_buff.pReadPos == (UartDev.rcv_buff.pRcvMsgBuff + RX_BUFF_SIZE)) {
    UartDev.rcv_buff.pReadPos = UartDev.rcv_buff.pRcvMsgBuff;
  }
  return ret;
}
ничего не дало.
 
Последнее редактирование:
запустилось! вот в таком виде:
вот сам blinky.c
Код:
#include "ets_sys.h"
#include "osapi.h"
#include "gpio.h"
#include "os_type.h"
#include "user_interface.h"
#include "espconn.h"
#include "key.h"
#include "c_types.h"
#include "time.h"
#include "mem.h"
#include "uart.h"


#define UART0   0
#define UART1   1

#define user_procTaskPrio        0
#define user_procTaskQueueLen    1
os_event_t    user_procTaskQueue[user_procTaskQueueLen];
static void loop(os_event_t *events);
LOCAL os_timer_t network_timer;


static void ICACHE_FLASH_ATTR loop(os_event_t *events) {

  int c = uart0_rx_one_char();
  if(c == 0x30) {
   os_printf("1\r\n");
  }
  if(c == 0x31) {
   os_printf("2\r\n");
  }
}


void ICACHE_FLASH_ATTR user_init()
{
  // init gpio subsytem
  gpio_init();

  //uart_init
  uart_init(74400, 74400);
  os_printf("\r\n ESP8266 started!\r\n");
  wifi_set_opmode(0x00);
  os_printf("\r\n Wi-Fi off  2  !\r\n");

  system_os_task(loop, user_procTaskPrio,user_procTaskQueue, user_procTaskQueueLen);
  system_os_post(user_procTaskPrio, 0, 0 );

}

Код:
CC = xtensa-lx106-elf-gcc
#CFLAGS = -I. -mlongcalls
CFLAGS = -I/d/Teko_projects/sechub_esp_modem -I/home/sam/esp-open-sdk/sdk/driver_lib/include/driver -I/home/sam/esp-open-sdk/sdk/include -mlongcalls -Os -ffunction-sections -fdata-sections -DICACHE_FLASH

#LDLIBS = -nostdlib -Wl,--start-group -lmain -lnet80211 -lwpa -llwip -lpp -lphy -lc -Wl,--end-group -lgcc
LDLIBS = -nostdlib -Wl,--start-group -lcirom -lhal -lmain -lnet80211 -lwpa -llwip -lpp -lphy -lmgcc -lwps -lcrypto -ldriver -Wl,--end-group -Wl,-Map,Project.map -Wl,--gc-sections

#LDFLAGS = -Teagle.app.v6.ld
LDFLAGS = -Teagle.app.v6.move2rom.ld


blinky-0x00000.bin: blinky
    esptool.py elf2image $^

blinky: blinky.o
blinky: uart.o
#
blinky.o: blinky.c
blinky.o: uart.c

flash: blinky-0x00000.bin
    esptool.py write_flash 0 blinky-0x00000.bin 0x10000 blinky-0x10000.bin

clean:
    rm -f blinky blinky.o blinky-0x00000.bin blinky-0x10000.bin

uart.c и uart.h были взяты вот отсюда: esp8266 serial (UART0) tx/rx - 41J Blog
вот uart.c
Код:
/******************************************************************************
* Copyright 2013-2014 Espressif Systems (Wuxi)
*
* FileName: uart.c
*
* Description: Two UART mode configration and interrupt handler.
*              Check your hardware connection while use this mode.
*
* Modification history:
*     2014/3/12, v1.0 create this file.
*******************************************************************************/
#include "ets_sys.h"
#include "osapi.h"
#include "uart.h"

#define UART0   0
#define UART1   1

// UartDev is defined and initialized in rom code.
extern UartDevice UartDev;

LOCAL void uart0_rx_intr_handler(void *para);
#define user_procTaskPrio        0

/******************************************************************************
* FunctionName : uart_config
* Description  : Internal used function
*                UART0 used for data TX/RX, RX buffer size is 0x100, interrupt enabled
*                UART1 just used for debug output
* Parameters   : uart_no, use UART0 or UART1 defined ahead
* Returns      : NONE
*******************************************************************************/
LOCAL void ICACHE_FLASH_ATTR
uart_config(uint8 uart_no)
{
    if (uart_no == UART1) {
        PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO2_U, FUNC_U1TXD_BK);
    } else {
        /* rcv_buff size if 0x100 */
        ETS_UART_INTR_ATTACH(uart0_rx_intr_handler,  &(UartDev.rcv_buff));
        PIN_PULLUP_DIS(PERIPHS_IO_MUX_U0TXD_U);
        PIN_FUNC_SELECT(PERIPHS_IO_MUX_U0TXD_U, FUNC_U0TXD);
    }

    uart_div_modify(uart_no, UART_CLK_FREQ / (UartDev.baut_rate));

    WRITE_PERI_REG(UART_CONF0(uart_no),    UartDev.exist_parity
                   | UartDev.parity
                   | (UartDev.stop_bits << UART_STOP_BIT_NUM_S)
                   | (UartDev.data_bits << UART_BIT_NUM_S));


    //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);

    //set rx fifo trigger
    WRITE_PERI_REG(UART_CONF1(uart_no), (UartDev.rcv_buff.TrigLvl & UART_RXFIFO_FULL_THRHD) << UART_RXFIFO_FULL_THRHD_S);

    //clear all interrupt
    WRITE_PERI_REG(UART_INT_CLR(uart_no), 0xffff);
    //enable rx_interrupt
    SET_PERI_REG_MASK(UART_INT_ENA(uart_no), UART_RXFIFO_FULL_INT_ENA);
}

/******************************************************************************
* FunctionName : uart1_tx_one_char
* Description  : Internal used function
*                Use uart1 interface to transfer one char
* Parameters   : uint8 TxChar - character to tx
* Returns      : OK
*******************************************************************************/
LOCAL STATUS ICACHE_FLASH_ATTR
uart1_tx_one_char(uint8 TxChar)
{
    while (true)
    {
        uint32 fifo_cnt = READ_PERI_REG(UART_STATUS(UART1)) & (UART_TXFIFO_CNT<<UART_TXFIFO_CNT_S);
        if ((fifo_cnt >> UART_TXFIFO_CNT_S & UART_TXFIFO_CNT) < 126) {
            break;
        }
    }

    WRITE_PERI_REG(UART_FIFO(UART1) , TxChar);
    return OK;
}

/******************************************************************************
* FunctionName : uart1_write_char
* Description  : Internal used function
*                Do some special deal while tx char is '\r' or '\n'
* Parameters   : char c - character to tx
* Returns      : NONE
*******************************************************************************/
LOCAL void ICACHE_FLASH_ATTR
uart1_write_char(char c)
{
    if (c == '\n') {
        uart1_tx_one_char('\r');
        uart1_tx_one_char('\n');
    } else if (c == '\r') {
    } else {
        uart1_tx_one_char(c);
    }
}

/******************************************************************************
* FunctionName : uart0_rx_intr_handler
* Description  : Internal used function
*                UART0 interrupt handler, add self handle code inside
* Parameters   : void *para - point to ETS_UART_INTR_ATTACH's arg
* Returns      : NONE
*******************************************************************************/
LOCAL void
uart0_rx_intr_handler(void *para)
{
    /* uart0 and uart1 intr combine togther, when interrupt occur, see reg 0x3ff20020, bit2, bit0 represents
     * uart1 and uart0 respectively
     */
    RcvMsgBuff *pRxBuff = (RcvMsgBuff *)para;
    uint8 RcvChar;

    if (UART_RXFIFO_FULL_INT_ST != (READ_PERI_REG(UART_INT_ST(UART0)) & UART_RXFIFO_FULL_INT_ST)) {
        return;
    }

    WRITE_PERI_REG(UART_INT_CLR(UART0), UART_RXFIFO_FULL_INT_CLR);

    while (READ_PERI_REG(UART_STATUS(UART0)) & (UART_RXFIFO_CNT << UART_RXFIFO_CNT_S)) {
        RcvChar = READ_PERI_REG(UART_FIFO(UART0)) & 0xFF;

        /* you can add your handle code below.*/

        *(pRxBuff->pWritePos) = RcvChar;

        // insert here for get one command line from uart
        if (RcvChar == '\r') {
            pRxBuff->BuffState = WRITE_OVER;
        }

        pRxBuff->pWritePos++;

        // if we hit the end of the buffer, loop back to the beginning
        if (pRxBuff->pWritePos == (pRxBuff->pRcvMsgBuff + RX_BUFF_SIZE)) {
            // overflow ...we may need more error handle here.
            pRxBuff->pWritePos = pRxBuff->pRcvMsgBuff ;
        }
    }
   system_os_post(user_procTaskPrio, 0, 0 );
}


/******************************************************************************
* FunctionName : uart0_tx_buffer
* Description  : use uart0 to transfer buffer
* Parameters   : uint8 *buf - point to send buffer
*                uint16 len - buffer len
* Returns      :
*******************************************************************************/
// void ICACHE_FLASH_ATTR
// uart0_tx_buffer(uint8 *buf, uint16 len)
// {
//     uint16 i;
//
//     for (i = 0; i < len; i++) {
//         uart_tx_one_char(buf[i]);
//     }
// }


int ICACHE_FLASH_ATTR uart0_rx_one_char() {
  if(UartDev.rcv_buff.pReadPos == UartDev.rcv_buff.pWritePos) return -1;
  int ret = *UartDev.rcv_buff.pReadPos;
  UartDev.rcv_buff.pReadPos++;
  if(UartDev.rcv_buff.pReadPos == (UartDev.rcv_buff.pRcvMsgBuff + RX_BUFF_SIZE)) {
    UartDev.rcv_buff.pReadPos = UartDev.rcv_buff.pRcvMsgBuff;
  }

  return ret;
}


/******************************************************************************
* FunctionName : uart_init
* Description  : user interface for init uart
* Parameters   : UartBautRate uart0_br - uart0 bautrate
*                UartBautRate uart1_br - uart1 bautrate
* Returns      : NONE
*******************************************************************************/
// void ICACHE_FLASH_ATTR
// uart_init(UartBautRate uart0_br, UartBautRate uart1_br)
// {
//     // rom use 74880 baut_rate, here reinitialize
//     UartDev.baut_rate = uart0_br;
//     uart_config(UART0);
//     UartDev.baut_rate = uart1_br;
//     uart_config(UART1);
//     ETS_UART_INTR_ENABLE();
//
//     // install uart1 putc callback
//     os_install_putc1((void *)uart1_write_char);
// //    UartDev.rcv_buff.pWritePos = UartDev.rcv_buff.pRcvMsgBuff;
// //    UartDev.rcv_buff.pReadPos  = UartDev.rcv_buff.pRcvMsgBuff;
// }

всё это удовольствие компилируется. но!
не работает
static void ICACHE_FLASH_ATTR loop(os_event_t *events) {

int c = uart0_rx_one_char();
if(c == 0x30) {
os_printf("1\r\n");
}
if(c == 0x31) {
os_printf("2\r\n");
}
}
ничего не отправляет в ответ. светодиодом поморгать не могу. только уарт.
 
Ребят кто подскажет почему не принимаются и не обрабатываются байты?
я "нестандартную" функцию дописал. врое всё как в примере у esp8266 serial (UART0) tx/rx - 41J Blog
вот мой blinky.c
Код:
#include "ets_sys.h"
#include "osapi.h"
#include "gpio.h"
#include "os_type.h"
#include "user_interface.h"
#include "espconn.h"
#include "key.h"
#include "c_types.h"
#include "time.h"
#include "mem.h"
#include "uart.h"



#define user_procTaskPrio        0
#define user_procTaskQueueLen    1
os_event_t    user_procTaskQueue[user_procTaskQueueLen];
static void loop(os_event_t *events);
LOCAL os_timer_t network_timer;

static volatile os_timer_t some_timer;

// void ICACHE_RAM_ATTR uart0_rx_intr_handler(void *para)
// ICACHE_RAM_ATTR ICACHE_FLASH_ATTR
static void ICACHE_FLASH_ATTR loop(os_event_t *events)
// static void ICACHE_RAM_ATTR loop(os_event_t *events)
{
  int c = uart0_rx_one_char();
  if(c == 0x30)
  {
   uart0_tx_buffer("0123456789", 10);
  }
  if(c == 0x31)
  {
   uart0_tx_buffer("9876543210", 10);
  }
  system_os_post(user_procTaskPrio, 0, 0 );
}

void some_timerfunc(void *arg)
{
  //debag i am alive
  os_printf("On working! \r\n");
}


void ICACHE_FLASH_ATTR user_init()
{
  // init gpio subsytem
  gpio_init();

  //uart_init
  uart_init(74400, 74400);
  os_printf("\r\n ESP8266 started!\r\n");
  wifi_set_opmode(0x00);
  os_printf("\r\n Wi-Fi off!\r\n");

  // setup timer (500ms, repeating)
  os_timer_setfn(&some_timer, (os_timer_func_t *)some_timerfunc, NULL);
  os_timer_arm(&some_timer, 1000, 1);

  system_os_task(loop, user_procTaskPrio, user_procTaskQueue, user_procTaskQueueLen);
  system_os_post(user_procTaskPrio, 0, 0 );

}
что может быть не так?
 
это немного не то что мне требуется.
Это то .
В файле я дописал пару строк и создал массив . А в главном файле я этот массив обрабатываю . Если данные появились , то значит по юарт пришло что то.
Файл прикрепляю: Screenshot_2017-08-25-10-44-46-183_com.google.android.apps.docs.png
 
Сверху Снизу