mirror of
https://github.com/Leonmmcoset/cleonos.git
synced 2026-04-21 18:44:01 +00:00
增强tty运行效率
This commit is contained in:
@@ -4,6 +4,7 @@
|
|||||||
#include <clks/types.h>
|
#include <clks/types.h>
|
||||||
|
|
||||||
void clks_shell_init(void);
|
void clks_shell_init(void);
|
||||||
|
void clks_shell_pump_input(u32 max_chars);
|
||||||
void clks_shell_tick(u64 tick);
|
void clks_shell_tick(u64 tick);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
#include <clks/keyboard.h>
|
#include <clks/keyboard.h>
|
||||||
#include <clks/log.h>
|
#include <clks/log.h>
|
||||||
|
#include <clks/shell.h>
|
||||||
#include <clks/tty.h>
|
#include <clks/tty.h>
|
||||||
#include <clks/types.h>
|
#include <clks/types.h>
|
||||||
|
|
||||||
@@ -145,7 +146,9 @@ void clks_keyboard_handle_scancode(u8 scancode) {
|
|||||||
char translated = clks_keyboard_translate_scancode(code);
|
char translated = clks_keyboard_translate_scancode(code);
|
||||||
|
|
||||||
if (translated != '\0') {
|
if (translated != '\0') {
|
||||||
(void)clks_keyboard_queue_push(translated);
|
if (clks_keyboard_queue_push(translated) == CLKS_TRUE) {
|
||||||
|
clks_shell_pump_input(1U);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ void clks_kernel_main(void) {
|
|||||||
clks_log(CLKS_LOG_WARN, "SCHED", "FAILED TO ADD KELFD TASK");
|
clks_log(CLKS_LOG_WARN, "SCHED", "FAILED TO ADD KELFD TASK");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (clks_scheduler_add_kernel_task_ex("usrd", 2U, clks_task_usrd) == CLKS_FALSE) {
|
if (clks_scheduler_add_kernel_task_ex("usrd", 4U, clks_task_usrd) == CLKS_FALSE) {
|
||||||
clks_log(CLKS_LOG_WARN, "SCHED", "FAILED TO ADD USRD TASK");
|
clks_log(CLKS_LOG_WARN, "SCHED", "FAILED TO ADD USRD TASK");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@
|
|||||||
#define CLKS_SHELL_NAME_MAX 96U
|
#define CLKS_SHELL_NAME_MAX 96U
|
||||||
#define CLKS_SHELL_PATH_MAX 192U
|
#define CLKS_SHELL_PATH_MAX 192U
|
||||||
#define CLKS_SHELL_CAT_LIMIT 512U
|
#define CLKS_SHELL_CAT_LIMIT 512U
|
||||||
#define CLKS_SHELL_INPUT_BUDGET 32U
|
#define CLKS_SHELL_INPUT_BUDGET 128U
|
||||||
#define CLKS_SHELL_CLEAR_LINES 56U
|
#define CLKS_SHELL_CLEAR_LINES 56U
|
||||||
|
|
||||||
static clks_bool clks_shell_ready = CLKS_FALSE;
|
static clks_bool clks_shell_ready = CLKS_FALSE;
|
||||||
@@ -420,17 +420,15 @@ void clks_shell_init(void) {
|
|||||||
clks_log(CLKS_LOG_INFO, "SHELL", "INTERACTIVE LOOP ONLINE");
|
clks_log(CLKS_LOG_INFO, "SHELL", "INTERACTIVE LOOP ONLINE");
|
||||||
}
|
}
|
||||||
|
|
||||||
void clks_shell_tick(u64 tick) {
|
static void clks_shell_drain_input(u32 budget_limit) {
|
||||||
u32 budget = 0U;
|
u32 budget = 0U;
|
||||||
char ch;
|
char ch;
|
||||||
|
|
||||||
(void)tick;
|
if (budget_limit == 0U || clks_shell_ready == CLKS_FALSE) {
|
||||||
|
|
||||||
if (clks_shell_ready == CLKS_FALSE) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
while (budget < CLKS_SHELL_INPUT_BUDGET) {
|
while (budget < budget_limit) {
|
||||||
if (clks_keyboard_pop_char(&ch) == CLKS_FALSE) {
|
if (clks_keyboard_pop_char(&ch) == CLKS_FALSE) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -439,3 +437,12 @@ void clks_shell_tick(u64 tick) {
|
|||||||
budget++;
|
budget++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void clks_shell_pump_input(u32 max_chars) {
|
||||||
|
clks_shell_drain_input(max_chars);
|
||||||
|
}
|
||||||
|
|
||||||
|
void clks_shell_tick(u64 tick) {
|
||||||
|
(void)tick;
|
||||||
|
clks_shell_drain_input(CLKS_SHELL_INPUT_BUDGET);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user