avoid task queue overrun for serial input (#1540)

Thank you.
This commit is contained in:
Arnim Läuger 2016-10-18 03:56:38 +02:00 committed by Philip Gladstone
parent f9533ed85a
commit 020afdcf33
3 changed files with 18 additions and 7 deletions

View File

@ -30,6 +30,8 @@
// For event signalling
static task_handle_t sig = 0;
static uint8 *sig_flag;
static uint8 isr_flag = 0;
// UartDev is defined and initialized in rom code.
extern UartDevice UartDev;
@ -277,8 +279,12 @@ uart0_rx_intr_handler(void *para)
got_input = true;
}
if (got_input && sig)
task_post_low (sig, false);
if (got_input && sig) {
if (isr_flag == *sig_flag) {
isr_flag ^= 0x01;
task_post_low (sig, 0x8000 | isr_flag << 14 | false);
}
}
}
static void
@ -316,14 +322,15 @@ uart_stop_autobaud()
* Description : user interface for init uart
* Parameters : UartBautRate uart0_br - uart0 bautrate
* UartBautRate uart1_br - uart1 bautrate
* uint8 task_prio - task priority to signal on input
* os_signal_t sig_input - signal to post
* uint8 *flag_input - flag of consumer task
* Returns : NONE
*******************************************************************************/
void ICACHE_FLASH_ATTR
uart_init(UartBautRate uart0_br, UartBautRate uart1_br, os_signal_t sig_input)
uart_init(UartBautRate uart0_br, UartBautRate uart1_br, os_signal_t sig_input, uint8 *flag_input)
{
sig = sig_input;
sig_flag = flag_input;
// rom use 74880 baut_rate, here reinitialize
UartDev.baut_rate = uart0_br;

View File

@ -101,7 +101,7 @@ typedef struct {
int buff_uart_no; //indicate which uart use tx/rx buffer
} UartDevice;
void uart_init(UartBautRate uart0_br, UartBautRate uart1_br, os_signal_t sig_input);
void uart_init(UartBautRate uart0_br, UartBautRate uart1_br, os_signal_t sig_input, uint8 *flag_input);
void uart0_alt(uint8 on);
void uart0_sendStr(const char *str);
void uart0_putc(const char c);

View File

@ -30,6 +30,7 @@
#endif
static task_handle_t input_sig;
static uint8 input_sig_flag = 0;
/* Contents of esp_init_data_default.bin */
extern const uint32_t init_data[];
@ -100,7 +101,10 @@ static void start_lua(task_param_t param, uint8 priority) {
static void handle_input(task_param_t flag, uint8 priority) {
(void)priority;
lua_handle_input (flag);
if (flag & 0x8000) {
input_sig_flag = flag & 0x4000 ? 1 : 0;
}
lua_handle_input (flag & 0x01);
}
bool user_process_input(bool force) {
@ -231,7 +235,7 @@ void user_init(void)
UartBautRate br = BIT_RATE_DEFAULT;
input_sig = task_get_id(handle_input);
uart_init (br, br, input_sig);
uart_init (br, br, input_sig, &input_sig_flag);
#ifndef NODE_DEBUG
system_set_os_print(0);