From 9e7c1e08ee91acb485a395c65fa1401846ef4592 Mon Sep 17 00:00:00 2001 From: zhangzheng <1358745329@qq.com> Date: Fri, 8 Dec 2023 23:55:00 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dtcc=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mkrtos_knl/knl/globals.c | 2 +- mkrtos_knl/knl/syscall.c | 2 +- mkrtos_knl/stm32_link.lds | 2 +- mkrtos_script/build.sh | 2 +- mkrtos_user/lib/libc_backend/inc/fd_map.h | 6 +-- mkrtos_user/lib/libc_backend/src/fd_map.c | 2 +- mkrtos_user/lib/sys_util/inc/u_rpc.h | 2 + mkrtos_user/server/fs/fatfs/fs_rpc.c | 10 ++++- mkrtos_user/server/test/test/fs_test.c | 38 ++++++++++++++++++- .../server/tinycc-arm-thumb/CMakeLists.txt | 2 +- .../server/tinycc-arm-thumb/heap_stack.c | 2 +- mkrtos_user/server/tinycc-arm-thumb/tcc.c | 3 +- 12 files changed, 59 insertions(+), 14 deletions(-) diff --git a/mkrtos_knl/knl/globals.c b/mkrtos_knl/knl/globals.c index 87e3569f6..b2ea12bc0 100755 --- a/mkrtos_knl/knl/globals.c +++ b/mkrtos_knl/knl/globals.c @@ -18,7 +18,7 @@ #include "mm_man.h" #include "ipc.h" static mem_t global_mem; //!< 全局内存管理块 -static uint8_t mem_block[9*1024 * 1024]; //!< 内核内存分配堆 TODO:自动识别大小,或者从bootstrap中读取 +static uint8_t mem_block[31*1024 * 1024]; //!< 内核内存分配堆 TODO:自动识别大小,或者从bootstrap中读取 static kobject_t *kobj_ls[FACTORY_FUNC_MAX]; //!< 全局静态内核对象 /** * @brief 注册一个全局静态的内核对象 diff --git a/mkrtos_knl/knl/syscall.c b/mkrtos_knl/knl/syscall.c index 7d8db0be1..0a98fa190 100644 --- a/mkrtos_knl/knl/syscall.c +++ b/mkrtos_knl/knl/syscall.c @@ -1,6 +1,6 @@ /** * @file syscall.c - * @author ATShining (1358745329@qq.com) + * @author zhangzheng (1358745329@qq.com) * @brief * @version 0.1 * @date 2023-11-19 diff --git a/mkrtos_knl/stm32_link.lds b/mkrtos_knl/stm32_link.lds index 0d4e36c33..20562c0b9 100644 --- a/mkrtos_knl/stm32_link.lds +++ b/mkrtos_knl/stm32_link.lds @@ -1,7 +1,7 @@ ENTRY(Reset_Handler) MEMORY { - RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 10M + RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 32M FLASH (rx) : ORIGIN = 0x8000000 + 0x2000, LENGTH = 64K - 0x2000 } SECTIONS diff --git a/mkrtos_script/build.sh b/mkrtos_script/build.sh index de53492ab..36e8383e6 100755 --- a/mkrtos_script/build.sh +++ b/mkrtos_script/build.sh @@ -9,7 +9,7 @@ export INIT_OFFSET=0x10000 export BOOTFS_ADDR_OFFSET=0x20000 export KNL_TEXT=0x8000000 export KNL_DATA=0x20000000 -export KNL_DATA_SIZE=10M +export KNL_DATA_SIZE=32M export BOARD=STM32F2x export ARCH=cortex-m3 export PYTHON_EXECUTABLE=python3 diff --git a/mkrtos_user/lib/libc_backend/inc/fd_map.h b/mkrtos_user/lib/libc_backend/inc/fd_map.h index 939971aef..33acd97cf 100644 --- a/mkrtos_user/lib/libc_backend/inc/fd_map.h +++ b/mkrtos_user/lib/libc_backend/inc/fd_map.h @@ -3,8 +3,8 @@ typedef struct fd_map_entry { - uint16_t svr_fd; - uint16_t priv_fd; + uint32_t svr_fd; + uint32_t priv_fd; uint8_t type; uint8_t flags; } fd_map_entry_t; @@ -15,7 +15,7 @@ enum fd_type FD_FS, }; -int fd_map_alloc(uint16_t svr_fd, uint16_t priv_fd, enum fd_type type); +int fd_map_alloc(uint32_t svr_fd, uint32_t priv_fd, enum fd_type type); int fd_map_update(int fd, fd_map_entry_t *new_entry); int fd_map_free(int fd, fd_map_entry_t *ret_entry); int fd_map_get(int fd, fd_map_entry_t *new_entry); diff --git a/mkrtos_user/lib/libc_backend/src/fd_map.c b/mkrtos_user/lib/libc_backend/src/fd_map.c index d7f48358b..146ad760a 100644 --- a/mkrtos_user/lib/libc_backend/src/fd_map.c +++ b/mkrtos_user/lib/libc_backend/src/fd_map.c @@ -26,7 +26,7 @@ typedef struct fd_map static fd_map_t fd_map; -int fd_map_alloc(uint16_t svr_fd, uint16_t priv_fd, enum fd_type type) +int fd_map_alloc(uint32_t svr_fd, uint32_t priv_fd, enum fd_type type) { int alloc_fd = 0; diff --git a/mkrtos_user/lib/sys_util/inc/u_rpc.h b/mkrtos_user/lib/sys_util/inc/u_rpc.h index 17ff91a3e..8b52f5b2e 100644 --- a/mkrtos_user/lib/sys_util/inc/u_rpc.h +++ b/mkrtos_user/lib/sys_util/inc/u_rpc.h @@ -434,6 +434,8 @@ RPC_SVR_BUF_TO_MSG_WITHOUT_IMPL(rpc_obj_handler_t_t, int) */ RPC_TYPE_INIT_WITHOUT_IMPL(rpc_obj_handler_t_t) { + d->data = 0; + d->del_map_flags = 0; } //!< end diff --git a/mkrtos_user/server/fs/fatfs/fs_rpc.c b/mkrtos_user/server/fs/fatfs/fs_rpc.c index 80a4a2240..e5506d646 100644 --- a/mkrtos_user/server/fs/fatfs/fs_rpc.c +++ b/mkrtos_user/server/fs/fatfs/fs_rpc.c @@ -52,6 +52,10 @@ static file_desc_t *file_get(int fd) { return NULL; } + if (files[fd].fp.obj.fs == NULL) + { + return NULL; + } return files + fd; } static int fatfs_err_conv(FRESULT res) @@ -146,7 +150,11 @@ int fs_svr_open(const char *path, int flags, int mode) // cons_write_str("open file..\n"); } - return fatfs_err_conv(ret); + if (ret != FR_OK) + { + return fatfs_err_conv(ret); + } + return fd; } int fs_svr_read(int fd, void *buf, size_t len) diff --git a/mkrtos_user/server/test/test/fs_test.c b/mkrtos_user/server/test/test/fs_test.c index 1792b3f17..abbffc408 100644 --- a/mkrtos_user/server/test/test/fs_test.c +++ b/mkrtos_user/server/test/test/fs_test.c @@ -11,14 +11,48 @@ void fs_test(void) { + { + static char tmp[] = "\ + int a=2;\ + int b=2;\ + \ + int add(int a, int b)\ + {\ + return a+b;\ + }\ + int sub(int a, int b)\ + {\ + return a-b;\ + }\ + int _start(void)\ + {\ + sub(10, 2);\ + add(10, 2);\ + return a+b;\ + }\ + "; + int fd = open("/mnt/1.c", O_CREAT | O_RDWR, 0777); + assert(fd >= 0); + int wlen = write(fd, tmp, sizeof(tmp) - 1); + // assert(wlen == 4); + // int ret = lseek(fd, 0, SEEK_SET); + // assert(ret >= 0); + // int rlen = read(fd, tmp, 4); + // assert(rlen == 4); + // assert(strcmp(tmp, "123") == 0); + close(fd); + } { char tmp[] = "int _start(void)\ {\ return 3;\ }"; - int fd = open("/mnt/1.c", O_CREAT | O_RDWR, 0777); + int fd = open("/mnt/2.c", O_CREAT | O_RDWR, 0777); assert(fd >= 0); - int wlen = write(fd, tmp, sizeof(tmp)-1); + int i = 1000; + + while (i--) + write(fd, tmp, sizeof(tmp) - 1); // assert(wlen == 4); // int ret = lseek(fd, 0, SEEK_SET); // assert(ret >= 0); diff --git a/mkrtos_user/server/tinycc-arm-thumb/CMakeLists.txt b/mkrtos_user/server/tinycc-arm-thumb/CMakeLists.txt index 00dacd407..dd89f77d4 100644 --- a/mkrtos_user/server/tinycc-arm-thumb/CMakeLists.txt +++ b/mkrtos_user/server/tinycc-arm-thumb/CMakeLists.txt @@ -3,7 +3,7 @@ cmake_minimum_required(VERSION 3.13) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w -DUSE_STDPERIPH_DRIVER=1 \ -DTCC_TARGET_ARM_THUMB -DTCC_ARM_VFP -DTCC_ARM_EABI \ --DCONFIG_TCC_STATIC \ +-DCONFIG_TCC_STATIC -DNO_SEMAPHORE_H \ ") # -DTCC_PROFILE # -DTCC_ARM_HARDFLOAT diff --git a/mkrtos_user/server/tinycc-arm-thumb/heap_stack.c b/mkrtos_user/server/tinycc-arm-thumb/heap_stack.c index f86da58a3..449d04651 100644 --- a/mkrtos_user/server/tinycc-arm-thumb/heap_stack.c +++ b/mkrtos_user/server/tinycc-arm-thumb/heap_stack.c @@ -1,5 +1,5 @@ -#define HEAP_SIZE 1024*1024*4 +#define HEAP_SIZE 1024*1024*3 #define STACK_SIZE 8192 #if defined(__CC_ARM) diff --git a/mkrtos_user/server/tinycc-arm-thumb/tcc.c b/mkrtos_user/server/tinycc-arm-thumb/tcc.c index e31bd7d66..412d48e0f 100644 --- a/mkrtos_user/server/tinycc-arm-thumb/tcc.c +++ b/mkrtos_user/server/tinycc-arm-thumb/tcc.c @@ -254,6 +254,7 @@ char *fake_argv[] = { "tcc_armv7m", "-nostdinc", "-nostdlib", + "-c", "/mnt/1.c", "-o", "/mnt/a.out" @@ -271,7 +272,7 @@ int main(int argc0, char **argv0) redo: // argc = argc0, argv = argv0; - argc = 6, argv = fake_argv; + argc = 7, argv = fake_argv; s = s1 = tcc_new(); opt = tcc_parse_args(s, &argc, &argv, 1);