Switch Lua input to event driven instead of polled.
The Lua input timer has been the thorn in the side which prevents a lot of potential sleeping, unnecessarily.
This commit is contained in:
parent
67a711931a
commit
fe6289a6c2
|
@ -13,6 +13,7 @@
|
|||
#include "osapi.h"
|
||||
#include "driver/uart.h"
|
||||
#include "user_config.h"
|
||||
#include "user_interface.h"
|
||||
|
||||
#define UART0 0
|
||||
#define UART1 1
|
||||
|
@ -21,6 +22,10 @@
|
|||
#define FUNC_U0RXD 0
|
||||
#endif
|
||||
|
||||
// For event signalling
|
||||
static uint8 task = USER_TASK_PRIO_MAX;
|
||||
static os_signal_t sig;
|
||||
|
||||
// UartDev is defined and initialized in rom code.
|
||||
extern UartDevice UartDev;
|
||||
|
||||
|
@ -187,6 +192,7 @@ uart0_rx_intr_handler(void *para)
|
|||
*/
|
||||
RcvMsgBuff *pRxBuff = (RcvMsgBuff *)para;
|
||||
uint8 RcvChar;
|
||||
bool got_input = false;
|
||||
|
||||
if (UART_RXFIFO_FULL_INT_ST != (READ_PERI_REG(UART_INT_ST(UART0)) & UART_RXFIFO_FULL_INT_ST)) {
|
||||
return;
|
||||
|
@ -220,7 +226,12 @@ uart0_rx_intr_handler(void *para)
|
|||
pRxBuff->pReadPos++;
|
||||
}
|
||||
}
|
||||
|
||||
got_input = true;
|
||||
}
|
||||
|
||||
if (got_input && task != USER_TASK_PRIO_MAX)
|
||||
system_os_post (task, sig, UART0);
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
|
@ -228,11 +239,16 @@ uart0_rx_intr_handler(void *para)
|
|||
* 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
|
||||
* Returns : NONE
|
||||
*******************************************************************************/
|
||||
void ICACHE_FLASH_ATTR
|
||||
uart_init(UartBautRate uart0_br, UartBautRate uart1_br)
|
||||
uart_init(UartBautRate uart0_br, UartBautRate uart1_br, uint8 task_prio, os_signal_t sig_input)
|
||||
{
|
||||
task = task_prio;
|
||||
sig = sig_input;
|
||||
|
||||
// rom use 74880 baut_rate, here reinitialize
|
||||
UartDev.baut_rate = uart0_br;
|
||||
uart_config(UART0);
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include "uart_register.h"
|
||||
#include "eagle_soc.h"
|
||||
#include "c_types.h"
|
||||
#include "os_type.h"
|
||||
|
||||
#define RX_BUFF_SIZE 0x100
|
||||
#define TX_BUFF_SIZE 100
|
||||
|
@ -100,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);
|
||||
void uart_init(UartBautRate uart0_br, UartBautRate uart1_br, uint8 task_prio, os_signal_t sig_input);
|
||||
void uart0_sendStr(const char *str);
|
||||
void uart0_putc(const char c);
|
||||
void uart0_tx_buffer(uint8 *buf, uint16 len);
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
#include "os_type.h"
|
||||
|
||||
os_timer_t lua_timer;
|
||||
LOCAL os_timer_t readline_timer;
|
||||
|
||||
lua_State *globalL = NULL;
|
||||
|
||||
|
@ -477,15 +476,15 @@ int lua_main (int argc, char **argv) {
|
|||
return (status || s.status) ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
void lua_handle_input (void)
|
||||
{
|
||||
readline (&gLoad);
|
||||
}
|
||||
|
||||
void donejob(lua_Load *load){
|
||||
lua_close(load->L);
|
||||
}
|
||||
|
||||
#if 0
|
||||
int log_fd = -1;
|
||||
int noparse = 0;
|
||||
#endif
|
||||
|
||||
void dojob(lua_Load *load){
|
||||
size_t l, rs;
|
||||
int status;
|
||||
|
@ -542,9 +541,6 @@ void dojob(lua_Load *load){
|
|||
load->done = 0;
|
||||
load->line_position = 0;
|
||||
c_memset(load->line, 0, load->len);
|
||||
os_timer_disarm(&readline_timer);
|
||||
os_timer_setfn(&readline_timer, (os_timer_func_t *)readline, load);
|
||||
os_timer_arm(&readline_timer, READLINE_INTERVAL, 0); // no repeat
|
||||
c_puts(load->prmt);
|
||||
// NODE_DBG("dojob() is called with firstline.\n");
|
||||
}
|
||||
|
@ -648,9 +644,6 @@ void readline(lua_Load *load){
|
|||
{
|
||||
/* Get a empty line, then go to get a new line */
|
||||
c_puts(load->prmt);
|
||||
os_timer_disarm(&readline_timer);
|
||||
os_timer_setfn(&readline_timer, (os_timer_func_t *)readline, load);
|
||||
os_timer_arm(&readline_timer, READLINE_INTERVAL, 0); // no repeat
|
||||
} else {
|
||||
load->done = 1;
|
||||
os_timer_disarm(&lua_timer);
|
||||
|
@ -697,8 +690,4 @@ void readline(lua_Load *load){
|
|||
uart_on_data_cb(load->line, load->line_position);
|
||||
load->line_position = 0;
|
||||
}
|
||||
// if there is no input from user, repeat readline()
|
||||
os_timer_disarm(&readline_timer);
|
||||
os_timer_setfn(&readline_timer, (os_timer_func_t *)readline, load);
|
||||
os_timer_arm(&readline_timer, READLINE_INTERVAL, 0); // no repeat
|
||||
}
|
||||
|
|
|
@ -382,6 +382,8 @@ typedef struct __lua_load{
|
|||
|
||||
int lua_main( int argc, char **argv );
|
||||
|
||||
void lua_handle_input (void);
|
||||
|
||||
/******************************************************************************
|
||||
* Copyright (C) 1994-2008 Lua.org, PUC-Rio. All rights reserved.
|
||||
*
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#endif
|
||||
|
||||
#define SIG_LUA 0
|
||||
#define SIG_UARTINPUT 1
|
||||
#define TASK_QUEUE_LEN 4
|
||||
os_event_t *taskQueue;
|
||||
|
||||
|
@ -58,6 +59,9 @@ void task_lua(os_event_t *e){
|
|||
NODE_DBG("SIG_LUA received.\n");
|
||||
lua_main( 2, lua_argv );
|
||||
break;
|
||||
case SIG_UARTINPUT:
|
||||
lua_handle_input ();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -158,12 +162,13 @@ void user_init(void)
|
|||
// os_printf("Heap size::%d.\n",system_get_free_heap_size());
|
||||
// os_delay_us(50*1000); // delay 50ms before init uart
|
||||
|
||||
UartBautRate br =
|
||||
#ifdef DEVELOP_VERSION
|
||||
uart_init(BIT_RATE_74880, BIT_RATE_74880);
|
||||
BIT_RATE_74880;
|
||||
#else
|
||||
uart_init(BIT_RATE_9600, BIT_RATE_9600);
|
||||
BIT_RATE_9600;
|
||||
#endif
|
||||
// uart_init(BIT_RATE_115200, BIT_RATE_115200);
|
||||
uart_init (br, br, USER_TASK_PRIO_0, SIG_UARTINPUT);
|
||||
|
||||
#ifndef NODE_DEBUG
|
||||
system_set_os_print(0);
|
||||
|
|
|
@ -78,6 +78,33 @@ SECTIONS
|
|||
*(.literal.* .text.*)
|
||||
*(.rodata*)
|
||||
*(.sdk.version)
|
||||
|
||||
/* These are *only* pulled in by Lua, and therefore safe to put in flash */
|
||||
*/libc.a:lib_a-isalnum.o(.text* .literal*)
|
||||
*/libc.a:lib_a-isalpha.o(.text* .literal*)
|
||||
*/libc.a:lib_a-iscntrl.o(.text* .literal*)
|
||||
*/libc.a:lib_a-isspace.o(.text* .literal*)
|
||||
*/libc.a:lib_a-islower.o(.text* .literal*)
|
||||
*/libc.a:lib_a-isupper.o(.text* .literal*)
|
||||
*/libc.a:lib_a-ispunct.o(.text* .literal*)
|
||||
*/libc.a:lib_a-isxdigit.o(.text* .literal*)
|
||||
*/libc.a:lib_a-locale.o(.text* .literal*)
|
||||
*/libc.a:lib_a-tolower.o(.text* .literal*)
|
||||
*/libc.a:lib_a-toupper.o(.text* .literal*)
|
||||
*/libc.a:lib_a-strcasecmp.o(.text* .literal*)
|
||||
*/libc.a:lib_a-strcoll.o(.text* .literal*)
|
||||
*/libc.a:lib_a-strchr.o(.text* .literal*)
|
||||
*/libc.a:lib_a-strrchr.o(.text* .literal*)
|
||||
*/libc.a:lib_a-strcat.o(.text* .literal*)
|
||||
*/libc.a:lib_a-strncat.o(.text* .literal*)
|
||||
*/libc.a:lib_a-strcspn.o(.text* .literal*)
|
||||
*/libc.a:lib_a-strtol.o(.text* .literal*)
|
||||
*/libc.a:lib_a-strtoul.o(.text* .literal*)
|
||||
*/libc.a:lib_a-strpbrk.o(.text* .literal*)
|
||||
*/libc.a:lib_a-memchr.o(.text* .literal*)
|
||||
*/libc.a:lib_a-setjmp.o(.text* .literal*)
|
||||
/* end Lua C lib functions */
|
||||
|
||||
_irom0_text_end = ABSOLUTE(.);
|
||||
_flash_used_end = ABSOLUTE(.);
|
||||
} >irom0_0_seg :irom0_0_phdr
|
||||
|
|
Loading…
Reference in New Issue