hd44780
New member
Начал писать задачи и столкнулся со странностью - из двух моих задач работает только одна.
1-й таск - приём байтов из UART:
Просто принимает байты, отсылает обратно (эхо, для контроля работоспособности) и кладёт их в кольцевой буфер (128 байт).
2-й таск. Обработка команд. Для отладки я отсюда всё убрал, оставил только отладочный вывод.
Инициализация задач:
Инициализация вызывается из user_init, uart0_sendStr работает нормально (вывод из user_init приходит).
Проблема в том, что в терминале я вижу только эхо посылаемых мной байт (1-я задача). Эхо не терминала, именно от модуля (смотрел в SerialPort Monitor). Но строки exec: я нигде не вижу
В чём я ошибся?
Полный проект приложил.
Спасибо.
1-й таск - приём байтов из UART:
Код:
[INDENT]// Задача - приём данных UART
[INDENT][INDENT]static void ICACHE_FLASH_ATTR task_uartReceive ( os_event_t *events )
{
uint8_t temp;
// add transparent determine
while ( READ_PERI_REG ( UART_STATUS(UART0) ) & (UART_RXFIFO_CNT << UART_RXFIFO_CNT_S) )
{
// temp = READ_PERI_REG(UART_FIFO(UART0)) & 0xFF;
WRITE_PERI_REG ( 0X60000914, 0x73 ); //WTD
// читаем байт из UART
temp = READ_PERI_REG ( UART_FIFO(UART0) ) & 0xFF;
// Эхо
uart0_sendByte ( temp );
// сохраняем байт в буфере
cmdBuffer [ cmdBufferWriteIdx ++ ] = temp;
// Закольцовываем
if ( cmdBufferWriteIdx == CMD_BUFFER_SIZE )
cmdBufferWriteIdx = 0;
} // while
if ( UART_RXFIFO_FULL_INT_ST == (READ_PERI_REG(UART_INT_ST(UART0)) & UART_RXFIFO_FULL_INT_ST) )
{
WRITE_PERI_REG ( UART_INT_CLR(UART0), UART_RXFIFO_FULL_INT_CLR );
} // if
else
if ( UART_RXFIFO_TOUT_INT_ST == (READ_PERI_REG(UART_INT_ST(UART0)) & UART_RXFIFO_TOUT_INT_ST) )
{
WRITE_PERI_REG ( UART_INT_CLR(UART0), UART_RXFIFO_TOUT_INT_CLR );
} // if
ETS_UART_INTR_ENABLE ( );
} // task_uartReceive[/INDENT][/INDENT][/INDENT]
2-й таск. Обработка команд. Для отладки я отсюда всё убрал, оставил только отладочный вывод.
Код:
// Выполнение команд
static void ICACHE_FLASH_ATTR task_executeCommands ( os_event_t *events )
{
uart0_sendStr ( "exec:\r\n" );
} // task_executeCommands
Код:
// Инициализация задач OS
void ICACHE_FLASH_ATTR os_tasks_init ( void )
{
// инициализация указателей буфера
cmdBufferWriteIdx = cmdBufferReadIdx = 0;
// at_recvTask - Uart receive task
system_os_task ( task_uartReceive, taskReceivePrio, taskReceiveQueue, taskReceiveQueueLen );
// at_procTask - Task of process command or txdata
system_os_task ( task_executeCommands, taskExecutePrio, taskExecuteQueue, taskExecuteQueueLen );
} // os_tasks_init
Проблема в том, что в терминале я вижу только эхо посылаемых мной байт (1-я задача). Эхо не терминала, именно от модуля (смотрел в SerialPort Monitor). Но строки exec: я нигде не вижу
В чём я ошибся?
Полный проект приложил.
Спасибо.
Вложения
-
356.8 KB Просмотры: 13
Последнее редактирование: