diff --git a/bsp/qemu-vexpress-a9/.config b/bsp/qemu-vexpress-a9/.config index c54dd55aa62f2a02f39d37bb2c4d7e67090ede10..7ebab35cc1cb2a45211fe7a295f14899ca426ebb 100644 --- a/bsp/qemu-vexpress-a9/.config +++ b/bsp/qemu-vexpress-a9/.config @@ -335,6 +335,7 @@ CONFIG_RT_LWIP_USING_PING=y # CONFIG_RT_USING_UTEST is not set CONFIG_RT_USING_LWP=y CONFIG_RT_LWP_MAX_NR=30 +CONFIG_LWP_TASK_STACK_SIZE=16384 # CONFIG_RT_USING_GDBSERVER is not set CONFIG_RT_CH_MSG_MAX_NR=1024 CONFIG_RT_LWP_SHM_MAX_NR=64 @@ -464,6 +465,7 @@ CONFIG_LWP_TID_MAX_NR=64 # CONFIG_PKG_USING_QRCODE is not set # CONFIG_PKG_USING_ULOG_EASYFLASH is not set # CONFIG_PKG_USING_ULOG_FILE is not set +# CONFIG_PKG_USING_LOGMGR is not set # CONFIG_PKG_USING_ADBD is not set # CONFIG_PKG_USING_COREMARK is not set # CONFIG_PKG_USING_DHRYSTONE is not set @@ -480,6 +482,8 @@ CONFIG_LWP_TID_MAX_NR=64 # CONFIG_PKG_USING_GBK2UTF8 is not set # CONFIG_PKG_USING_VCONSOLE is not set # CONFIG_PKG_USING_KDB is not set +# CONFIG_PKG_USING_WAMR is not set +# CONFIG_PKG_USING_MICRO_XRCE_DDS_CLIENT is not set # # system packages @@ -519,7 +523,12 @@ CONFIG_LWP_TID_MAX_NR=64 # CONFIG_PKG_USING_UC_MODBUS is not set # CONFIG_PKG_USING_PPOOL is not set # CONFIG_PKG_USING_OPENAMP is not set -# CONFIG_PKG_USING_RT_PRINTF is not set +# CONFIG_PKG_USING_RT_KPRINTF_THREADSAFE is not set +# CONFIG_PKG_USING_RT_MEMCPY_CM is not set +# CONFIG_PKG_USING_QFPLIB_M0_FULL is not set +# CONFIG_PKG_USING_QFPLIB_M0_TINY is not set +# CONFIG_PKG_USING_QFPLIB_M3 is not set +# CONFIG_PKG_USING_LPM is not set # # peripheral libraries and drivers @@ -631,6 +640,53 @@ CONFIG_LWP_TID_MAX_NR=64 # CONFIG_PKG_USING_TETRIS is not set # CONFIG_PKG_USING_LWGPS is not set # CONFIG_PKG_USING_TENSORFLOWLITEMICRO is not set +# CONFIG_PKG_USING_STATE_MACHINE is not set + +# +# Privated Packages of RealThread +# +# CONFIG_PKG_USING_CODEC is not set +# CONFIG_PKG_USING_PLAYER is not set +# CONFIG_PKG_USING_MPLAYER is not set +# CONFIG_PKG_USING_PERSIMMON_SRC is not set +# CONFIG_PKG_USING_JS_PERSIMMON is not set +# CONFIG_PKG_USING_JERRYSCRIPT_WIN32 is not set + +# +# Network Utilities +# +# CONFIG_PKG_USING_MDNS is not set +# CONFIG_PKG_USING_UPNP is not set +# CONFIG_PKG_USING_WICED is not set +# CONFIG_PKG_USING_CLOUDSDK is not set +# CONFIG_PKG_USING_POWER_MANAGER is not set +# CONFIG_PKG_USING_RT_OTA is not set +# CONFIG_PKG_USING_RDBD_SRC is not set +# CONFIG_PKG_USING_RTINSIGHT is not set +# CONFIG_PKG_USING_SMARTCONFIG is not set +# CONFIG_PKG_USING_RTX is not set +# CONFIG_RT_USING_TESTCASE is not set +# CONFIG_PKG_USING_NGHTTP2 is not set +# CONFIG_PKG_USING_AVS is not set +# CONFIG_PKG_USING_ALI_LINKKIT is not set +# CONFIG_PKG_USING_STS is not set +# CONFIG_PKG_USING_DLMS is not set +# CONFIG_PKG_USING_AUDIO_FRAMEWORK is not set +# CONFIG_PKG_USING_ZBAR is not set +# CONFIG_PKG_USING_MCF is not set +# CONFIG_PKG_USING_URPC is not set +# CONFIG_PKG_USING_BSAL is not set +# CONFIG_PKG_USING_DCM is not set +# CONFIG_PKG_USING_EMQ is not set +# CONFIG_PKG_USING_CFGM is not set +# CONFIG_PKG_USING_RT_CMSIS_DAP is not set +# CONFIG_PKG_USING_SMODULE is not set +# CONFIG_PKG_USING_SNFD is not set +# CONFIG_PKG_USING_UDBD is not set +# CONFIG_PKG_USING_BENCHMARK is not set +# CONFIG_PKG_USING_UBJSON is not set +# CONFIG_PKG_USING_DATATYPE is not set +# CONFIG_PKG_USING_FASTFS is not set CONFIG_SOC_VEXPRESS_A9=y CONFIG_RT_USING_UART0=y CONFIG_RT_USING_UART1=y diff --git a/bsp/qemu-vexpress-a9/rtconfig.h b/bsp/qemu-vexpress-a9/rtconfig.h index 109d50a3aff661146fdf8f0cdb44579903c734b7..5e10fe7d2a07875940cb677faf7c6d2c813532b1 100644 --- a/bsp/qemu-vexpress-a9/rtconfig.h +++ b/bsp/qemu-vexpress-a9/rtconfig.h @@ -230,6 +230,7 @@ #define RT_USING_LWP #define RT_LWP_MAX_NR 30 +#define LWP_TASK_STACK_SIZE 16384 #define RT_CH_MSG_MAX_NR 1024 #define RT_LWP_SHM_MAX_NR 64 #define LWP_CONSOLE_INPUT_BUFFER_SIZE 1024 @@ -280,6 +281,12 @@ /* games: games run on RT-Thread console */ + +/* Privated Packages of RealThread */ + + +/* Network Utilities */ + #define SOC_VEXPRESS_A9 #define RT_USING_UART0 #define RT_USING_UART1 diff --git a/components/lwp/Kconfig b/components/lwp/Kconfig index 687fd8e2fe704ea0ad8a70e0443ef1d258fe5d76..0c0c5a47f6a14cdfc0c0a2e3a31e1c293a59059c 100644 --- a/components/lwp/Kconfig +++ b/components/lwp/Kconfig @@ -14,6 +14,11 @@ if RT_USING_LWP default 30 endif +config LWP_TASK_STACK_SIZE + int "The lwp thread kernel stack size" + default 16384 + depends on RT_USING_LWP + config RT_USING_GDBSERVER bool "Using gdbserver" default y diff --git a/components/lwp/lwp.c b/components/lwp/lwp.c index 3c0312566a16c3cfe75c4faf418139f1cea9e6a4..96de9795e6b708218d61abc30989981350a2c1c1 100644 --- a/components/lwp/lwp.c +++ b/components/lwp/lwp.c @@ -946,7 +946,7 @@ pid_t lwp_execve(char *filename, int argc, char **argv, char **envp) thread_name = thread_name ? thread_name + 1 : filename; thread = rt_thread_create(thread_name, lwp_thread_entry, RT_NULL, - 1024 * 16, 25, 200); + LWP_TASK_STACK_SIZE, 25, 200); if (thread != RT_NULL) { struct rt_lwp *self_lwp; diff --git a/components/lwp/lwp_syscall.c b/components/lwp/lwp_syscall.c index ae6b58fe0cc242294b8719300ce48ddeefbf9775..6eb2dd46636232b2620459b25b6bdae76489b49e 100644 --- a/components/lwp/lwp_syscall.c +++ b/components/lwp/lwp_syscall.c @@ -1302,7 +1302,7 @@ long sys_clone(void *arg[]) thread = rt_thread_create((const char *)"pthread", RT_NULL, RT_NULL, - ALLOC_KERNEL_STACK_SIZE, + self->stack_size, self->init_priority, self->init_tick); if (!thread) @@ -1493,7 +1493,7 @@ int sys_fork(void) thread = rt_thread_create((const char *)thread_name, RT_NULL, RT_NULL, - ALLOC_KERNEL_STACK_SIZE, + self_thread->stack_size, self_thread->init_priority, self_thread->init_tick); if (!thread) @@ -1523,15 +1523,15 @@ int sys_fork(void) rt_hw_interrupt_enable(level); /* copy origin stack */ - rt_memcpy(thread->stack_addr, self_thread->stack_addr, ALLOC_KERNEL_STACK_SIZE); + rt_memcpy(thread->stack_addr, self_thread->stack_addr, self_thread->stack_size); lwp_tid_set_thread(tid, thread); level = rt_hw_interrupt_disable(); user_stack = lwp_get_user_sp(); rt_hw_interrupt_enable(level); - tid = lwp_set_thread_context((void *)((char *)thread->stack_addr + ALLOC_KERNEL_STACK_SIZE), - (void *)((char *)self_thread->stack_addr + ALLOC_KERNEL_STACK_SIZE), user_stack, &thread->sp, tid); + tid = lwp_set_thread_context((void *)((char *)thread->stack_addr + thread->stack_size), + (void *)((char *)self_thread->stack_addr + self_thread->stack_size), user_stack, &thread->sp, tid); if (tid) { level = rt_hw_interrupt_disable(); diff --git a/components/lwp/lwp_user_mm.c b/components/lwp/lwp_user_mm.c index 41d98ddb41e7fa3839b9ea41b600cbb2985e5708..8bc8522d2e215555019e39f631614a48b3116f76 100644 --- a/components/lwp/lwp_user_mm.c +++ b/components/lwp/lwp_user_mm.c @@ -502,21 +502,21 @@ int lwp_user_accessable(void *addr, size_t size) addr_start = addr; addr_end = (void*)((char*)addr + size); - #ifdef ARCH_RISCV64 - if(addr_start < (void *)USER_VADDR_START) - { - return 0; - } - #else - if (addr_start >= (void*)KERNEL_VADDR_START) - { - return 0; - } - if (addr_start > (void *)KERNEL_VADDR_START) - { - return 0; - } - #endif +#ifdef ARCH_RISCV64 + if(addr_start < (void *)USER_VADDR_START) + { + return 0; + } +#else + if (addr_start >= (void*)KERNEL_VADDR_START) + { + return 0; + } + if (addr_end > (void *)KERNEL_VADDR_START) + { + return 0; + } +#endif mmu_info = &lwp->mmu_info; next_page = (void *)(((size_t)addr_start + ARCH_PAGE_SIZE) & ~(ARCH_PAGE_SIZE - 1));